Condividi tramite


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

Questo articolo illustra come leggere i dati e i 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 utilizzare.

Prerequisiti

  • Visitare l'esperienza di data science in Microsoft Fabric.
  • Creare un nuovo notebook per copiare/incollare codice in 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 salvare il modello semantico in locale

Caricare il modello semantico nell'area di lavoro personale

Questo articolo usa il modello semantico Customer Profitability Sample.pbix . Questo modello semantico fa riferimento a una società che produce materiali di marketing. Contiene i dati relativi a 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 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 tale modello semantico.

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 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:

  • area di lavoro del lakehouse, se un lakehouse è stato associato al notebook.
  • area di lavoro del notebook, se non è associato 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:

  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. 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. Questa operazione richiede almeno l'abilitazione della sola lettura XMLA.
    • La quantità di dati recuperabili è limitata da : la 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 e pertanto non richiedono XMLA di sola lettura per essere abilitati.
    • I dati non sono soggetti alle limitazioni del back-end di Power BI.
    • La quantità di dati recuperabili è limitata da : la memoria massima per query dello SKU di capacità che ospita il modello semantico, il nodo driver Spark (visitare le dimensioni del nodo per altre informazioni) che esegue il notebook
    • Tutte le richieste vengono fatturate come richieste interattive
  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. È anche possibile valutare la misura Total Revenue per ogni stato e 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 il magic della %%dax cella per valutare la stessa query DAX, senza la necessità di importare la libreria. Eseguire questa cella per caricare %%dax il magic cella:

    %load_ext sempy
    

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

    Il magic delle celle supporta anche l'accesso alle variabili Python con 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 . 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:

  • fully_qualified_columns: per un valore "True", i metodi restituiscono nomi di colonna nel formato TableName[ColumnName]
  • num_rows: numero di righe da restituire nel risultato
  • pandas_convert_dtypes: per un valore "True", pandas esegue il cast delle colonne dataframe risultanti al miglior dtypepossibile convert_dtypes. Se questo parametro è disattivato, è possibile che si verifichino problemi di incompatibilità di tipo tra le colonne delle tabelle correlate; Il modello di Power BI potrebbe non rilevare tali problemi a causa della conversione implicita dei tipi DAX

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

  • multiindex_hierarchies: se "True", converte le gerarchie di Power BI in una struttura MultiIndex pandas

Scrivere dati utilizzabili dai modelli semantici

Le tabelle Spark aggiunte al 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")

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