Κοινή χρήση μέσω


Εκμάθηση: Επικύρωση δεδομένων με χρήση των SemPy και Great Expectations (GX)

Σε αυτό το εκπαιδευτικό βοήθημα, θα μάθετε πώς μπορείτε να χρησιμοποιήσετε το SemPy μαζί με Great Expectations (GX) για την εκτέλεση επικύρωσης δεδομένων σε σημασιολογικά μοντέλα Power BI.

Αυτή η εκμάθηση σάς δείχνει πώς μπορείτε να κάνετε τα εξής:

  • Επικυρώστε τους περιορισμούς σε ένα σύνολο δεδομένων στον χώρο εργασίας fabric σας με την προέλευση δεδομένων Fabric της Great Expectation (που βασίζεται στη σημασιολογική σύνδεση).
    • Ρυθμίστε τις παραμέτρους ενός περιβάλλοντος δεδομένων GX, πόρων δεδομένων και προσδοκιών.
    • Δείτε τα αποτελέσματα επικύρωσης με ένα σημείο ελέγχου GX.
  • Χρησιμοποιήστε σημασιολογική σύνδεση για να αναλύσετε ανεπεξέργαστα δεδομένα.

Προϋποθέσεις

  • Λάβετε μια συνδρομής Microsoft Fabric . Εναλλακτικά, εγγραφείτε για μια δωρεάν δοκιμαστική έκδοση microsoft Fabric.

  • Εισέλθετε για να το Microsoft Fabric.

  • Χρησιμοποιήστε την εναλλαγή εμπειρίας στην κάτω αριστερή πλευρά της αρχικής σελίδας σας για να μεταβείτε σε Fabric.

    Στιγμιότυπο οθόνης του μενού εναλλαγής εμπειρίας, που εμφανίζει πού μπορείτε να επιλέξετε Επιστήμη δεδομένων.

  • Επιλέξτε χώροι εργασίας από το αριστερό παράθυρο περιήγησης για να βρείτε και να επιλέξετε τον χώρο εργασίας σας. Αυτός ο χώρος εργασίας γίνεται ο τρέχων χώρος εργασίας σας.
  • Κάντε λήψη του αρχείου δείγματος ανάλυσης λιανικής PBIX.pbix .
  • Στον χώρο εργασίας σας, επιλέξτε Εισαγωγή>Αναφορά ή>Σελιδοποιημένη αναφορά Από αυτόν τον υπολογιστή για να αποστείλετε στο χώρο εργασίας σας το αρχείο Δείγμα ανάλυσης λιανικής PBIX.pbix.

Παρακολούθηση στο σημειωματάριο

great_expectations_tutorial.ipynb είναι το σημειωματάριο που συνοδεύει αυτό το πρόγραμμα εκμάθησης.

Ρύθμιση του σημειωματάριου

Σε αυτή την ενότητα, ρυθμίζετε ένα περιβάλλον σημειωματάριου με τις απαραίτητες λειτουργικές μονάδες και δεδομένα.

  1. Εγκαταστήστε SemPy και τις σχετικές βιβλιοθήκες Great Expectations από το PyPI χρησιμοποιώντας τη δυνατότητα εγκατάστασης %pip εντός του σημειωματάριου.
# 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. Εκτελέστε τις απαραίτητες εισαγωγές λειτουργικών μονάδων που θα χρειαστείτε αργότερα:
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 και προέλευσης δεδομένων

Για να ξεκινήσετε με τις Μεγάλες προσδοκίες, πρέπει πρώτα να ρυθμίσετε ένα περιβάλλον δεδομένων GX . Το περιβάλλον χρησιμεύει ως σημείο εισόδου για λειτουργίες GX και διατηρεί όλες τις σχετικές ρυθμίσεις παραμέτρων.

context = gx.get_context()

Τώρα, μπορείτε να προσθέσετε το σύνολο δεδομένων Fabric σε αυτό το περιβάλλον ως προέλευση δεδομένων για να ξεκινήσετε την αλληλεπίδραση με τα δεδομένα. Αυτό το εκπαιδευτικό βοήθημα χρησιμοποιεί ένα τυπικό δείγμα σημασιολογικού μοντέλου Power BI αρχείου Retail Analysis Sample .pbix.

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

Καθορισμός πόρων δεδομένων

Καθορίστε Data Assets για να καθορίσετε το υποσύνολο των δεδομένων με τα οποία θέλετε να εργαστείτε. Το στοιχείο μπορεί να είναι τόσο απλό όσο οι πλήρεις πίνακες ή να είναι τόσο σύνθετο όσο ένα προσαρμοσμένο ερώτημα παραστάσεων ανάλυσης δεδομένων (DAX).

Εδώ, θα προσθέσετε πολλούς πόρους:

Πίνακας του Power BI

Προσθέστε έναν πίνακα Power BI ως στοιχείο δεδομένων.

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

Μέτρηση Power BI

Εάν το σύνολο δεδομένων σας περιέχει προκαθορισμένες μετρήσεις, προσθέτετε τις μετρήσεις ως πόρους μετά από ένα παρόμοιο API στο evaluate_measureτου SemPy .

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

DAX

Εάν θέλετε να ορίσετε τις δικές σας μετρήσεις ή να ελέγχετε περισσότερο συγκεκριμένες γραμμές, μπορείτε να προσθέσετε ένα στοιχείο DAX με ένα προσαρμοσμένο ερώτημα DAX. Εδώ, ορίζουμε μια Total Units Ratio μέτρηση διαιρώντας δύο υπάρχουσες μετρήσεις.

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

Σε ορισμένες περιπτώσεις, μπορεί να είναι χρήσιμο να χρησιμοποιήσετε υπολογισμούς προβολής δυναμικής διαχείρισης (DMV) ως μέρος της διαδικασίας επικύρωσης δεδομένων. Για παράδειγμα, μπορείτε να παρακολουθείτε τον αριθμό των παραβιάσεων ακεραιότητας αναφορών εντός του συνόλου δεδομένων σας. Για περισσότερες πληροφορίες, ανατρέξτε στο θέμα Εκκαθάριση δεδομένων = ταχύτερες αναφορές.

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

Προσδοκίες

Για να προσθέσετε συγκεκριμένους περιορισμούς στους πόρους, πρέπει πρώτα να ρυθμίσετε τις παραμέτρους του Expectation Suites. Μετά την προσθήκη μεμονωμένων προσδοκώμενων σε κάθε οικογένεια προγραμμάτων, μπορείτε, στη συνέχεια, να ενημερώσετε το περιβάλλον δεδομένων που έχει ρυθμιστεί στην αρχή με τη νέα οικογένεια προγραμμάτων. Για μια πλήρη λίστα με τις διαθέσιμες προσδοκίες, ανατρέξτε στο Συλλογή προσδοκιών GX.

Ξεκινήστε προσθέτοντας μια "Οικογένεια καταστημάτων λιανικής" με δύο προσδοκίες:

  • έγκυρος ταχυδρομικός κώδικας
  • ένας πίνακας με πλήθος γραμμών μεταξύ 80 και 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

Προσθέστε μια "Οικογένεια μετρήσεων λιανικής" με μία προσδοκία:

  • Οι τιμές στήλης πρέπει να είναι μεγαλύτερες από 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

Προσθέστε μια "Οικογένεια DAX λιανικής" με μία προσδοκία:

  • Οι τιμές στήλης για την Αναλογία συνολικών μονάδων πρέπει να είναι μεταξύ 0,8 και 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)

Παραβιάσεις ακεραιότητας αναφορών (DMV)

Προσθέστε μια "Οικογένεια DMV λιανικής" με μία προσδοκία:

  • η RIVIOLATION_COUNT θα πρέπει να είναι 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)

Επικύρωση

Για να εκτελέσετε πραγματικά τις καθορισμένες προσδοκίες έναντι των δεδομένων, δημιουργήστε πρώτα ένα Στοιχείο ελέγχου και προσθέστε το στο πλαίσιο. Για περισσότερες πληροφορίες σχετικά με τη ρύθμιση παραμέτρων του σημείου ελέγχου, ανατρέξτε στο θέμα ροής εργασιών επικύρωσης δεδομένων.

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
)

Τώρα εκτελέστε το σημείο ελέγχου και εξαγάγετε τα αποτελέσματα ως pandas DataFrame για απλή μορφοποίηση.

result = checkpoint.run()

Επεξεργαστείτε και εκτυπώστε τα αποτελέσματά σας.

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

Πίνακας εμφανίζει τα αποτελέσματα επικύρωσης.

Από αυτά τα αποτελέσματα μπορείτε να δείτε ότι όλες οι προσδοκίες σας πέρασαν την επικύρωση, εκτός από το "Total Units YoY Asset" που ορίσατε μέσω ενός προσαρμοσμένου ερωτήματος DAX.

Διαγνωστικός έλεγχος

Χρησιμοποιώντας τη σύνδεση σημασιολογίας, μπορείτε να λάβετε τα δεδομένα προέλευσης για να κατανοήσετε ποια ακριβή έτη είναι εκτός περιοχής. Η Σύνδεση σημασιολογίας παρέχει μια ενσωματωμένη μαγεία για την εκτέλεση ερωτημάτων DAX. Χρησιμοποιήστε τη σημασιολογική σύνδεση για να εκτελέσετε το ίδιο ερώτημα που μεταβιβάσατε στο στοιχείο δεδομένων GX και απεικονίστε τις τιμές που προκύπτουν.

%%dax "Retail Analysis Sample PBIX"

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

Πίνακας εμφανίζει τα αποτελέσματα από τη σύνοψη ερωτημάτων DAX.

Αποθηκεύστε αυτά τα αποτελέσματα σε ένα DataFrame.

df = _

Σχεδιάστε τα αποτελέσματα.

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

Σχεδίαση εμφανίζει τα αποτελέσματα της σύνοψης ερωτήματος DAX.

Από την πλοκή, μπορείτε να δείτε ότι ο Απρίλιος και ο Ιούλιος ήταν ελαφρώς εκτός περιοχής και, στη συνέχεια, μπορούν να προβούν σε περαιτέρω βήματα για διερεύνηση.

Αποθήκευση ρύθμισης παραμέτρων GX

Καθώς τα δεδομένα στο σύνολο δεδομένων σας αλλάζουν με την πάροδο του χρόνου, μπορεί να θέλετε να εκτελέσετε ξανά τις επικυρώσεις GX που μόλις εκτελέσατε. Προς το παρόν, το περιβάλλον δεδομένων (που περιέχει τα συνδεδεμένα data assets, τις οικογένειες προσδοκώμενων πελατών και το σημείο ελέγχου) ζει εφήμερα, αλλά μπορεί να μετατραπεί σε περιβάλλον αρχείου για μελλοντική χρήση. Εναλλακτικά, μπορείτε να δημιουργήσετε ένα περιβάλλον αρχείου (ανατρέξτε Να ξεκινήσει ένα περιβάλλον δεδομένων).

context = context.convert_to_file_context()

Τώρα που αποθηκεύσατε το περιβάλλον, αντιγράψτε τον κατάλογο gx στο lakehouse σας.

Σημαντικός

Αυτό το κελί προϋποθέτει ότι προσθέσετε ένα lakehouse στο σημειωματάριο. Εάν δεν υπάρχει συνημμένη λίμνη, δεν θα δείτε σφάλμα, αλλά δεν θα μπορείτε αργότερα να λάβετε το περιβάλλον. Εάν προσθέσετε τώρα ένα lakehouse, ο πυρήνας θα επανεκκινηθεί, επομένως θα πρέπει να εκτελέσετε ξανά ολόκληρο το σημειωματάριο για να επιστρέψετε σε αυτό το σημείο.

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

Τώρα, μπορούν να δημιουργηθούν μελλοντικά περιβάλλοντα με context = gx.get_context(project_root_dir="<your path here>") να χρησιμοποιήσετε όλες τις ρυθμίσεις παραμέτρων από αυτό το πρόγραμμα εκμάθησης.

Για παράδειγμα, σε ένα νέο σημειωματάριο, επισυνάψτε την ίδια λίμνη και χρησιμοποιήστε context = gx.get_context(project_root_dir="/lakehouse/default/Files/gx") για να ανακτήσετε το περιβάλλον.

Δείτε άλλα προγράμματα εκμάθησης για τη σημασιολογική σύνδεση / SemPy: