Condividi tramite


Leggere da modelli semantici e scrivere dati di consumo tramite Power BI con Python

Questo articolo illustra come leggere dati, metadati e valutare le misure nei modelli semantici usando la libreria SemPy Python in Microsoft Fabric. Si apprenderà anche a scrivere dati che i modelli semantici possono utilizzare.

Prerequisiti

  • Passare all'esperienza di data science in Microsoft Fabric.
  • Creare un nuovo notebook per copiare e incollare il codice nelle celle.
  • Per Spark 3.4 e versioni successive, il collegamento semantico è disponibile nel runtime predefinito quando si usa Fabric e non è necessario installarlo. Se si sta usando Spark 3.3 o versioni precedenti, o se si vuole eseguire l'aggiornamento alla versione più recente del collegamento semantico, è possibile eseguire il comando: python %pip install -U semantic-link
  • Aggiungere un lakehouse al notebook
  • Scaricare il modello semantico Customer Profitability Sample.pbix dalla cartella datasets del repository fabric-samples e salvarlo in locale.

Caricare il modello semantico nell'area di lavoro personale

Questo articolo usa il modello semantico Customer Profitability Sample.pbix . Il modello semantico fa riferimento a un'azienda che produce materiali di marketing. Include dati relativi a prodotti, clienti e ricavi per diverse business unit.

  1. Apri l'area di lavoro in Fabric Data Science.
  2. Selezionare Importa Report, Report impaginato o Cartella di lavoro > da questo computer e selezionare il Customer Profitability Sample.pbix come modello semantico.

Screenshot dell'interfaccia per caricare un modello semantico nell'area di lavoro.

Al termine del caricamento, l'area di lavoro include tre nuovi artefatti: un report di Power BI, un dashboard e un modello semantico denominato Customer Profitability Sample. I passaggi descritti in questo articolo si basano su questo modello semantico.

Screenshot degli elementi del file di Power BI caricato nell'area di lavoro.

Usare Python per leggere i dati dai modelli semantici

L'API SemPy Python può recuperare dati e metadati da modelli semantici che si trovano in un'area di lavoro di Microsoft Fabric. L'API può anche eseguire query su di esse.

Il notebook, il modello semantico set di dati di Power BI e il lakehouse possono trovarsi nella stessa area di lavoro o in aree di lavoro diverse. Per impostazione predefinita, SemPy tenta di accedere al modello semantico da:

  • l’area di lavoro del tuo lakehouse, se hai collegato un lakehouse al tuo notebook.
  • L'area di lavoro del notebook, se non è collegato alcun lakehouse.

Se il modello semantico non si trova in una di queste aree di lavoro, è necessario specificare l'area di lavoro del modello semantico quando si chiama un metodo SemPy.

