Aracılığıyla paylaş


Öğretici: SemPy ve Büyük Beklentileri (GX) kullanarak verileri doğrulama

Bu öğreticide, Power BI anlam modellerinde veri doğrulama gerçekleştirmek için SemPy'yi Büyük Beklentiler (GX) ile birlikte kullanmayı öğreneceksiniz.

Bu öğretici size şunları nasıl yapacağınızı gösterir:

  • Büyük Beklenti'nin Doku Veri Kaynağı (semantik bağlantı üzerine kurulu) ile Doku çalışma alanınızdaki bir veri kümesindeki kısıtlamaları doğrulayın.
    • GX Veri Bağlamı, Veri Varlıkları ve Beklentiler'i yapılandırın.
    • GX Denetim Noktası ile doğrulama sonuçlarını görüntüleyin.
  • Ham verileri analiz etmek için anlamsal bağlantıyı kullanın.

Önkoşullar

  • Çalışma alanınızı bulmak ve seçmek için sol gezinti bölmesinden çalışma alanları seçin. Bu çalışma alanı, geçerli çalışma alanınız olur.
  • Perakende Analizi Örneği PBIX.pbix dosyasını indirin.
  • Çalışma alanınızda, çalışma alanınıza Perakende Analizi Örneği PBIX.pbix dosyasını yüklemek için >Raporu veya Sayfalandırılmış Rapor>Bu bilgisayardan İçeri Aktar'ıseçin.

Not defterinde birlikte izleyin

great_expectations_tutorial.ipynb, bu öğreticiye eşlik eden not defteridir.

  • Bu öğreticide eşlik eden not defterini açmak için, Not defterini çalışma alanınıza aktarmak sisteminizi veri bilimi öğreticilerine hazırlama başlığındaki yönergeleri izleyin.

  • Bu sayfadaki kodu kopyalayıp yapıştırmayı tercih ederseniz, yeni bir not defteri oluşturabilirsiniz.

  • Kod çalıştırmaya başlamadan önce not defteri bir göl evi eklemeyi unutmayın.

Dizüstü bilgisayarı ayarlayın

Bu bölümde, gerekli modüller ve verilerle bir not defteri ortamı ayarlarsınız.

  1. Not defterindeki %pip satır içi yükleme özelliğini kullanarak pypi'den SemPy ve ilgili Great Expectations kitaplıklarını yükleyin.
# 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. Daha sonra ihtiyacınız olacak modüllerin gerekli içeri aktarmalarını gerçekleştirin:
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 Veri Bağlamı ve Veri Kaynağını Ayarlama

Büyük Beklentiler'i kullanmaya başlamak için önce bir GX Veri Bağlamıayarlamanız gerekir. Bağlam, GX işlemleri için bir giriş noktası görevi görür ve tüm ilgili yapılandırmaları tutar.

context = gx.get_context()

Artık verilerle etkileşime başlamak için Fabric veri kümenizi Veri Kaynağı olarak bu bağlama ekleyebilirsiniz. Bu öğreticide, standart bir Power BI örnek anlam modeli olan Perakende Analizi Örneği .pbix dosyasıkullanılmaktadır.

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

Veri Varlıklarını Belirtme

Çalışmak istediğiniz verilerin alt kümesini belirtmek için Veri Varlıkları tanımlayın. Varlık tam tablolar kadar basit veya özel Veri Çözümleme İfadeleri (DAX) sorgusu kadar karmaşık olabilir.

Burada birden çok varlık ekleyeceksiniz:

Power BI tablosu

Power BI tablosunu veri varlığı olarak ekleyin.

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

Power BI ölçüsü

Veri kümeniz önceden yapılandırılmış ölçüler içeriyorsa, ölçüleri SemPy'nin evaluate_measurebenzer bir API'yi izleyen varlıklar olarak eklersiniz.

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

DAX

Kendi ölçülerinizi tanımlamak veya belirli satırlar üzerinde daha fazla denetim sahibi olmak istiyorsanız, özel bir DAX sorgusuyla bir DAX varlığı ekleyebilirsiniz. Burada, mevcut iki ölçüyü bölerek Total Units Ratio bir ölçü tanımlayacağız.

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 sorgusu

Bazı durumlarda, veri doğrulama işleminin bir parçası olarak Dinamik Yönetim Görünümü (DMV) hesaplamalarını kullanmak yararlı olabilir. Örneğin, veri kümenizdeki bilgi tutarlılığı ihlallerinin sayısını izleyebilirsiniz. Daha fazla bilgi için bkz. Verileri temizleme = daha hızlı raporlar.

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

