Kurz: Overenie údajov pomocou semPy a veľkých očakávaní (GX)
V tomto kurze sa naučíte používať SemPy spolu s Veľké očakávania (GX) na overenie údajov v sémantických modeloch Power BI.
Tento kurz vám ukáže, ako:
- Overte obmedzenia množiny údajov v pracovnom priestore služby Fabric so zdrojom údajov služby Fabric vo veľkej očakávaní (postaveným na sémantickom prepojení).
- Konfigurácia kontextu údajov GX, položiek údajov a očakávaní.
- Zobrazenie výsledkov overenia pomocou kontrolného bodu GX.
- Na analýzu nespracovaných údajov použite sémantické prepojenie.
Predpoklady
Získajte predplatné služby Microsoft Fabric . Alebo si zaregistrujte bezplatnú skúšobnú služby Microsoft Fabric.
Prihláste sa do služby Microsoft Fabric.
Pomocou prepínača skúseností v ľavej dolnej časti domovskej stránky sa prepnete na službu Fabric.
- Na ľavej navigačnej table vyberte položku Pracovné priestory a vyhľadajte a vyberte pracovný priestor. Tento pracovný priestor sa stane vaším aktuálnym pracovným priestorom.
- Stiahnite si súbor Ukážka analýzy maloobchodu PBIX.pbix.
- V pracovnom priestore vyberte položky
Importovať zostavu alebo Stránkovaná zostava Z tohto počítača a nahrajte súborRetail Analysis Sample PBIX.pbix.
Sledovanie v notebooku
great_expectations_tutorial.ipynb je poznámkový blok, ktorý sprevádza tento kurz.
Ak chcete otvoriť sprievodný poznámkový blok pre tento kurz, postupujte podľa pokynov v téme Príprava systému na kurzy dátových vied na import notebooku do pracovného priestoru.
Ak by ste radšej skopírovali a prilepili kód z tejto stránky, môžete vytvoriť nový poznámkový blok.
Uistite sa, že pripojiť lakehouse k notebooku, ako začnete bežať kód.
Nastavenie poznámkového bloku
V tejto časti nastavíte poznámkové prostredie s potrebnými modulmi a údajmi.
- Nainštalujte
SemPy
a príslušné knižniceGreat Expectations
z rozhrania PyPI pomocou možnosti vnorenej inštalácie%pip
v rámci poznámkového bloku.
# install libraries
%pip install semantic-link 'great-expectations<1.0' great_expectations_experimental great_expectations_zipcode_expectations
# load %%dax cell magic
%load_ext sempy
- Vykonajte potrebné importy modulov, ktoré budete potrebovať neskôr:
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
Nastavenie kontextu údajov jazyka GX a zdroja údajov
Ak chcete začať s veľkým očakávaním, najskôr musíte nastaviť kontextGX. Kontext slúži ako vstupný bod pre operácie GX a obsahuje všetky relevantné konfigurácie.
context = gx.get_context()
Teraz môžete pridať množinu údajov služby Fabric do tohto kontextu ako zdroja údajov, aby ste mohli začať pracovať s údajmi. V tomto kurze sa používa štandardný sémantický model ukážky služby Power BI súboru Retail Analysis Sample .pbix.
ds = context.sources.add_fabric_powerbi("Retail Analysis Data Source", dataset="Retail Analysis Sample PBIX")
Zadanie položiek údajov
Definujte položky údajov a špecifikujte podmnožinu údajov, s ktorou chcete pracovať. Položka môže byť rovnako jednoduchá ako celá tabuľka alebo môže byť rovnako zložitá ako vlastný dotaz jazyka DAX (Data Analysis Expressions).
Tu pridáte viacero položiek:
- Tabuľka Služby Power BI
- Mierka služby Power BI
- Vlastný dotaz DAX
- dotazu zobrazenia dynamickej správy (DMV)
Tabuľka Služby Power BI
Pridanie tabuľky Power BI ako položky údajov.
ds.add_powerbi_table_asset("Store Asset", table="Store")
Mierka služby Power BI
Ak množina údajov obsahuje vopred nakonfigurované mierky, mierky pridáte ako položky nasledujúce po podobnom rozhraní API ako evaluate_measure
SemPy.
ds.add_powerbi_measure_asset(
"Total Units Asset",
measure="TotalUnits",
groupby_columns=["Time[FiscalYear]", "Time[FiscalMonth]"]
)
DAX
Ak chcete definovať vlastné mierky alebo mať väčšiu kontrolu nad konkrétnymi riadkami, môžete pridať položku DAX s vlastným dotazom DAX. V tomto príklade definujeme Total Units Ratio
mierku delením dvoch existujúcich mierok.
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])
)
"""
)
Dotaz DMV
V niektorých prípadoch môže byť užitočné použiť výpočty zobrazenia dynamickej správy (DMV) ako súčasť procesu overenia údajov. Môžete napríklad sledovať počet porušení referenčnej integrity v rámci svojej množiny údajov. Ďalšie informácie nájdete Vyčistenie údajov = rýchlejšie zostavy.
ds.add_powerbi_dax_asset(
"Referential Integrity Violation",
dax_string=
"""
SELECT
[Database_name],
[Dimension_Name],
[RIVIOLATION_COUNT]
FROM $SYSTEM.DISCOVER_STORAGE_TABLES
"""
)
Očakávania
Ak chcete do položiek pridať konkrétne obmedzenia, musíte najprv nakonfigurovať Expectation Suites. Po pridaní individuálnych očakávania do každého balíka, môžete potom aktualizovať nastavenie Kontext údajov na začiatku nového balíka. Úplný zoznam dostupných očakávaní nájdete v
Začnite pridaním balíka Retail Store Suite s dvomi očakávaniami:
- platný PSČ
- tabuľka s počtom riadkov v rozsahu od 80 do 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
mierka
Pridajte si "Retail Measure Suite" s jedným očakávaním:
- Hodnoty stĺpcov by mali byť väčšie ako 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
Pridajte si "Retail DAX Suite" s jedným očakávaním:
- Hodnoty stĺpca Pomer celkových jednotiek by sa mali v rozsahu 0,8 až 1,5
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)
Porušenia referenčnej integrity (DMV)
Pridajte "Balík DMV maloobchodu" s jedným očakávaním:
- hodnota RIVIOLATION_COUNT by mala byť 0
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)
Validácia
Ak chcete skutočne spustiť zadané očakávania voči údajom, najskôr vytvorte Kontrolného bodu a pridajte ho do kontextu. Ďalšie informácie o konfigurácii kontrolného bodu nájdete pracovnom postupe overovania údajov.
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
)
Teraz spustite kontrolný bod a extrahujte výsledky ako údajový rámec pandas na jednoduché formátovanie.
result = checkpoint.run()
Spracovať a vytlačiť výsledky.
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"]]
Z týchto výsledkov môžete vidieť, že všetky vaše očakávania prebehli overenie, s výnimkou položky "Celkový predaj jednotiek v roku 2008", ktorú ste definovali prostredníctvom vlastného dotazu DAX.
Diagnostika
Pomocou sémantického prepojenia môžete načítať zdrojové údaje, aby ste zistili, ktoré presné roky sú mimo rozsahu. Sémantické prepojenie poskytuje vnorenú mágiu na vykonávanie dotazov DAX. Pomocou sémantického prepojenia spustite rovnaký dotaz, ktorý ste odoslali do položky Položky údajov GX, a vizualizujte výsledné hodnoty.
%%dax "Retail Analysis Sample PBIX"
EVALUATE SUMMARIZECOLUMNS(
'Time'[FiscalYear],
'Time'[FiscalMonth],
"Total Units Ratio", DIVIDE([Total Units This Year], [Total Units Last Year])
)
Uložte tieto výsledky v údajovom prvku.
df = _
Vykreslte výsledky.
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
Z vykreslenia môžete vidieť, že apríl a júl boli mierne mimo rozsahu, a potom môžete vykonať ďalšie kroky na preskúmanie.
Ukladanie konfigurácie jazyka GX
Keďže údaje v množine údajov sa časom menia, možno budete chcieť znova spustiť overenia jazyka GX, ktoré ste práve vykonali. V súčasnosti prebieha kontext údajov (obsahujúci pripojené položky údajov, balíky očakávaní a kontrolné body) bez pominuteľne, ale možno ho skonvertovať na kontext súboru na budúce použitie. Prípadne môžete vytvoriť inštanciu kontextu súboru (pozri vytvorenie inštancie údajového kontextu).
context = context.convert_to_file_context()
Teraz, keď ste uložili kontext, skopírujte gx
adresár do svojho jazera.
Dôležitý
Táto bunka predpokladá, že ste pridali lakehouse do notebooku. Ak nie je pripojený žiadny lakehouse, nezobrazí sa chyba, ale neskôr nebudete môcť získať kontext. Ak pridáte lakehouse teraz, jadro sa reštartuje, takže budete musieť re-spustiť celý notebook sa dostať späť do tohto bodu.
# copy GX directory to attached lakehouse
!cp -r gx/ /lakehouse/default/Files/gx
Teraz je možné vytvoriť budúce kontexty s context = gx.get_context(project_root_dir="<your path here>")
na používanie všetkých konfigurácií z tohto kurzu.
V novom poznámkovom počítači napríklad pripojte rovnaký domov lakehouse a pomocou context = gx.get_context(project_root_dir="/lakehouse/default/Files/gx")
načítajte kontext.
Súvisiaci obsah
Pozrite si ďalšie kurzy o sémantických prepojeniach/SemPy:
- Kurz: Vyčistenie údajov pomocou funkčných závislostí
- Kurz: Analýza funkčných závislostí vo vzorovom sémantickom modeli
- Kurz: Extrahovanie a výpočet mierok v službe Power BI z notebooku Jupyter
- Kurz: Zisťovanie vzťahov v sémantickom modeli pomocou sémantického prepojenia
- Kurz: Zisťovanie vzťahov v množine údajov Synthea pomocou sémantického prepojenia