Per leggere i dati dai modelli semantici, seguire questa procedura:

  1. Elencare i modelli semantici disponibili nell'area di lavoro personale.

    import sempy.fabric as fabric
    
    df_datasets = fabric.list_datasets()
    df_datasets
    
  2. Elencare le tabelle disponibili nel modello semantico Customer Profitability Sample.

    df_tables = fabric.list_tables("Customer Profitability Sample", include_columns=True)
    df_tables
    
  3. Elencare le misure definite nel modello semantico Customer Profitability Sample.

    Suggerimento

    Nell'esempio di codice seguente è stata specificata l'area di lavoro per SemPy da usare per accedere al modello semantico. È possibile sostituire <Your Workspace> con il nome dell'area di lavoro in cui è stato caricato il modello semantico (dalla sezione Caricare il modello semantico nell'area di lavoro).

    df_measures = fabric.list_measures("Customer Profitability Sample", workspace="<Your Workspace>")
    df_measures
    

    In questo caso è stato determinato che la tabella Customer è la tabella di interesse.

  4. Leggi la tabella Customer dal modello semantico Customer Profitability Sample.

    df_table = fabric.read_table("Customer Profitability Sample", "Customer")
    df_table
    

    Nota

    • I dati vengono recuperati tramite XMLA, che richiede almeno l'abilitazione di XMLA di sola lettura .
    • La quantità di dati recuperabili è limitata da: - Memoria massima per query dello SKU di capacità che ospita il modello semantico. - Il nodo driver Spark (visitare le dimensioni dei nodi per altre informazioni) che esegue il notebook.
    • Tutte le richieste usano priorità bassa per ridurre al minimo l'impatto sulle prestazioni di Microsoft Azure Analysis Services e vengono fatturate come richieste interattive.
  5. Valutare la misura Total Revenue per lo stato e la data di ogni cliente.

    df_measure = fabric.evaluate_measure(
        "Customer Profitability Sample",
        "Total Revenue",
        ["'Customer'[State]", "Calendar[Date]"])
    df_measure
    

    Nota

    • Per impostazione predefinita, i dati non vengono recuperati tramite XMLA, pertanto non è necessario abilitare XMLA di sola lettura.
    • I dati non sono soggetti alle limitazioni del back-end di Power BI.
    • La quantità di dati recuperabili è limitata da: - Memoria massima per query dello SKU di capacità che ospita il modello semantico. - Il nodo del driver di Spark (visitare le dimensioni dei nodi per ulteriori informazioni) che esegue il notebook.
    • Tutte le richieste vengono fatturate come richieste interattive.
    • La evaluate_dax funzione non aggiorna automaticamente il modello semantico. Visitare questa pagina per altre informazioni.
  6. Per aggiungere filtri al calcolo della misura, specificare un elenco di valori consentiti per una determinata colonna.

    filters = {
        "State[Region]": ["East", "Central"],
        "State[State]": ["FLORIDA", "NEW YORK"]
    }
    df_measure = fabric.evaluate_measure(
        "Customer Profitability Sample",
        "Total Revenue",
        ["Customer[State]", "Calendar[Date]"],
        filters=filters)
    df_measure
    
  7. Valutare la misura Total Revenue per lo stato e la data del cliente con una query DAX.

    df_dax = fabric.evaluate_dax(
        "Customer Profitability Sample",
        """
        EVALUATE SUMMARIZECOLUMNS(
            'State'[Region],
            'Calendar'[Date].[Year],
            'Calendar'[Date].[Month],
            "Total Revenue",
            CALCULATE([Total Revenue]))
        """)
    

    Nota

    • I dati vengono recuperati tramite XMLA e pertanto devono essere abilitati almeno XMLA di sola lettura
    • La quantità di dati recuperabili è limitata dalla memoria disponibile in Microsoft Azure Analysis Services e dal nodo driver Spark (visitare le dimensioni dei nodi per altre informazioni)
    • Tutte le richieste usano priorità bassa per ridurre al minimo l'impatto sulle prestazioni di Analysis Services e vengono fatturate come richieste interattive
  8. Usare la magia della cella %%dax per valutare la stessa query DAX, senza la necessità di importare la libreria. Esegui questa cella per caricare la magia della cella %%dax.

    %load_ext sempy
    

    Il parametro dell'area di lavoro è facoltativo. Segue le stesse regole del parametro dell'area di lavoro della evaluate_dax funzione.

    La magia delle celle supporta anche l'accesso alle variabili python con la sintassi {variable_name}. Per usare una parentesi graffa nella query DAX, effettuare l'escape con un'altra parentesi graffa (ad esempio: EVALUATE {{1}}).

    %%dax "Customer Profitability Sample" -w "<Your Workspace>"
    EVALUATE SUMMARIZECOLUMNS(
        'State'[Region],
        'Calendar'[Date].[Year],
        'Calendar'[Date].[Month],
        "Total Revenue",
        CALCULATE([Total Revenue]))
    

    L'oggetto FabricDataFrame risultante è disponibile tramite la _ variabile . Tale variabile acquisisce l'output dell'ultima cella eseguita.

    df_dax = _
    
    df_dax.head()
    
  9. È possibile aggiungere misure ai dati recuperati da origini esterne. Questo approccio combina tre attività:

    • Risolve i nomi delle colonne nelle dimensioni di Power BI
    • Definisce il gruppo in base alle colonne
    • Filtra la misura Tutti i nomi di colonna che non possono essere risolti all'interno del modello semantico specificato vengono ignorati (vedere la risorsa sintassi DAX supportata per altre informazioni).
    from sempy.fabric import FabricDataFrame
    
    df = FabricDataFrame({
            "Sales Agent": ["Agent 1", "Agent 1", "Agent 2"],
            "Customer[Country/Region]": ["US", "GB", "US"],
            "Industry[Industry]": ["Services", "CPG", "Manufacturing"],
        }
    )
    
    joined_df = df.add_measure("Total Revenue", dataset="Customer Profitability Sample")
    joined_df
    

Parametri speciali

I metodi SemPy read_table e evaluate_measure hanno più parametri utili per modificare l'output. Questi parametri includono:

  • pandas_convert_dtypes: se impostato su True, pandas esegue il cast delle colonne del DataFrame risultante al miglior dtype possibile. Altre informazioni sono disponibili in convert_dtypes. Se questo parametro è disattivato, potrebbero verificarsi problemi di incompatibilità di tipo tra colonne di tabelle correlate. Il modello di Power BI potrebbe non rilevare questi problemi a causa della conversione implicita dei tipi DAX.

SemPy read_table usa anche le informazioni sul modello fornite da Power BI.

Scrivere dati utilizzabili dai modelli semantici

Le tabelle Spark aggiunte al lakehouse vengono aggiunte automaticamente al modello semantico predefinito corrispondente. Questo articolo illustra come scrivere dati al Lakehouse collegato. FabricDataFrame accetta gli stessi dati di input dei dataframe Pandas.

from sempy.fabric import FabricDataFrame

df_forecast = FabricDataFrame({'ForecastedRevenue': [1, 2, 3]})

df_forecast.to_lakehouse_table("ForecastTable")

Con Power BI, la tabella ForecastTable può essere aggiunta a un modello semantico composito che include il modello semantico Lakehouse.