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
Erwerben Sie ein Microsoft Fabric-Abonnement. Registrieren Sie sich alternativ für eine kostenlose Microsoft Fabric-Testversion.
Melden Sie sich bei Microsoft Fabric an.
Wechseln Sie zur Synapse-Data Science-Benutzeroberfläche, indem Sie den Umschalter für die Benutzeroberfläche auf der linken Seite Ihrer Homepage verwenden.
- 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.
- Öffnen Sie Ihren Arbeitsbereich in Fabric Data Science
- Wählen Sie Hochladen > Durchsuchen und dann das semantische Modell Customer Profitability Sample.pbix aus.
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.
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:
Listen Sie die verfügbaren semantischen Modelle in Ihrem Arbeitsbereich auf.
import sempy.fabric as fabric df_datasets = fabric.list_datasets() df_datasets
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
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.
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.
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
- Standardmäßig werden Daten nicht mithilfe von XMLA abgerufen und erfordern daher keine schreibgeschützte XMLA-Funktion.
- Die Daten unterliegen nicht den Einschränkungen des Power BI-Back-Ends.
- Die abrufbar Datenmenge ist durch den maximalen Arbeitsspeicher pro Abfrage der Kapazitäts-SKU begrenzt, die das semantische Modell, den Spark-Treiberknoten, hostet (weitere Informationen unter Knotengrößen), der das Notebook ausführt
- Alle Abrufe werden als interaktive Abrufe in Rechnung gestellt
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
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
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()
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 FormularTableName[ColumnName]
zurücknum_rows
: Die Anzahl der Zeilen, die im Ergebnis ausgegeben werden sollenpandas_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.