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.
A kezdőlap bal oldalán található élménykapcsolóval válthat a Synapse Adattudomány felületre.
- 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.
- 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
- 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-mérték
- Egyéni DAX-lekérdezés
- Dinamikus felügyeleti nézet (DMV) lekérdezése
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"]]
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 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.
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ás használatával
- Oktatóanyag: Kapcsolatok felderítése a Synthea-adatkészletben szemantikai hivatkozás használatával