Udostępnij za pośrednictwem


Samouczek: weryfikowanie danych przy użyciu bibliotekI SemPy i wielkich oczekiwań (GX)

Z tego samouczka dowiesz się, jak używać biblioteki SemPy wraz z wielkimi oczekiwaniami (GX) do przeprowadzania walidacji danych na modelach semantycznych usługi Power BI.

Ten samouczek przedstawia sposób wykonania następujących czynności:

  • Zweryfikuj ograniczenia dotyczące zestawu danych w obszarze roboczym Sieć szkieletowa przy użyciu źródła danych sieci szkieletowej Great Expectation (opartego na linku semantycznym).
    • Skonfiguruj kontekst danych GX, zasoby danych i oczekiwania.
    • Wyświetlanie wyników walidacji za pomocą punktu kontrolnego GX.
  • Użyj linku semantycznego do analizowania danych pierwotnych.

Wymagania wstępne

  • Uzyskaj subskrypcję usługi Microsoft Fabric. Możesz też utworzyć konto bezpłatnej wersji próbnej usługi Microsoft Fabric.

  • Zaloguj się do usługi Microsoft Fabric.

  • Użyj przełącznika środowiska po lewej stronie głównej, aby przełączyć się na środowisko usługi Synapse Nauka o danych.

    Zrzut ekranu przedstawiający menu przełącznika środowiska pokazujące, gdzie wybrać Nauka o danych.

  • Wybierz pozycję Obszary robocze w okienku nawigacji po lewej stronie, aby znaleźć i wybrać obszar roboczy. Ten obszar roboczy staje się bieżącym obszarem roboczym.
  • Pobierz plik PBIX.pbix z przykładu Retail Analysis.
  • W obszarze roboczym użyj przycisku Przekaż, aby przekazać plik PBIX.pbix przykładu Retail Analysis do obszaru roboczego.

Postępuj zgodnie z instrukcjami w notesie

great_expectations_tutorial.ipynb to notes, który towarzyszy temu samouczkowi.

Aby otworzyć towarzyszący notes na potrzeby tego samouczka, postępuj zgodnie z instrukcjami w temacie Przygotowywanie systemu do celów nauki o danych, aby zaimportować notes do obszaru roboczego.

Jeśli wolisz skopiować i wkleić kod z tej strony, możesz utworzyć nowy notes.

Przed rozpoczęciem uruchamiania kodu pamiętaj, aby dołączyć usługę Lakehouse do notesu .

Konfigurowanie notesu

W tej sekcji skonfigurujesz środowisko notesu z niezbędnymi modułami i danymi.

  1. Zainstaluj SemPy i odpowiednie Great Expectations biblioteki z PyPI przy użyciu %pip funkcji instalacji wbudowanej w notesie.
# install libraries
%pip install semantic-link great-expectations great_expectations_experimental great_expectations_zipcode_expectations

# load %%dax cell magic
%load_ext sempy
  1. Wykonaj niezbędne importy modułów, które będą potrzebne później:
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

Konfigurowanie kontekstu danych GX i źródła danych

Aby rozpocząć pracę z wielkimi oczekiwaniami, musisz najpierw skonfigurować kontekst danych GX. Kontekst służy jako punkt wejścia dla operacji GX i przechowuje wszystkie odpowiednie konfiguracje.

context = gx.get_context()

Teraz możesz dodać zestaw danych sieci Szkieletowej do tego kontekstu jako źródło danych, aby rozpocząć interakcję z danymi. W tym samouczku jest używany standardowy plik pbix przykładowego modelu analizy handlu detalicznego usługi Power BI.

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

Określanie zasobów danych

Zdefiniuj zasoby danych, aby określić podzestaw danych, z którym chcesz pracować. Zasób może być tak prosty, jak pełne tabele lub być tak złożony, jak niestandardowe zapytanie języka DAX (Data Analysis Expressions).

W tym miejscu dodasz wiele zasobów:

Tabela usługi Power BI

Dodaj tabelę usługi Power BI jako zasób danych.

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

Miara usługi Power BI

Jeśli zestaw danych zawiera wstępnie skonfigurowane miary, należy dodać miary jako zasoby zgodnie z podobnym interfejsem API do biblioteki evaluate_measureSemPy.

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

DAX

Jeśli chcesz zdefiniować własne miary lub mieć większą kontrolę nad określonymi wierszami, możesz dodać zasób języka DAX z niestandardowym zapytaniem języka DAX. W tym miejscu definiujemy miarę Total Units Ratio , dzieląc dwie istniejące miary.

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

Zapytanie DMV

