Freigeben über


Lesen von semantischen Modellen und Schreiben von Daten, die von Power BI verbraucht werden können, mithilfe von Python

In diesem Artikel erfahren Sie, wie Sie Daten und Metadaten lesen und Measures in semantischen Modellen mithilfe der SemPy-Python-Bibliothek in Microsoft Fabric auswerten. Außerdem erfahren Sie, wie Sie Daten schreiben, die von semantischen Modellen genutzt werden können.

Voraussetzungen

  • Navigieren Sie zur Data Science-Benutzeroberfläche in Microsoft Fabric.
  • Erstellen Sie ein neues Notebook, um Code in Zellen zu kopieren und einzufügen
  • Für Spark 3.4 und höher ist Semantic Link bei Verwendung von Fabric in der Standardlaufzeit verfügbar und muss nicht installiert werden. Wenn Sie Spark 3.3 oder darunter verwenden oder auf die neueste Version von Semantic Link aktualisieren möchten, können Sie den Befehl ausführen: python %pip install -U semantic-link  
  • Fügen Sie ein Lakehouse zum Notebook hinzu
  • Laden Sie das semantische Modell Customer Profitability Sample.pbix aus dem Ordner datasets des Repositorys „fabric-samples“ herunter, und speichern Sie das semantische Modell lokal

Hochladen des semantischen Modells in Ihren Arbeitsbereich

In diesem Artikel wird das semantische Modell Customer Profitability Sample.pbix verwendet. Dieses semantische Modell verweist auf ein Unternehmensmarketingmaterial. Es enthält Produkt-, Kunden- und entsprechende Umsatzdaten für verschiedene Geschäftseinheiten.

  1. Öffnen Sie Ihren Arbeitsbereich in Fabric Data Science
  2. Wählen Sie Hochladen > Durchsuchen und dann das semantische Modell Customer Profitability Sample.pbix aus.

Screenshot der Schnittstelle zum Hochladen eines semantischen Modells in den Arbeitsbereich.

Nach Abschluss des Uploads verfügt Ihr Arbeitsbereich über drei neue Artefakte: einen Power BI-Bericht, ein Dashboard und ein semantisches Modell mit dem Namen Beispiel für die Kundenrentabilität. Die Schritte in diesem Artikel basieren auf diesem semantischen Modell.

Screenshot der Artikel aus der Power BI-Datei, die in den Arbeitsbereich hochgeladen wurde.

Verwenden von Python zum Lesen von Daten aus semantischen Modellen

Die SemPy Python-API kann Daten und Metadaten aus semantischen Modellen abrufen, die sich in einem Microsoft Fabric-Arbeitsbereich befinden. Die API kann auch Abfragen auf ihnen ausführen.

Ihr Notebook, Ihr semantisches Power BI-Dataset-Modell und Ihr Lakehouse können sich im selben Arbeitsbereich oder in verschiedenen Arbeitsbereichen befinden. SemPy versucht standardmäßig, an folgenden Stellen auf Ihr semantisches Modell zuzugreifen:

  • Im Arbeitsbereich Ihres Lakehouse, wenn Sie ein Lakehouse an Ihr Notebook angefügt haben.
  • Im Arbeitsbereich Ihres Notebooks, wenn kein Lakehouse angefügt ist.

Wenn sich Ihr semantisches Modell nicht in einem dieser Arbeitsbereiche befindet, müssen Sie den Arbeitsbereich Ihres semantischen Modells angeben, wenn Sie eine SemPy-Methode aufrufen.

