Lernprogramm: Überprüfen von Daten mithilfe von SemPy und großen Erwartungen (GX)
In diesem Lernprogramm erfahren Sie, wie Sie SemPy zusammen mit Great Expectations (GX) verwenden, um Datenüberprüfungen für Power BI-Semantikmodelle durchzuführen.
In diesem Lernprogramm erfahren Sie, wie Sie:
- Überprüfen der Einschränkungen für ein Dataset in Ihrem Fabric-Arbeitsbereich mit der Fabric-Datenquelle von Great Expectations (basierend auf semantischer Verknüpfung)
- Konfigurieren Sie einen GX-Datenkontext, Datenressourcen und Erwartungen.
- Zeigen Sie Validierungsergebnisse mit einem GX-Prüfpunkt an.
- Verwenden Sie die semantische Verknüpfung, um Rohdaten zu analysieren.
Voraussetzungen
Erhalten Sie ein Microsoft Fabric-Abonnement. Oder registrieren Sie sich für eine kostenlose Microsoft Fabric-Testversion.
Melden Sie sich bei Microsoft Fabrican.
Verwenden Sie den Erfahrungsschalter auf der unteren linken Seite Ihrer Startseite, um zu Fabric zu wechseln.
- Wählen Sie Arbeitsbereiche im linken Navigationsbereich aus, um Ihren Arbeitsbereich zu suchen und auszuwählen. Dieser Arbeitsbereich wird zu Ihrem aktuellen Arbeitsbereich.
- Laden Sie die Datei Retail Analysis Sample PBIX.pbix herunter.
- Wählen Sie in Ihrem Arbeitsbereich Importieren>Bericht oder paginierter Bericht>Von diesem Computer aus, um die Datei Retail Analysis Sample PBIX.pbix in Ihren Arbeitsbereich hochzuladen.
Durchführung im Notebook
great_expectations_tutorial.ipynb ist das Notizbuch, das dieses Tutorial begleitet.
Zum Öffnen des zugehörigen Notizbuchs für dieses Lernprogramm folgen Sie den Anweisungen in Vorbereiten Ihres Systems für Data Science-Lernprogramme, um das Notizbuch in Ihren Arbeitsbereich zu importieren.
Wenn Sie den Code lieber von dieser Seite kopieren und einfügen möchten, können Sie ein neues Notizbucherstellen.
Fügen Sie ein Lakehouse an das Notebook an, bevor Sie mit der Ausführung von Code beginnen.
Einrichten des Notizbuchs
In diesem Abschnitt richten Sie eine Notizbuchumgebung mit den erforderlichen Modulen und Daten ein.
- Installieren Sie
SemPy
und die relevantenGreat Expectations
Bibliotheken aus PyPI mithilfe der%pip
Inlineinstallationsfunktion innerhalb des Notizbuchs.
# install libraries
%pip install semantic-link 'great-expectations<1.0' great_expectations_experimental great_expectations_zipcode_expectations
# load %%dax cell magic
%load_ext sempy
- Führen Sie die erforderlichen Importe von Modulen aus, die Sie später benötigen:
import great_expectations as gx
from great_expectations.expectations.expectation import ExpectationConfiguration
from great_expectations_zipcode_expectations.expectations import expect_column_values_to_be_valid_zip5
Einrichten des GX-Datenkontexts und der Datenquelle
Um mit Great Expectations zu beginnen, müssen Sie zuerst einen GX Data Contexteinrichten. Der Kontext dient als Einstiegspunkt für GX-Vorgänge und enthält alle relevanten Konfigurationen.
context = gx.get_context()
Sie können nun Ihr Fabric-Dataset diesem Kontext als Datenquelle hinzufügen, um mit der Interaktion mit den Daten zu beginnen. In diesem Lernprogramm wird ein standardmäßiges Power BI-Beispielsemantikmodell Retail Analysis Sample .pbix-Dateiverwendet.
ds = context.sources.add_fabric_powerbi("Retail Analysis Data Source", dataset="Retail Analysis Sample PBIX")
Datenressourcen angeben
Definieren Sie Datenressourcen, um die Teilmenge der Daten anzugeben, mit der Sie arbeiten möchten. Die Ressource kann so einfach wie vollständige Tabellen oder so komplex wie eine benutzerdefinierte DAX-Abfrage (Data Analysis Expressions) sein.
Hier fügen Sie mehrere Ressourcen hinzu:
- Power BI-Tabelle
- Power BI-Measure
- Benutzerdefinierte DAX-Abfrage
- Abfrage für die dynamische Verwaltungssicht (Dynamic Management View, DMV)
Power BI-Tabelle
Fügen Sie eine Power BI-Tabelle als Datenressource hinzu.
ds.add_powerbi_table_asset("Store Asset", table="Store")
Power BI-Measure
Wenn Ihr Dataset vorkonfigurierte Measures enthält, fügen Sie die Measures als Ressourcen nach einer ähnlichen API zum evaluate_measure
-Element von SemPy hinzu.
ds.add_powerbi_measure_asset(
"Total Units Asset",
measure="TotalUnits",
groupby_columns=["Time[FiscalYear]", "Time[FiscalMonth]"]
)
DAX
Wenn Sie eigene Maßnahmen definieren oder mehr Kontrolle über bestimmte Zeilen haben möchten, können Sie ein DAX-Element mit einer benutzerdefinierten DAX-Abfrage hinzufügen. Hier definieren wir eine Total Units Ratio
Maßnahme, indem wir zwei bestehende Maßnahmen unterteilen.
ds.add_powerbi_dax_asset(
"Total Units YoY Asset",
dax_string=
"""
EVALUATE SUMMARIZECOLUMNS(
'Time'[FiscalYear],
'Time'[FiscalMonth],
"Total Units Ratio", DIVIDE([Total Units This Year], [Total Units Last Year])
)
"""
)
DMV-Abfrage
In einigen Fällen kann es hilfreich sein, Dynamische Verwaltungsansicht (DMV)-Berechnungen als Teil des Datenüberprüfungsprozesses zu verwenden. Sie können z. B. die Anzahl der Verletzungen der referenziellen Integrität innerhalb Ihres Datasets nachverfolgen. Weitere Informationen finden Sie unter Bereinigen von Daten = schnellere Berichte.
ds.add_powerbi_dax_asset(
"Referential Integrity Violation",
dax_string=
"""
SELECT
[Database_name],
[Dimension_Name],
[RIVIOLATION_COUNT]
FROM $SYSTEM.DISCOVER_STORAGE_TABLES
"""
)
Erwartungshaltung
Um den Ressourcen bestimmte Einschränkungen hinzuzufügen, müssen Sie zuerst Erwartungssammlungen konfigurieren. Nachdem Sie einzelne Erwartungen zu jeder Suite hinzugefügt haben, können Sie den zu Beginn eingerichteten Datenkontext mit der neuen Suite aktualisieren. Eine vollständige Liste der verfügbaren Erwartungen finden Sie im GX-Erwartungskatalog.
Beginnen Sie, indem Sie eine "Retail Store Suite" mit zwei Erwartungen hinzufügen:
- gültige Postleitzahl
- Eine Tabelle mit Zeilenanzahl zwischen 80 und 200
suite_store = context.add_expectation_suite("Retail Store Suite")
suite_store.add_expectation(ExpectationConfiguration("expect_column_values_to_be_valid_zip5", { "column": "PostalCode" }))
suite_store.add_expectation(ExpectationConfiguration("expect_table_row_count_to_be_between", { "min_value": 80, "max_value": 200 }))
context.add_or_update_expectation_suite(expectation_suite=suite_store)
TotalUnits
-Measure
Fügen Sie die Sammlung „Retail Measure Suite“ mit einer Erwartung hinzu:
- Spaltenwerte sollten größer als 50.000 sein.
suite_measure = context.add_expectation_suite("Retail Measure Suite")
suite_measure.add_expectation(ExpectationConfiguration(
"expect_column_values_to_be_between",
{
"column": "TotalUnits",
"min_value": 50000
}
))
context.add_or_update_expectation_suite(expectation_suite=suite_measure)
Total Units Ratio
-DAX
Fügen Sie eine "Retail DAX Suite" mit einer Erwartung hinzu:
- Spaltenwerte für das Gesamteinheitenverhältnis sollten zwischen 0,8 und 1,5 sein.
suite_dax = context.add_expectation_suite("Retail DAX Suite")
suite_dax.add_expectation(ExpectationConfiguration(
"expect_column_values_to_be_between",
{
"column": "[Total Units Ratio]",
"min_value": 0.8,
"max_value": 1.5
}
))
context.add_or_update_expectation_suite(expectation_suite=suite_dax)
Verstöße gegen die referentielle Integrität (DMV)
Fügen Sie eine "Retail DMV Suite" mit einer Erwartung hinzu:
- RIVIOLATION_COUNT muss auf 0 festgelegt sein.
suite_dmv = context.add_expectation_suite("Retail DMV Suite")
# There should be no RI violations
suite_dmv.add_expectation(ExpectationConfiguration(
"expect_column_values_to_be_in_set",
{
"column": "RIVIOLATION_COUNT",
"value_set": [0]
}
))
context.add_or_update_expectation_suite(expectation_suite=suite_dmv)
Validierung
Um die angegebenen Erwartungen an die Daten tatsächlich auszuführen, erstellen Sie zuerst einen Prüfpunkt und fügen Sie ihn dem Kontext hinzu. Weitere Informationen zur Prüfpunktkonfiguration finden Sie unter Datenüberprüfungsworkflow.
checkpoint_config = {
"name": f"Retail Analysis Checkpoint",
"validations": [
{
"expectation_suite_name": "Retail Store Suite",
"batch_request": {
"datasource_name": "Retail Analysis Data Source",
"data_asset_name": "Store Asset",
},
},
{
"expectation_suite_name": "Retail Measure Suite",
"batch_request": {
"datasource_name": "Retail Analysis Data Source",
"data_asset_name": "Total Units Asset",
},
},
{
"expectation_suite_name": "Retail DAX Suite",
"batch_request": {
"datasource_name": "Retail Analysis Data Source",
"data_asset_name": "Total Units YoY Asset",
},
},
{
"expectation_suite_name": "Retail DMV Suite",
"batch_request": {
"datasource_name": "Retail Analysis Data Source",
"data_asset_name": "Referential Integrity Violation",
},
},
],
}
checkpoint = context.add_checkpoint(
**checkpoint_config
)
Führen Sie nun den Prüfpunkt aus, und extrahieren Sie die Ergebnisse als Pandas DataFrame für einfache Formatierungen.
result = checkpoint.run()
Verarbeiten und Drucken der Ergebnisse
import pandas as pd
data = []
for run_result in result.run_results:
for validation_result in result.run_results[run_result]["validation_result"]["results"]:
row = {
"Batch ID": run_result.batch_identifier,
"type": validation_result.expectation_config.expectation_type,
"success": validation_result.success
}
row.update(dict(validation_result.result))
data.append(row)
result_df = pd.DataFrame.from_records(data)
result_df[["Batch ID", "type", "success", "element_count", "unexpected_count", "partial_unexpected_list"]]
Anhand dieser Ergebnisse können Sie sehen, dass alle Ihre Erwartungen die Überprüfung bestanden haben, mit Ausnahme der "Total Units YoY Asset", die Sie über eine benutzerdefinierte DAX-Abfrage definiert haben.
Diagnostik
Mithilfe der semantischen Verknüpfung können Sie die Quelldaten abrufen, um zu verstehen, welche genauen Jahre außerhalb des Zulässigen liegen. Der semantische Link bietet eine Inline-Magie zum Ausführen von DAX-Abfragen. Verwenden Sie die semantische Verknüpfung, um dieselbe Abfrage auszuführen, die Sie an die GX-Datenressource übergeben haben, und visualisieren Sie die resultierenden Werte.
%%dax "Retail Analysis Sample PBIX"
EVALUATE SUMMARIZECOLUMNS(
'Time'[FiscalYear],
'Time'[FiscalMonth],
"Total Units Ratio", DIVIDE([Total Units This Year], [Total Units Last Year])
)
Speichern Sie diese Ergebnisse in einem DataFrame.
df = _
Zeichnen Sie die Ergebnisse.
import matplotlib.pyplot as plt
df["Total Units % Change YoY"] = (df["[Total Units Ratio]"] - 1)
df.set_index(["Time[FiscalYear]", "Time[FiscalMonth]"]).plot.bar(y="Total Units % Change YoY")
plt.axhline(0)
plt.axhline(-0.2, color="red", linestyle="dotted")
plt.axhline( 0.5, color="red", linestyle="dotted")
None
Im Plot lagen April und Juli etwas außerhalb des Bereichs. Sie können dann weitere Schritte zur Untersuchung ausführen.
Speichern der GX-Konfiguration
Da sich die Daten in Ihrem Dataset im Laufe der Zeit ändern, sollten Sie die soeben ausgeführten GX-Überprüfungen erneut ausführen. Derzeit ist der Datenkontext (mit den verbundenen Datenobjekten, Erwartungssuiten und Checkpoint) nur vorübergehend vorhanden, kann jedoch für die zukünftige Verwendung in einen Dateikontext konvertiert werden. Alternativ können Sie einen Dateikontext instanziieren (siehe Instanziieren eines Datenkontexts).
context = context.convert_to_file_context()
Nachdem Sie den Kontext gespeichert haben, kopieren Sie den Ordner gx
in Ihr Lakehouse.
Wichtig
In dieser Zelle wird davon ausgegangen, dass Sie dem Notebook ein Lakehouse hinzugefügt haben. Wenn kein Lakehouse angefügt ist, wird kein Fehler angezeigt, Sie können jedoch den Kontext später auch nicht abrufen. Wenn Sie jetzt ein Lakehouse hinzufügen, wird der Kernel neu gestartet, sodass Sie das gesamte Notizbuch erneut ausführen müssen, um zu diesem Punkt zurückzukehren.
# copy GX directory to attached lakehouse
!cp -r gx/ /lakehouse/default/Files/gx
Jetzt können zukünftige Kontexte mit context = gx.get_context(project_root_dir="<your path here>")
erstellt werden, um alle Konfigurationen aus diesem Lernprogramm zu verwenden.
Fügen Sie beispielsweise in einem neuen Notizbuch dasselbe Seehaus an, und verwenden Sie context = gx.get_context(project_root_dir="/lakehouse/default/Files/gx")
, um den Kontext abzurufen.
Verwandte Inhalte
Schauen Sie sich weitere Lernprogramme für semantischen Link / SemPy an:
- Lernprogramm: Bereinigen von Daten mit funktionalen Abhängigkeiten
- Lernprogramm: Analysieren funktionaler Abhängigkeiten in einem Beispielsemantikmodell
- Lernprogramm: Extrahieren und Berechnen von Power BI-Measures aus einem Jupyter-Notizbuch
- Lernprogramm: Entdecken von Beziehungen in einem Semantikmodell mithilfe von semantischen Verknüpfungen
- Lernprogramm: Entdecken von Beziehungen im Synthea--Dataset mit semantischer Verknüpfung