W niektórych przypadkach pomocne może być użycie obliczeń dynamicznego widoku zarządzania (DMV) w ramach procesu weryfikacji danych. Możesz na przykład śledzić liczbę naruszeń integralności referencyjnej w zestawie danych. Aby uzyskać więcej informacji, zobacz Czyszczenie danych = szybsze raporty.

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

Oczekiwania

Aby dodać określone ograniczenia do zasobów, należy najpierw skonfigurować zestawy oczekiwań. Po dodaniu poszczególnych oczekiwań do każdego pakietu możesz zaktualizować kontekst danych skonfigurowany na początku przy użyciu nowego pakietu. Aby uzyskać pełną listę dostępnych oczekiwań, zobacz galerię oczekiwań GX.

Zacznij od dodania pakietu "Retail Store Suite" z dwoma oczekiwaniami:

  • prawidłowy kod pocztowy
  • tabela z liczbą wierszy z przedziału 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 Miara

Dodaj pakiet "Retail Measure Suite" z jednym oczekiwaniem:

  • Wartości kolumn powinny być większe niż 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 Język dax

Dodaj "Retail DAX Suite" z jednym oczekiwaniem:

  • Wartości kolumn dla łącznego współczynnika jednostek powinny należeć do przedziału od 0,8 do 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)

Naruszenia więzów integralności (DMV)

Dodaj pakiet "Retail DMV Suite" z jednym oczekiwaniem:

  • wartość RIVIOLATION_COUNT powinna mieć wartość 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)

Walidacja

Aby faktycznie uruchomić określone oczekiwania względem danych, najpierw utwórz punkt kontrolny i dodaj go do kontekstu. Aby uzyskać więcej informacji na temat konfiguracji punktu kontrolnego, zobacz Przepływ pracy weryfikacji danych.

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 uruchom punkt kontrolny i wyodrębnij wyniki jako ramkę danych biblioteki pandas w celu prostego formatowania.

result = checkpoint.run()

Przetwarzanie i drukowanie wyników.

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

Tabela zawiera wyniki walidacji.

Z tych wyników można zobaczyć, że wszystkie oczekiwania przeszły weryfikację, z wyjątkiem "Total Units YoY Asset", które zdefiniowano za pomocą niestandardowego zapytania języka DAX.

Diagnostyka

Korzystając z linku semantycznego, możesz pobrać dane źródłowe, aby zrozumieć, które dokładne lata są poza zakresem. Link semantyczny zapewnia wbudowaną magię do wykonywania zapytań języka DAX. Użyj linku semantycznego, aby wykonać to samo zapytanie przekazane do zasobu danych GX i zwizualizować wynikowe wartości.

%%dax "Retail Analysis Sample PBIX"

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

Tabela przedstawia wyniki podsumowania zapytań języka DAX.

Zapisz te wyniki w ramce danych.

df = _

Wykreślij wyniki.

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

Wykres przedstawia wyniki podsumowania zapytań języka DAX.

Na wykresie widać, że kwiecień i lipiec były nieco poza zasięgiem, a następnie można podjąć dalsze kroki w celu zbadania.

Przechowywanie konfiguracji GX

Gdy dane w zestawie danych zmieniają się wraz z upływem czasu, możesz chcieć ponownie uruchomić właśnie wykonane walidacje GX. Obecnie kontekst danych (zawierający połączone zasoby danych, zestawy oczekiwań i punkt kontrolny) istnieje efemerycznie, ale można go przekonwertować na kontekst pliku do użytku w przyszłości. Alternatywnie można utworzyć wystąpienie kontekstu pliku (zobacz Tworzenie wystąpienia kontekstu danych).

context = context.convert_to_file_context()

Po zapisaniu kontekstu skopiuj gx katalog do usługi Lakehouse.

Ważne

W tej komórce założono, że do notesu dodano magazyn lakehouse . Jeśli nie ma dołączonego magazynu lakehouse, nie zostanie wyświetlony błąd, ale nie będzie można później uzyskać kontekstu. Jeśli teraz dodasz lakehouse, jądro zostanie uruchomione ponownie, więc musisz ponownie uruchomić cały notes, aby wrócić do tego punktu.

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

Teraz można utworzyć przyszłe konteksty, context = gx.get_context(project_root_dir="<your path here>") aby użyć wszystkich konfiguracji z tego samouczka.

Na przykład w nowym notesie dołącz ten sam magazyn lakehouse i użyj polecenia context = gx.get_context(project_root_dir="/lakehouse/default/Files/gx") , aby pobrać kontekst.

Zapoznaj się z innymi samouczkami dotyczącymi linku semantycznego /SemPy: