Öğ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
Microsoft Fabric aboneliği alın. Veya ücretsiz Microsoft Fabric deneme sürümünekaydolun.
Microsoft Fabric'eoturum açın.
Ana sayfanızın sol alt tarafındaki deneyim değiştiricisini kullanarak Fabric'e geçiş yapın.
- Ç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.
- Not defterindeki
%pip
satır içi yükleme özelliğini kullanarak pypi'denSemPy
ve ilgiliGreat 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
- 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 ölçüsü
- Özel DAX sorgusu
- Dinamik Yönetim Görünümü (DMV) sorgusu
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_measure
benzer 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"]]
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])
)
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
Ç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.
İlgili içerik
Anlamsal bağlantı / SemPy için diğer öğreticilere göz atın:
- Eğitimi: İşlevsel bağımlılıklarla verileri temizleme
- Öğreticisi: Örnek anlamsal modelde işlevsel bağımlılıkları çözümleme
- Eğitim: Jupyter not defterinden Power BI ölçülerini ayıklama ve hesaplama
- Öğreticisi: Anlamsal bağlantı kullanarak anlamsal modeldeki ilişkileri keşfetme
- Öğreticisi: Anlamsal bağlantı kullanarak Synthea veri kümesindeki ilişkileri bulma