Beklenti

Varlıklara belirli kısıtlamalar eklemek için öncelikle Expectation Suitesyapılandırmanız gerekir. Her pakete tek tek Expectations ekledikten sonra, yeni paketin başında ayarlanan Veri Bağlamı'nı güncelleştirebilirsiniz. Kullanılabilir beklentilerin tam listesini görmek için GX Beklenti Galerisibölümüne bakın.

İki beklentiye sahip bir "Retail Store Suite" ekleyerek başlayın:

  • geçerli bir posta kodu
  • 80 ile 200 arasında satır sayısı olan bir tablo
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 Ölçüsü

"Tek bir şartla 'Retail Measure Suite' ekleyin:"

  • Sütun değerleri 50.000'den büyük olmalıdır
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

Tek bir beklentiyle "Retail DAX Suite" ekleyin:

  • Toplam Birim Oranı için sütun değerleri 0,8 ile 1,5 arasında olmalıdır
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)

Referans Bütünlüğü İhlalleri (DMV)

Tek bir şartla "Retail DMV Suite" ekleyin:

  • RIVIOLATION_COUNT 0 olmalıdır
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)

Doğrulama

Belirtilen beklentileri verilere karşı çalıştırmak için önce bir Denetim Noktası oluşturun ve bunu bağlama ekleyin. Checkpoint yapılandırması hakkında daha fazla bilgi için bkz. Veri Doğrulama iş akışı.

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
)

Şimdi denetim noktasını çalıştırın ve basit biçimlendirme için sonuçları pandas DataFrame olarak ayıklayın.

result = checkpoint.run()

Sonuçlarınızı işleyin ve yazdırın.

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

Tablosu doğrulama sonuçlarını gösterir.

Bu sonuçlardan, özel bir DAX sorgusu aracılığıyla tanımladığınız "Toplam Birim YoY Varlığı" dışında tüm beklentilerinizin doğrulamayı geçtiğini görebilirsiniz.

Tanılama

Anlamsal bağlantıyı kullanarak, hangi yılların aralık dışında olduğunu anlamak için kaynak verileri getirebilirsiniz. Anlamsal bağlantı, DAX sorgularını yürütmek için satır içi bir sihir sağlar. GX Veri Varlığı'na ilettiğiniz sorguyu yürütmek ve sonuçta elde edilen değerleri görselleştirmek için anlamsal bağlantıyı kullanın.

%%dax "Retail Analysis Sample PBIX"

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

Tablosu, DAX sorgu özetlemesinin sonuçlarını gösterir.

Bu sonuçları bir DataFrame'e kaydedin.

df = _

Sonuçları çizin.

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

Çizimi, DAX sorgu özetlemesinin sonuçlarını gösterir.

Çizimden Nisan ve Temmuz'un biraz aralık dışında olduğunu görebilir ve araştırmak için daha fazla adım atabilirsiniz.

GX yapılandırmasını depolama

Veri kümenizdeki veriler zaman içinde değiştikçe, az önce gerçekleştirdiğiniz GX doğrulamalarını yeniden çalıştırmak isteyebilirsiniz. Şu anda Veri Bağlamı (bağlı Veri Varlıklarını, Expectation Suites'i ve Checkpoint'i içeren) kısa süreli olarak yaşamaktadır, ancak gelecekte kullanmak üzere Dosya Bağlamı'na dönüştürülebilir. Alternatif olarak, bir Dosya Bağlamı örneği oluşturabilirsiniz (bkz. Veri Bağlamı örneği oluşturma).

context = context.convert_to_file_context()

Bağlamı kaydettiğinize göre, gx dizinini lakehouse'unuza kopyalayın.

Önemli

Bu hücre, not defterine bir lakehouse eklediğinizi varsayar. Eklenmiş bir lakehouse yoksa bir hata görmezsiniz, ancak daha sonra bağlamı elde edemezsiniz. Şimdi bir lakehouse eklerseniz çekirdek yeniden başlatılır, bu nedenle bu noktaya geri dönmek için not defterinin tamamını yeniden çalıştırmanız gerekir.

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

Artık bu öğreticideki tüm yapılandırmaları kullanmak için context = gx.get_context(project_root_dir="<your path here>") ile gelecekteki bağlamlar oluşturulabilir.

Örneğin, yeni bir not defterinde aynı lakehouse'u ekleyin ve bağlamı elde etmek için context = gx.get_context(project_root_dir="/lakehouse/default/Files/gx") kullanın.

Anlamsal bağlantı / SemPy için diğer öğreticilere göz atın: