Freigeben über


Aus semantischen Modellen lesen und Daten schreiben, die von Power BI mit Python verwendet werden können

In diesem Artikel erfahren Sie, wie Sie Daten, Metadaten und Kennzahlen in semantischen Modellen mithilfe der SemPy Python-Bibliothek in Microsoft Fabric lesen. Außerdem lernen Sie, Daten zu schreiben, die semantische Modelle nutzen können.

Voraussetzungen

  • Wechseln Sie zur Data Science-Erfahrung in Microsoft Fabric.
  • Erstellen Sie ein neues Notizbuch , 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 Semantikmodell "Customer Profitability Sample.pbix " aus dem Datensatzordner des Fabric-Samples-Repositorys herunter, und speichern Sie es lokal.

Hochladen des semantischen Modells in Ihren Arbeitsbereich

In diesem Artikel wird das semantische Modell Customer Profitability Sample.pbix verwendet. Das Semantikmodell verweist auf ein Unternehmen, das Marketingmaterialien herstellt. Sie umfasst Produkt-, Kunden- und Umsatzdaten für unterschiedliche Geschäftseinheiten.

  1. Öffnen Sie Ihren Arbeitsbereich in Fabric Data Science.
  2. Wählen Sie > Bericht importieren, paginierten Bericht oder Arbeitsmappe > von diesem Computer aus, und wählen Sie das Semantikmodell Customer Profitability Sample.pbix aus.

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

Nachdem der Upload abgeschlossen ist, enthält Ihr Arbeitsbereich drei neue Artefakte: einen Power BI-Bericht, ein Dashboard und ein semantisches Modell namens Customer Profitability Sample. Die Schritte in diesem Artikel basieren auf diesem semantischen Modell.

Screenshot der Elemente 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.

Führen Sie die folgenden Schritte aus, um Daten aus semantischen Modellen zu lesen:

  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, was mindestens XMLA-Schreibschutz erfordert, um aktiviert zu werden.
    • Die Menge der abrufbaren Daten ist begrenzt durch: - Der maximale Arbeitsspeicher pro Abfrage der Kapazitäts-SKU, die das Semantikmodell hostet. – Der Spark-Treiberknoten (besuchen Sie die Knotengrößen für weitere Informationen), der das Notizbuch ausführt.
    • Alle Anforderungen verwenden eine geringe Priorität, um die Auswirkungen auf die Leistung von Microsoft Azure Analysis Services zu minimieren und als interaktive Anforderungen in Rechnung zu stellen.
  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. Bewerten Sie mit einer DAX-Abfrage das Maß "Gesamtumsatz" pro Bundesland und Datum des Kunden.

    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:

  • pandas_convert_dtypes: Bei Festlegung Trueauf , pandas wandelt die resultierenden DataFrame-Spalten in den bestmöglichen dtype um. Weitere Informationen finden Sie in convert_dtypes. Wenn dieser Parameter deaktiviert ist, können Typinkompatibilitätsprobleme 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 Festlegung Trueauf , konvertiert sie Power BI-Hierarchien in eine Pandas MultiIndex-Struktur.

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. In diesem Artikel wird veranschaulicht, wie Daten in das angefügte Lakehouse geschrieben werden. Die 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 zu einem zusammengesetzten Semantikmodell hinzugefügt werden, das das Lakehouse-Semantikmodell enthält.