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 Nagy elvárások (GX) használatával adatérvényesítést Power BI szemantikai modelleken.
Ez az oktatóanyag bemutatja, hogyan:
- A Fabric-munkaterületen lévő adathalmazokra vonatkozó korlátozások ellenőrzése a Great Expectations Fabric Adatforrással (szemantikai kapcsolatra é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
Szerezzen be egy Microsoft Fabric-előfizetést. Vagy regisztráljon egy ingyenes Microsoft Fabric próba.
Jelentkezzen be a Microsoft Fabric.
A kezdőlap bal alsó részén található élménykapcsolóval válthat Fabricre.
- A bal oldali navigációs panelen válassza Munkaterületek lehetőséget a munkaterület megkereséséhez és kijelöléséhez. Ez lesz az aktuális munkaterületed.
- Töltse le a Kiskereskedelmi elemzési minta PBIX.pbix fájlt.
- A munkaterületen válassza >jelentés vagy lapszámozott jelentés importálása>A számítógépről lehetőséget a kiskereskedelmi elemzési minta PBIX.pbix fájljának a munkaterületre való feltöltéséhez.
Követés a jegyzetfüzetben
great_expectations_tutorial.ipynb az oktatóanyagot kísérő jegyzetfüzet.
Az oktatóanyaghoz tartozó jegyzetfüzet megnyitásához kövesse a A rendszer előkészítése az adatelemzési oktatóanyagokhoz című útmutató lépéseit, hogy a jegyzetfüzetet importálja a munkaterületére.
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.
- Telepítse a
SemPy
és a megfelelőGreat Expectations
könyvtárakat a PyPI-ból a jegyzetfüzet beépített%pip
telepítési funkciójának használatával.
# install libraries
%pip install semantic-link 'great-expectations<1.0' great_expectations_experimental great_expectations_zipcode_expectations
# load %%dax cell magic
%load_ext sempy
- 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 hozzáadhatja a Fabric-adatkészletet ehhez a környezethez adatforrásként 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ájl.
ds = context.sources.add_fabric_powerbi("Retail Analysis Data Source", dataset="Retail Analysis Sample PBIX")
Adatvagyon megadása
Definiálja a Adategységeket, hogy megadja a dolgozni kívánt adatok részhalmazát. 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-mérték
- Egyéni DAX-lekérdezés
- Dinamikus felügyeleti nézet (DMV) lekérdezés
Power BI-tábla
Power BI táblának hozzáadása adateszközként.
ds.add_powerbi_table_asset("Store Asset", table="Store")
Power BI-mérték
Ha az adathalmaz előre beállított mértékeket tartalmaz, hasonló API-t követve eszközként adja hozzá a mértékeket a SemPy evaluate_measure
-hoz.
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 Total Units Ratio
mértéket 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 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 tisztítása = 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 Expectation Suites. Miután hozzáadta az egyes Elvárások az egyes csomagokhoz, az elején beállított adatkörnyezetet frissítheti az új csomaggal. A rendelkezésre álló elvárások teljes listáját a GX Várakozási Galéria-ban 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
mérték
Adjon hozzá egy "Kiskereskedelmi mérőcsomagot" egy 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. További információ az Ellenőrzőpont konfigurációjáról: Adatérvényesítési munkafolyamat.
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"]]
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])
)
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 grafikonból látható, hogy április és július kissé kívül volt a tartományon, majd további lépéseket tehet a vizsgálat érdekében.
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 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 gx
könyvtárat a lakehouse-ba.
Fontos
Ez a cella feltételezi, adott hozzá egy tóparti a jegyzetfüzethez. Ha nincs hozzá csatlakoztatva egy tóház, akkor nem fog megjelenni hibaüzenet, de később nem fogja tudni visszaállítani a kontextust. Ha most ad hozzá egy lakehouse-t, a kernel újraindul, ezért futtatnia kell a jegyzetfüzetet újra, hogy visszatérjen erre a pontra.
# copy GX directory to attached lakehouse
!cp -r gx/ /lakehouse/default/Files/gx
A jövőbeli környezetek most context = gx.get_context(project_root_dir="<your path here>")
segítségével hozhatók létre 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 context = gx.get_context(project_root_dir="/lakehouse/default/Files/gx")
használatával kérje le a környezetet.
Kapcsolódó tartalom
Tekintse meg a szemantikai hivatkozás / SemPy egyéb oktatóanyagait:
- oktatóanyag: Adatok tisztítása funkcionális függőségekkel
- oktatóanyag: Funkcionális függőségek elemzése szemantikai mintamodellben
- oktatóanyag: Power BI-mértékek kinyerása és kiszámítása Jupyter-jegyzetfüzetből
- oktatóanyag: Kapcsolatok felderítése szemantikai modellben szemantikai hivatkozással
- oktatóanyag: Kapcsolatok felderítése a Synthea adatkészletben szemantikai hivatkozással