Zdieľať cez


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.

    Snímka obrazovky ponuky prepínača prostredí zobrazujúca, kde vybrať položku Dátová veda.

  • 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á zostavaZ tohto počítača a nahrajte súbor Retail Analysis Sample PBIX.pbix.

Sledovanie v notebooku

great_expectations_tutorial.ipynb je poznámkový blok, ktorý sprevádza tento kurz.

Nastavenie poznámkového bloku

V tejto časti nastavíte poznámkové prostredie s potrebnými modulmi a údajmi.

  1. Nainštalujte SemPy a príslušné knižnice Great 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
  1. 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

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_measureSemPy.

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 vGX Expectation Gallery.

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"]]

Tabuľka zobrazuje výsledky overenia.

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])
)

Table zobrazujú výsledky sumarizácie dotazu DAX.

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

Plot zobrazuje výsledky súhrnu dotazu DAX.

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.

Pozrite si ďalšie kurzy o sémantických prepojeniach/SemPy: