Condividi tramite


Leggere da modelli semantici e scrivere dati utilizzabili da Power BI con Python

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

Prerequisiti

  • Passare all'esperienza di data science in Microsoft Fabric.
  • Creare un nuovo notebook per copiare/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 usa Spark 3.3 o versione successiva o se si vuole eseguire l'aggiornamento alla versione più recente di Semantic Link, è 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 salvare il modello semantico in locale.

Caricare il modello semantico nell'area di lavoro

In questo articolo viene usato il modello semantico Customer Profitability Sample.pbix . Questo modello semantico fa riferimento a una società che produce materiali di marketing e contiene dati su prodotti, clienti e ricavi corrispondenti per varie business unit.

  1. Aprire l'area di lavoro in Data Science di Fabric.
  2. Selezionare Carica sfoglia e selezionare il modello semantico Customer Profitability Sample.pbix.>

Screenshot che mostra l'interfaccia per caricare un modello semantico nell'area di lavoro.

Al termine del caricamento, l'area di lavoro avrà tre nuovi artefatti: un report di Power BI, un dashboard e un modello semantico denominato Customer Profitability Sample. Questo modello semantico verrà usato per i passaggi descritti in questo articolo.

Screenshot che mostra gli elementi del file di Power BI caricato nell'area di lavoro.

Usare Python per leggere i dati dai modelli semantici

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

Il notebook, il modello semantico del set di dati di Power BI e la 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:

  • Area di lavoro del lakehouse, se è stata collegata una lakehouse al notebook.
  • Area di lavoro del notebook, se non è associata alcuna 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:

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

    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

    Nel 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
    

    A questo punto è stato determinato che la tabella Customer è la tabella di interesse.

  4. Leggere 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 e pertanto devono essere abilitati almeno xmlA di sola lettura.
    • La quantità di dati recuperabili è limitata dalla memoria massima per ogni query dello SKU di capacità che ospita il modello semantico e dal nodo driver Spark (vedere le dimensioni dei nodi) 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 ogni stato e data del 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 e pertanto non richiedono l'abilitazione di sola lettura XMLA.
    • Inoltre, i dati non sono soggetti alle limitazioni del back-end di Power BI.
    • La quantità di dati recuperabili è limitata dalla memoria massima per ogni query dello SKU di capacità che ospita il modello semantico e dal nodo driver Spark (vedere le dimensioni dei nodi) che esegue il notebook.
    • Tutte le richieste vengono fatturate come richieste interattive.
  6. È possibile aggiungere filtri al calcolo della misura specificando un elenco di valori che possono trovarsi in 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. È anche possibile valutare la misura Total Revenue per ogni stato e data del cliente usando 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 (vedere dimensioni del nodo).
    • Tutte le richieste usano priorità bassa per ridurre al minimo l'impatto sulle prestazioni di Analysis Services e vengono fatturate come richieste interattive.
  8. È possibile valutare la stessa query DAX senza la necessità di importare la libreria usando il magic della %%dax cella. Eseguire la cella seguente per caricare %%dax il magic delle celle.

    %load_ext sempy
    

    Il parametro dell'area di lavoro è facoltativo e segue le stesse regole del parametro dell'area di lavoro della evaluate_dax funzione. Il magic della cella supporta anche l'accesso alle variabili Python usando la {variable_name} sintassi . Per usare una parentesi graffa nella query DAX, eseguirne 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 , che acquisisce l'output dell'ultima cella eseguita.

    df_dax = _
    
    df_dax.head()
    
  9. In alternativa, è 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 per colonne e filtra la misura. Tutti i nomi di colonna che non possono essere risolti all'interno del modello semantico specificato vengono ignorati (vedere la sintassi DAX supportata).

    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:

  • fully_qualified_columns: se il valore è "True", i metodi restituiscono nomi di colonne nel formato TableName[ColumnName].
  • num_rows: numero di righe da restituire nel risultato.
  • pandas_convert_dtypes: se il valore è "True", viene eseguito il cast delle colonne del dataframe risultante al migliore dtype possibile, usando pandas convert_dtypes. Se questo parametro è disattivato, i problemi di incompatibilità dei tipi possono determinare tra colonne di tabelle correlate che potrebbero non essere state rilevate nel modello di Power BI a causa della conversione implicita del tipo DAX.

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

  • multiindex_hierarchies: se True, converte le gerarchie di Power BI nella struttura Pandas MultiIndex.

Scrivere dati di consumo per modelli semantici

Le tabelle Spark aggiunte a lakehouse vengono aggiunte automaticamente al modello semantico predefinito corrispondente. In questo esempio viene illustrato come scrivere dati nel 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")

Usando Power BI, la tabella ForecastTable può essere aggiunta a un modello semantico composito usando il modello semantico Lakehouse.