Zum Lesen von Daten aus semantischen Modellen:

  1. Listen Sie die verfügbaren semantischen Modelle in Ihrem Arbeitsbereich auf.

    import sempy.fabric as fabric
    
    df_datasets = fabric.list_datasets()
    df_datasets
    
  2. Listen Sie die Tabellen auf, die im semantischen Modell Customer Profitability Sample verfügbar sind.

    df_tables = fabric.list_tables("Customer Profitability Sample", include_columns=True)
    df_tables
    
  3. Listen Sie die Measures auf, die im semantischen Modell Customer Profitability Sample definiert sind.

    Tipp

    Im folgenden Codebeispiel haben wir den Arbeitsbereich für SemPy angegeben, der für den Zugriff auf das semantische Modell verwendet werden soll. Sie können Your Workspace mit dem Namen des Arbeitsbereichs ersetzen, in den Sie das semantische Modell hochgeladen haben (aus dem Abschnitt Hochladen des semantischen Modells in Ihren Arbeitsbereich).

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

    Hier haben wir festgestellt, dass die Tabelle Customer die Tabelle ist, die uns interessiert.

  4. Lesen Sie die Tabelle Customer aus dem semantischen Modell Customer Profitability Sample.

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

    Hinweis

    • Daten werden mithilfe von XMLA abgerufen. Dies erfordert, dass mindestens XMLA schreibgeschützt aktiviert ist.
    • Die Menge der abgerufenen Daten ist begrenzt, durch den maximalen Arbeitsspeicher pro Abfrage der Kapazitäts-SKU, die das semantische Modell, den Spark-Treiberknoten, hostet (weitere Informationen unter Knotengrößen ), der das Notebook ausführt
    • Alle Anforderungen verwenden eine geringe Priorität, um die Auswirkungen auf die Leistung von Microsoft Azure Analysis Services zu minimieren und werden als interaktive Abrufe in Rechnung gestellt.
  5. Bewerten Sie die Metrik Total Revenue für den Status und das Datum der einzelnen Kunden.

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

    Hinweis

  6. Wenn Sie der Metrikberechnung Filter hinzufügen möchten, geben Sie eine Liste zulässiger Werte für eine bestimmte Spalte an.

    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. Sie können auch die Metrik Total Revenue anhand von Kundenstatus und Datum auswerten, indem Sie eine DAX-Abfrage verwenden.

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

    Hinweis

    • Daten werden mithilfe von XMLA abgerufen und erfordern daher mindestens XMLA-Schreibschutz, um aktiviert zu sein
    • Die Menge der abrufbaren Daten ist durch den verfügbaren Arbeitsspeicher in Microsoft Azure Analysis Services und den Spark-Treiberknoten begrenzt (besuchen Sie Knotengrößen, um weitere Informationen zu erhalten)
    • Alle Anforderungen verwenden eine geringe Priorität, um die Auswirkungen auf die Leistung von Analysis Services zu minimieren und werden als interaktive Abrufe in Rechnung gestellt
  8. Verwenden Sie den Magic-Befehl %%dax für Zellen, um dieselbe DAX-Abfrage auszuwerten, ohne die Bibliothek importieren zu müssen. Führen Sie diese Zelle aus, um den Magic-Befehl %%dax für Zellen zu laden:

    %load_ext sempy
    

    Der Arbeitsbereichsparameter ist optional. Es folgt den gleichen Regeln wie der Arbeitsbereichsparameter der evaluate_dax-Funktion.

    Der Magic-Befehl unterstützt auch den Zugriff auf Python-Variablen mit der {variable_name}-Syntax. Um eine geschweifte Klammer in der DAX-Abfrage anzugeben, verwenden Sie eine andere geschweifte Klammer als Escapezeichen (z. B. EVALUATE {{1}}).

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

    Der resultierende FabricDataFrame ist über die _-Variable verfügbar. Diese Variable erfasst die Ausgabe der letzten ausgeführten Zelle.

    df_dax = _
    
    df_dax.head()
    
  9. Sie können Daten, die aus externen Quellen abgerufen werden, Metriken hinzufügen. Dieser Ansatz kombiniert drei Aufgaben:

    • Spaltennamen werden in Power BI-Dimensionen aufgelöst
    • Gruppen werden nach Spalten definiert
    • Es filtert die Metrik. Die „Spaltennamen“, die nicht innerhalb des angegebenen semantischen Modells aufgelöst werden können, werden ignoriert (weitere Informationen finden Sie in der unterstützten DAX-Syntaxressource).
    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
    

Spezielle Parameter

Die SemPy-Methoden read_table und evaluate_measure enthalten weitere Parameter, die zum Bearbeiten der Ausgabe nützlich sind. Diese Parameter umfassen:

  • fully_qualified_columns: Bei einem „True“-Wert geben die Methoden Spaltennamen im Formular TableName[ColumnName] zurück
  • num_rows: Die Anzahl der Zeilen, die im Ergebnis ausgegeben werden sollen
  • pandas_convert_dtypes: Bei einem „True“-Wert wandeln Pandas die resultierenden DataFrame-Spalten in die bestmöglichen dtypeconvert_dtypes um. Wenn dieser Parameter deaktiviert ist, können Fehler bei der Inkompatibilität zwischen Spalten verwandter Tabellen auftreten. Das Power BI-Modell erkennt diese Probleme möglicherweise aufgrund der impliziten DAX-Typkonvertierung nicht

SemPy read_table verwendet auch die Modellinformationen, die Power BI bereitstellt.

  • multiindex_hierarchies: Bei „True“ werden Power BI-Hierarchien in eine Pandas MultiIndex-Struktur konvertiert

Schreiben von Daten, die von semantischen Modellen verwendet werden können

Spark-Tabellen, die einem Lakehouse hinzugefügt werden, werden automatisch zum entsprechenden semantischen Standard-Modell hinzugefügt. Dieses Beispiel veranschaulicht, wie Daten in das angefügte Lakehouse geschrieben werden. FabricDataFrame akzeptiert dieselben Eingabedaten wie Pandas-Datenframes.

from sempy.fabric import FabricDataFrame

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

df_forecast.to_lakehouse_table("ForecastTable")

Mit Power BI kann die ForecastTable-Tabelle einem zusammengesetzten Semantikmodell mit dem Lakehouse-Semantikmodell hinzugefügt werden.