Megosztás a következőn keresztül:


Oktatóanyag: Adatok ellenőrzése a SemPy és a Nagy elvárások (GX) használatával

Ebben az oktatóanyagban megtudhatja, hogyan használhatja a SemPy-t a Nagy elvárásokkal (GX) együtt adatérvényesítésre Power BI szemantikai modelleken.

Ez az oktatóanyag a következőket mutatja be:

  • A Fabric-munkaterületen lévő adathalmazokra vonatkozó korlátozások érvényesítése a Great Expectation Háló adatforrásával (szemantikai hivatkozásra épül).
    • GX-adatkörnyezet, adategységek és elvárások konfigurálása.
    • Az érvényesítési eredmények megtekintése GX Ellenőrzőponttal.
  • A nyers adatok elemzéséhez használjon szemantikai hivatkozást.

Előfeltételek

  • Microsoft Fabric-előfizetés lekérése. Vagy regisztráljon egy ingyenes Microsoft Fabric-próbaverzióra.

  • Jelentkezzen be a Microsoft Fabricbe.

  • A kezdőlap bal oldalán található élménykapcsolóval válthat a Synapse Adattudomány felületre.

    Képernyőkép a felületváltó menüjéről, amelyen látható, hogy hol válassza ki a Adattudomány.

  • A munkaterület megkereséséhez és kijelöléséhez válassza a bal oldali navigációs panel munkaterületeit. Ez a munkaterület lesz az aktuális munkaterület.
  • Töltse le a pbix.pbix kiskereskedelmi elemzési mintafájlt.
  • A munkaterületen a Feltöltés gombbal töltse fel a kiskereskedelmi elemzési minta PBIX.pbix fájlját a munkaterületre.

Követés a jegyzetfüzetben

A great_expectations_tutorial.ipynb az oktatóanyagot kísérő jegyzetfüzet.

Az oktatóanyaghoz mellékelt jegyzetfüzet megnyitásához kövesse a Rendszer előkészítése adatelemzési oktatóanyagokhoz című témakör utasításait, és importálja a jegyzetfüzetet a munkaterületre.

Ha inkább erről a lapról másolja és illessze be a kódot, létrehozhat egy új jegyzetfüzetet.

A kód futtatása előtt mindenképpen csatoljon egy lakehouse-t a jegyzetfüzethez .

A jegyzetfüzet beállítása

Ebben a szakaszban egy jegyzetfüzet-környezetet állít be a szükséges modulokkal és adatokkal.

  1. Telepítse SemPy és a megfelelő Great Expectations kódtárakat a PyPI-ból a %pip jegyzetfüzeten belüli helyszíni telepítési képesség használatával.
# install libraries
%pip install semantic-link great-expectations great_expectations_experimental great_expectations_zipcode_expectations

# load %%dax cell magic
%load_ext sempy
  1. Végezze el a szükséges modulok importálását, amelyekre később szüksége lesz:
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-adatkörnyezet és adatforrás beállítása

A Nagy elvárások használatának megkezdéséhez először be kell állítania egy GX-adatkörnyezetet. A környezet belépési pontként szolgál a GX-műveletekhez, és minden releváns konfigurációt tartalmaz.

context = gx.get_context()

Mostantól adatforrásként hozzáadhatja a Fabric-adatkészletet ehhez a környezethez az adatokkal való interakció megkezdéséhez. Ez az oktatóanyag egy standard Power BI-minta szemantikai modellt használ kiskereskedelmi elemzési minta .pbix-fájllal.

ds = context.sources.add_fabric_powerbi("Retail Analysis Data Source", dataset="Retail Analysis Sample PBIX")

Adategységek megadása

Adategységek definiálása a dolgozni kívánt adatok részhalmazának megadásához. Az objektum lehet olyan egyszerű, mint a teljes táblák, vagy olyan összetett, mint egy egyéni adatelemzési kifejezés (DAX) lekérdezés.

Itt több objektumot fog hozzáadni:

Power BI-tábla

Power BI-tábla hozzáadása adategységként.

ds.add_powerbi_table_asset("Store Asset", table="Store")

Power BI-mérték

Ha az adatkészlet előre konfigurált mértékeket tartalmaz, a mértékeket egy hasonló API-t követő eszközként kell hozzáadnia a SemPy-hoz evaluate_measure.

ds.add_powerbi_measure_asset(
    "Total Units Asset",
    measure="TotalUnits",
    groupby_columns=["Time[FiscalYear]", "Time[FiscalMonth]"]
)

DAX

Ha saját mértékeket szeretne definiálni, vagy nagyobb mértékben szeretné szabályozni az adott sorokat, hozzáadhat egy DAX-objektumot egy egyéni DAX-lekérdezéssel. Itt meghatározunk egy mértéket Total Units Ratio két meglévő mérték felosztásával.

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-lekérdezés

Bizonyos esetekben hasznos lehet a dinamikus felügyeleti nézet (DMV) számításainak használata az adatérvényesítési folyamat részeként. Nyomon követheti például a hivatkozási integritás megsértésének számát az adathalmazban. További információ: Adatok törlése = gyorsabb jelentések.

