Zelfstudie: Gegevens valideren met Behulp van SemPy en Grote Verwachtingen (GX)
In deze zelfstudie leert u hoe u SemPy samen met Grote verwachtingen (GX) gebruikt om gegevensvalidatie uit te voeren op semantische Power BI-modellen.
In deze zelfstudie leert u het volgende:
- Valideer beperkingen voor een gegevensset in uw Fabric-werkruimte met de Fabric Data Source van Great Expectations (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.
Voorwaarden
Een Microsoft Fabric-abonnementophalen. Of meld u aan voor een gratis microsoft Fabric-proefversie.
Meld u aan bij Microsoft Fabric-.
Gebruik de ervaringswisselaar aan de linkerkant van de startpagina om over te schakelen naar Fabric.
- Selecteer Werkruimten in het linkernavigatiedeelvenster om uw werkruimte te zoeken en te selecteren. Deze werkruimte wordt uw huidige werkruimte.
- Download het PBIX.pbix-bestand voorbeeld van een retailanalyse.
- Selecteer in uw werkruimte Importeren>rapport of gepagineerd rapport>Van deze computer om het Retail Analysis Sample PBIX.pbix-bestand naar uw werkruimte te uploaden.
Volg mee in notitieboek
great_expectations_tutorial.ipynb is het notebook dat bij deze tutorial hoort.
Als u het bijbehorende notitieblok voor deze zelfstudie wilt openen, volgt u de instructies in Uw systeem voorbereiden op zelfstudies voor gegevenswetenschap om het notebook in uw werkruimte te importeren.
Als u liever de code van deze pagina kopieert en plakt, kunt u een nieuw notitieblok maken.
Zorg ervoor dat een lakehouse aan het notebook koppelen 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<1.0' 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 Grote Verwachtingen, moet u eerst een GX-Data Context instellen. De context fungeert als een toegangspunt voor GX-bewerkingen en bevat alle relevante configuraties.
context = gx.get_context()
U kunt uw Fabric-gegevensset nu toevoegen aan deze context als een gegevensbron om te beginnen met de interactie met de gegevens. In deze zelfstudie wordt gebruikgemaakt van een standaard semantisch Power BI-voorbeeldmodel PBIX-bestand met een retailanalyse.
ds = context.sources.add_fabric_powerbi("Retail Analysis Data Source", dataset="Retail Analysis Sample PBIX")
Gegevensbronnen opgeven
Definieer data-assets om de subset van 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-maat
- Aangepaste DAX-query
- nl-NL: Dynamisch Beheeroverzicht (DMV)-query
Power BI-tabel
Een Power BI-tabel toevoegen als gegevensasset.
ds.add_powerbi_table_asset("Store Asset", table="Store")
Power BI-berekening
Als uw gegevensset vooraf geconfigureerde metingen bevat, voegt u de metingen toe als assets na een vergelijkbare API als de evaluate_measure
van SemPy.
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-aanvraag
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 rapportenvoor 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 Galleryvoor 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)
meting voor TotalUnits
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)
Validering
Als u de opgegeven verwachtingen daadwerkelijk wilt uitvoeren op basis van de gegevens, maakt u eerst een Controlepunt en voegt u deze toe aan de context. Zie werkstroom voor gegevensvalidatievoor meer informatie over de configuratie van controlepunten.
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 tovenarij 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 kunt u zien dat april en juli enigszins buiten het bereik liggen, waarna u verdere stappen kunt ondernemen om dit 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 instantie maken van een File Context (zie Een Data Context instantiëren).
context = context.convert_to_file_context()
Nu je de context hebt opgeslagen, kopieer de gx
-directory naar je lakehouse.
Belangrijk
In deze cel wordt ervan uitgegaan dat u een lakehouse- aan het notitieblok hebt toegevoegd. 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 met context = gx.get_context(project_root_dir="<your path here>")
om alle configuraties uit deze zelfstudie te gebruiken.
Voeg bijvoorbeeld in een nieuw notitieblok hetzelfde lakehouse toe en gebruik context = gx.get_context(project_root_dir="/lakehouse/default/Files/gx")
om de context op te halen.
Verwante inhoud
Bekijk andere handleidingen 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 semantische koppeling
- Zelfstudie: Relaties ontdekken in de Synthea--gegevensset met behulp van semantische koppeling