Zelfstudie: Gegevens valideren met Behulp van SemPy en Grote Verwachtingen (GX)
In deze zelfstudie leert u hoe u SemPy samen met GX (Great Expectations ) kunt gebruiken om gegevensvalidatie uit te voeren op semantische Power BI-modellen.
In deze handleiding ontdekt u hoe u:
- Valideer beperkingen voor een gegevensset in uw Fabric-werkruimte met de Fabric-gegevensbron van grote verwachtingen (gebouwd op semantische koppeling).
- Configureer een GX-gegevenscontext, gegevensassets en verwachtingen.
- Validatieresultaten weergeven met een GX-controlepunt.
- Gebruik een semantische koppeling om onbewerkte gegevens te analyseren.
Vereisten
Haal een Microsoft Fabric-abonnement op. Of meld u aan voor een gratis proefversie van Microsoft Fabric.
Meld u aan bij Microsoft Fabric.
Gebruik de ervaringswisselaar aan de linkerkant van de startpagina om over te schakelen naar de Synapse-Datawetenschap-ervaring.
- Selecteer Werkruimten in het linkernavigatiedeelvenster om uw werkruimte te zoeken en te selecteren. Deze werkruimte wordt uw huidige werkruimte.
- Download het PBIX.pbix-bestand met het voorbeeld van een retailanalyse.
- Gebruik in uw werkruimte de knop Uploaden om het PBIX.pbix-bestand met een retailanalyse te uploaden naar de werkruimte.
Volgen in notitieblok
great_expectations_tutorial.ipynb is het notebook dat bij deze zelfstudie hoort.
Als u het bijbehorende notitieblok voor deze zelfstudie wilt openen, volgt u de instructies in Uw systeem voorbereiden voor zelfstudies voor gegevenswetenschap om het notebook te importeren in uw werkruimte.
Als u liever de code van deze pagina kopieert en plakt, kunt u een nieuw notitieblok maken.
Zorg ervoor dat u een lakehouse aan het notebook koppelt voordat u begint met het uitvoeren van code.
Het notebook instellen
In deze sectie stelt u een notebookomgeving in met de benodigde modules en gegevens.
- Installeer
SemPy
en de relevanteGreat Expectations
bibliotheken van PyPI met behulp van de%pip
inline-installatiemogelijkheid in het notebook.
# install libraries
%pip install semantic-link great-expectations great_expectations_experimental great_expectations_zipcode_expectations
# load %%dax cell magic
%load_ext sempy
- Voer de benodigde importbewerkingen uit van modules die u later nodig hebt:
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
GX-gegevenscontext en -gegevensbron instellen
Om aan de slag te gaan met Great Expectations, moet u eerst een GX-gegevenscontext instellen. De context fungeert als een toegangspunt voor GX-bewerkingen en bevat alle relevante configuraties.
context = gx.get_context()
U kunt nu uw Fabric-gegevensset toevoegen aan deze context als gegevensbron om te beginnen met de interactie met de gegevens. In deze zelfstudie wordt gebruikgemaakt van een standaard semantisch Power BI-voorbeeldmodel Met voorbeeld van een retailanalyse pbix-bestand.
ds = context.sources.add_fabric_powerbi("Retail Analysis Data Source", dataset="Retail Analysis Sample PBIX")
Gegevensassets opgeven
Definieer gegevensassets om de subset van de gegevens op te geven waarmee u wilt werken. De asset kan net zo eenvoudig zijn als volledige tabellen of zo complex zijn als een aangepaste DAX-query (Data Analysis Expressions).
Hier voegt u meerdere assets toe:
- Power BI-tabel
- Power BI-meting
- Aangepaste DAX-query
- DMV-query (Dynamic Management View )
Power BI-tabel
Een Power BI-tabel toevoegen als gegevensasset.
ds.add_powerbi_table_asset("Store Asset", table="Store")
Power BI-meting
Als uw gegevensset vooraf geconfigureerde metingen bevat, voegt u de metingen toe als assets na een vergelijkbare API als SemPy's evaluate_measure
.
ds.add_powerbi_measure_asset(
"Total Units Asset",
measure="TotalUnits",
groupby_columns=["Time[FiscalYear]", "Time[FiscalMonth]"]
)
DAX
Als u uw eigen metingen wilt definiëren of meer controle wilt over specifieke rijen, kunt u een DAX-asset toevoegen met een aangepaste DAX-query. Hier definiëren we een Total Units Ratio
meting door twee bestaande metingen te delen.
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-query
In sommige gevallen kan het handig zijn om DMV-berekeningen (Dynamic Management View) te gebruiken als onderdeel van het gegevensvalidatieproces. U kunt bijvoorbeeld het aantal schendingen van referentiële integriteit in uw gegevensset bijhouden. Zie Gegevens opschonen = snellere rapporten voor meer informatie.
ds.add_powerbi_dax_asset(
"Referential Integrity Violation",
dax_string=
"""
SELECT
[Database_name],
[Dimension_Name],
[RIVIOLATION_COUNT]
FROM $SYSTEM.DISCOVER_STORAGE_TABLES
"""
)
Verwachtingen
Als u specifieke beperkingen aan de assets wilt toevoegen, moet u eerst Expectation Suites configureren. Nadat u afzonderlijke verwachtingen aan elke suite hebt toegevoegd, kunt u vervolgens de gegevenscontext bijwerken die in het begin is ingesteld met de nieuwe suite. Zie de GX Expectation Gallery voor een volledige lijst met beschikbare verwachtingen.
Begin met het toevoegen van een 'Retail Store Suite' met twee verwachtingen:
- een geldige postcode
- een tabel met het aantal rijen tussen 80 en 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
Maatregel
Voeg een 'Retail Measure Suite' toe met één verwachting:
- Kolomwaarden moeten groter zijn dan 50.000
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
Voeg een 'Retail DAX Suite' toe met één verwachting:
- Kolomwaarden voor de verhouding totale eenheden moeten tussen 0,8 en 1,5 zijn
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)
Schendingen van referentiële integriteit (DMV)
Voeg een 'Retail DMV Suite' toe met één verwachting:
- de RIVIOLATION_COUNT moet 0 zijn
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)
Validatie
Als u de opgegeven verwachtingen daadwerkelijk wilt uitvoeren op basis van de gegevens, maakt u eerst een controlepunt en voegt u dit toe aan de context. Zie de werkstroom voor gegevensvalidatie voor meer informatie over de controlepuntconfiguratie.
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
)
Voer nu het controlepunt uit en extraheer de resultaten als een Pandas DataFrame voor eenvoudige opmaak.
result = checkpoint.run()
Uw resultaten verwerken en afdrukken.
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"]]
In deze resultaten kunt u zien dat al uw verwachtingen de validatie hebben doorstaan, met uitzondering van de 'Total Units YoY Asset' die u hebt gedefinieerd via een aangepaste DAX-query.
Diagnostiek
Met behulp van een semantische koppeling kunt u de brongegevens ophalen om te begrijpen welke exacte jaren buiten het bereik vallen. Semantische koppeling biedt een inline magic voor het uitvoeren van DAX-query's. Gebruik een semantische koppeling om dezelfde query uit te voeren die u hebt doorgegeven aan de GX-gegevensasset en de resulterende waarden te visualiseren.
%%dax "Retail Analysis Sample PBIX"
EVALUATE SUMMARIZECOLUMNS(
'Time'[FiscalYear],
'Time'[FiscalMonth],
"Total Units Ratio", DIVIDE([Total Units This Year], [Total Units Last Year])
)
Sla deze resultaten op in een DataFrame.
df = _
De resultaten tekenen.
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
In de plot ziet u dat april en juli enigszins buiten het bereik liggen en vervolgens verdere stappen kunnen ondernemen om te onderzoeken.
GX-configuratie opslaan
Naarmate de gegevens in uw gegevensset na verloop van tijd veranderen, wilt u mogelijk de GX-validaties die u zojuist hebt uitgevoerd, opnieuw uitvoeren. Op dit moment leeft de gegevenscontext (met de verbonden gegevensassets, verwachtingensuites en controlepunten) kortstondig, maar kan deze worden geconverteerd naar een bestandscontext voor toekomstig gebruik. U kunt ook een bestandscontext instantiëren (zie Een gegevenscontext instantiëren).
context = context.convert_to_file_context()
Nu u de context hebt opgeslagen, kopieert u de gx
map naar uw lakehouse.
Belangrijk
In deze cel wordt ervan uitgegaan dat u een lakehouse hebt toegevoegd aan het notebook. Als er geen lakehouse is gekoppeld, ziet u geen fout, maar kunt u de context later ook niet meer ophalen. Als u nu een lakehouse toevoegt, wordt de kernel opnieuw opgestart, dus moet u het hele notebook opnieuw uitvoeren om terug te keren naar dit punt.
# copy GX directory to attached lakehouse
!cp -r gx/ /lakehouse/default/Files/gx
Toekomstige contexten kunnen nu worden gemaakt om context = gx.get_context(project_root_dir="<your path here>")
alle configuraties uit deze zelfstudie te gebruiken.
Voeg bijvoorbeeld in een nieuw notebook hetzelfde lakehouse toe en gebruik context = gx.get_context(project_root_dir="/lakehouse/default/Files/gx")
deze om de context op te halen.
Gerelateerde inhoud
Bekijk andere zelfstudies voor semantische koppeling /SemPy:
- Zelfstudie: Gegevens opschonen met functionele afhankelijkheden
- Zelfstudie: Functionele afhankelijkheden analyseren in een semantisch voorbeeldmodel
- Zelfstudie: Power BI-metingen extraheren en berekenen uit een Jupyter-notebook
- Zelfstudie: Relaties ontdekken in een semantisch model met behulp van een semantische koppeling
- Zelfstudie: Relaties ontdekken in de Synthea-gegevensset met behulp van een semantische koppeling