ds.add_powerbi_dax_asset(
    "Referential Integrity Violation",
    dax_string=
    """
    SELECT
        [Database_name],
        [Dimension_Name],
        [RIVIOLATION_COUNT]
    FROM $SYSTEM.DISCOVER_STORAGE_TABLES
    """
)

Elvárások

Ha konkrét korlátozásokat szeretne hozzáadni az eszközökhöz, először konfigurálnia kell a Expectation Suitest. Miután hozzáadta az egyes csomagokat az egyéni elvárásokhoz , az új csomaggal az elején beállított adatkörnyezetet frissítheti. Az elérhető elvárások teljes listáját a GX Várakozási katalógusban találja.

Első lépésként adjon hozzá egy "Retail Store Suite"-t két elvárással:

  • érvényes irányítószám
  • 80 és 200 közötti sorszámú táblázat
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 Intézkedés

Adjon hozzá egy "Kiskereskedelmi mértékcsomagot" egyetlen elvárással:

  • Az oszlopértékek 50 000-nél nagyobbak lehetnek
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

Adjon hozzá egy "Retail DAX Suite" csomagot egyetlen elvárással:

  • A teljes egységarány oszlopértékeinek 0,8 és 1,5 között kell lenniük
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)

Hivatkozási integritás megsértése (DMV)

Adjon hozzá egy "Retail DMV Suite" csomagot egyetlen elvárással:

  • a RIVIOLATION_COUNT 0-nak kell lennie
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)

Érvényesítés

A megadott elvárásoknak az adatokkal való tényleges futtatásához először hozzon létre egy Ellenőrzőpontot , és adja hozzá a környezethez. Az Ellenőrzőpont konfigurációjáról további információt az Adatérvényesítési munkafolyamat című témakörben talál.

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
)

Most futtassa az ellenőrzőpontot, és kinyerje az eredményeket pandas DataFrame-ként az egyszerű formázás érdekében.

result = checkpoint.run()

Az eredmények feldolgozása és nyomtatása.

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

A táblázat az érvényesítési eredményeket mutatja.

Ezekből az eredményekből láthatja, hogy az összes elvárás megfelelt az ellenőrzésnek, kivéve az egyéni DAX-lekérdezéssel definiált "Total Units YoY Asset" értéket.

Diagnosztika

Szemantikai hivatkozás használatával lekérheti a forrásadatokat, hogy megtudja, mely évek vannak a tartományon kívül. A szemantikai hivatkozás beágyazott varázslatot biztosít a DAX-lekérdezések végrehajtásához. A szemantikai hivatkozással végrehajthatja a GX adategységbe átadott lekérdezést, és megjelenítheti az eredményül kapott értékeket.

%%dax "Retail Analysis Sample PBIX"

EVALUATE SUMMARIZECOLUMNS(
    'Time'[FiscalYear],
    'Time'[FiscalMonth],
    "Total Units Ratio", DIVIDE([Total Units This Year], [Total Units Last Year])
)

A táblázat a DAX-lekérdezés összegzésének eredményeit jeleníti meg.

Mentse ezeket az eredményeket egy DataFrame-ben.

df = _

Ábrázolja az eredményeket.

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

A diagram a DAX-lekérdezés összegzésének eredményeit jeleníti meg.

A diagramon látható, hogy az április és a július kissé kívül volt a tartományon, majd további lépéseket tehet a vizsgálathoz.

GX-konfiguráció tárolása

Mivel az adathalmaz adatai idővel változnak, érdemes lehet újrafuttatnia az imént végrehajtott GX-érvényesítéseket. Az adatkörnyezet (amely a csatlakoztatott adategységeket, a várakozási csomagokat és a Checkpointot tartalmazza) jelenleg rövid ideig él, de későbbi használatra fájlkörnyezetté alakítható. Másik lehetőségként létrehozhat egy fájlkörnyezetet (lásd : Adatkörnyezet példányosítása).

context = context.convert_to_file_context()

Most, hogy mentette a környezetet, másolja a könyvtárat a gx tóházába.

Fontos

Ez a cella feltételezi, hogy hozzáadta a lakehouse-t a jegyzetfüzethez. Ha nincs csatlakoztatva lakehouse, akkor nem jelenik meg hiba, de később nem fogja tudni lekérni a környezetet. Ha most hozzáad egy lakehouse-t, a kernel újraindul, ezért újra kell futtatnia a teljes jegyzetfüzetet, hogy visszatérjen erre a pontra.

# copy GX directory to attached lakehouse
!cp -r gx/ /lakehouse/default/Files/gx

Most már létrehozhat context = gx.get_context(project_root_dir="<your path here>") jövőbeli környezeteket az oktatóanyag összes konfigurációjának használatához.

Például egy új jegyzetfüzetben csatolja ugyanazt a tóházat, és használja context = gx.get_context(project_root_dir="/lakehouse/default/Files/gx") a környezet lekéréséhez.

Tekintse meg a szemantikai hivatkozás / SemPy egyéb oktatóanyagait: