Aracılığıyla paylaş


Python kullanarak anlamsal modellerden veri okuma ve Power BI tarafından tüketilebilir veri yazılması

Bu makalede, Microsoft Fabric'teki SemPy Python kitaplığını kullanarak anlam modellerindeki verileri, meta verileri ve ölçüleri değerlendirmeyi öğreneceksiniz. Ayrıca anlamsal modellerin kullanabileceği verileri yazmayı da öğrenirsiniz.

Önkoşullar

  • Microsoft Fabric'te Veri Bilimi deneyimine gidin.
  • Kod kopyalayıp hücrelere yapıştırmak için yeni bir not defteri oluşturun.
  • Spark 3.4 ve üzeri için Doku kullanılırken varsayılan çalışma zamanında Anlam bağlantısı kullanılabilir ve yüklemeniz gerekmez. Spark 3.3 veya üzerini kullanıyorsanız veya Anlam Bağlantısı'nın en son sürümüne güncelleştirmek istiyorsanız komutunu çalıştırabilirsiniz: python %pip install -U semantic-link
  • Not defterinize Lakehouse ekleme
  • Fabric-samples deposunun datasets klasöründenCustomer Profitability Sample.pbix anlam modelini indirin ve yerel olarak kaydedin.

Anlam modelini çalışma alanınıza yükleme

Bu makalede Customer Profitability Sample.pbix semantik modeli kullanılmaktadır. Anlam modeli, pazarlama malzemeleri üreten bir şirkete başvuruyor. Farklı iş birimleri için ürün, müşteri ve gelir verilerini içerir.

  1. Çalışma alanınızı Doku Veri Bilimi'nde açın.
  2. Bu bilgisayardan Rapor, Sayfalandırılmış Rapor veya Çalışma Kitabını İçe Aktar seçeneğini seçin ve Müşteri Kârlılığı Örneği.pbix semantik modelini seçin.

Çalışma alanına anlamsal model yüklemeye yönelik arabirimin ekran görüntüsü.

Karşıya yükleme tamamlandıktan sonra çalışma alanınız üç yeni yapıt içerir: Power BI raporu, pano ve Customer Profitability Sample adlı anlam modeli. Bu makaledeki adımlar bu anlam modeline dayanır.

Çalışma alanına yüklenen Power BI dosyasındaki öğelerin ekran görüntüsü.

Anlam modellerinden veri okumak için Python kullanma

SemPy Python API'si, Bir Microsoft Fabric çalışma alanında bulunan anlam modellerinden veri ve meta veriler alabilir. API, bu sorgular üzerinde de sorgu yürütebilir.

Not defteriniz, Power BI veri kümesi anlam modeliniz ve lakehouse'unuz aynı çalışma alanında veya farklı çalışma alanlarında bulunabilir. Varsayılan olarak, SemPy semantik modelinize şu kaynaktan erişmeye çalışır:

  • Not defterinize bir göl evi eklediyseniz, göl evinizin çalışma alanı.
  • Ekli göl evi yoksa, not defterinizin çalışma alanı.

Anlam modeliniz bu çalışma alanlarının herhangi birinde yer almıyorsa, SemPy yöntemini çağırırken anlamsal modelinizin çalışma alanını belirtmeniz gerekir.

Anlam modellerinden verileri okumak için şu adımları izleyin:

  1. Çalışma alanınızdaki kullanılabilir anlam modellerini listeleyin.

    import sempy.fabric as fabric
    
    df_datasets = fabric.list_datasets()
    df_datasets
    
  2. Müşteri Kârlılığı Örneği anlam modelinde bulunan tabloları listeleyin.

    df_tables = fabric.list_tables("Customer Profitability Sample", include_columns=True)
    df_tables
    
  3. Müşteri Kârlılığı Örneği anlam modelinde tanımlanan ölçüleri listeleyin.

    İpucu

    Aşağıdaki kod örneğinde SemPy'nin anlam modeline erişmek için kullanacağımız çalışma alanını belirttik. yerine <Your Workspace> anlam modelini yüklediğiniz çalışma alanının adını kullanabilirsiniz ( anlam modelini çalışma alanınıza yükleme bölümünden).

    df_measures = fabric.list_measures("Customer Profitability Sample", workspace="<Your Workspace>")
    df_measures
    

    Burada Müşteri tablosunun ilgilendiğimiz tablo olduğunu belirledik.

  4. Müşteri Kârlılığı Örneği anlam modelinden Müşteri tablosunu okuyun.

    df_table = fabric.read_table("Customer Profitability Sample", "Customer")
    df_table
    

    Not

    • Veriler, en az XMLA salt okunur özelliğinin etkinleştirilmesini gerektiren XMLA kullanılarak alınır.
    • Alınabilir veri miktarı, anlam modelini barındıran kapasite SKU'sunun sorgu başına maksimum bellek değeriyle sınırlıdır. - Not defterini çalıştıran Spark sürücü düğümü (daha fazla bilgi için düğüm boyutlarını ziyaret edin).
    • Tüm istekler, Microsoft Azure Analysis Services performansı üzerindeki etkiyi en aza indirmek için düşük önceliklidir ve etkileşimli istekler olarak faturalandırılır.
  5. Her müşterinin durumu ve tarihi için Toplam Gelir ölçüsünü değerlendirin.

    df_measure = fabric.evaluate_measure(
        "Customer Profitability Sample",
        "Total Revenue",
        ["'Customer'[State]", "Calendar[Date]"])
    df_measure
    

    Not

    • Varsayılan olarak, veriler XMLA kullanılarak alınmaz , bu nedenle XMLA salt okunur özelliğinin etkinleştirilmesi gerekmez.
    • Veriler Power BI arka uç sınırlamalarına tabi değildir.
    • Alınabilir veri miktarı, anlam modelini barındıran kapasite SKU'sunun sorgu başına maksimum belleği ile sınırlıdır. - Not defterini çalıştıran Spark sürücü düğümü (daha fazla bilgi için düğüm boyutlarını ziyaret edin).
    • Tüm istekler etkileşimli istekler olarak faturalandırılır.
    • İşlev, evaluate_dax anlam modelini otomatik olarak yenilemez. Daha fazla ayrıntı için bu sayfayı ziyaret edin.
  6. Ölçü hesaplamasına filtre eklemek için, belirli bir sütun için izin verilen değerlerin listesini belirtin.

    filters = {
        "State[Region]": ["East", "Central"],
        "State[State]": ["FLORIDA", "NEW YORK"]
    }
    df_measure = fabric.evaluate_measure(
        "Customer Profitability Sample",
        "Total Revenue",
        ["Customer[State]", "Calendar[Date]"],
        filters=filters)
    df_measure
    
  7. DAX sorgusuyla müşterinin eyaleti ve tarihi başına Toplam Gelir ölçümünü değerlendirin.

    df_dax = fabric.evaluate_dax(
        "Customer Profitability Sample",
        """
        EVALUATE SUMMARIZECOLUMNS(
            'State'[Region],
            'Calendar'[Date].[Year],
            'Calendar'[Date].[Month],
            "Total Revenue",
            CALCULATE([Total Revenue]))
        """)
    

    Not

    • Veriler XMLA kullanılarak alınır ve bu nedenle en az XMLA'nın salt okunur olarak etkinleştirilmesi gerekir
    • Alınabilir veri miktarı, Microsoft Azure Analysis Services ve Spark sürücü düğümündeki kullanılabilir bellekle sınırlıdır (daha fazla bilgi için düğüm boyutlarını ziyaret edin)
    • Tüm istekler Analysis Services performansı üzerindeki etkiyi en aza indirmek için düşük öncelikli kullanır ve etkileşimli istekler olarak faturalandırılır
  8. %%dax Kitaplığı içeri aktarmaya gerek kalmadan aynı DAX sorgusunu değerlendirmek için hücre büyüsünü kullanın. Hücre sihrini yüklemek %%dax için bu hücreyi çalıştırın:

    %load_ext sempy
    

    Çalışma alanı parametresi isteğe bağlıdır. İşlevin çalışma alanı parametresiyle evaluate_dax aynı kuralları izler.

    Hücre sihri, söz dizimi ile Python değişkenlerine {variable_name} erişimi de destekler. DAX sorgusunda küme ayracı kullanmak için, başka bir küme ayracı (örnek: EVALUATE {{1}}) ile bu küme ayracından kaçın.

    %%dax "Customer Profitability Sample" -w "<Your Workspace>"
    EVALUATE SUMMARIZECOLUMNS(
        'State'[Region],
        'Calendar'[Date].[Year],
        'Calendar'[Date].[Month],
        "Total Revenue",
        CALCULATE([Total Revenue]))
    

    Elde edilen FabricDataFrame değişkeni aracılığıyla _ kullanılabilir. Bu değişken, yürütülen son hücrenin çıkışını yakalar.

    df_dax = _
    
    df_dax.head()
    
  9. Dış kaynaklardan alınan verilere ölçü ekleyebilirsiniz. Bu yaklaşım üç görevi birleştirir:

    • Sütun adlarını Power BI boyutlarına çözümler
    • Sütunlara göre gruplandırma tanımlar
    • Ölçüyü filtreler Verilen anlam modeli içinde çözümlenemedi sütun adları yoksayılır (daha fazla bilgi için desteklenen DAX söz dizimi kaynağını ziyaret edin).
    from sempy.fabric import FabricDataFrame
    
    df = FabricDataFrame({
            "Sales Agent": ["Agent 1", "Agent 1", "Agent 2"],
            "Customer[Country/Region]": ["US", "GB", "US"],
            "Industry[Industry]": ["Services", "CPG", "Manufacturing"],
        }
    )
    
    joined_df = df.add_measure("Total Revenue", dataset="Customer Profitability Sample")
    joined_df
    

Özel parametreler

SemPy read_table ve evaluate_measure yöntemleri, çıkışı işlemek için yararlı olan daha fazla parametreye sahiptir. Bu parametreler şunlardır:

  • pandas_convert_dtypes: olarak ayarlanırsa True pandas, sonuçta elde edilen DataFrame sütunlarını mümkün olan en iyi dtype'e dönüştürür. convert_dtypes'da daha fazla bilgi edinin. Bu parametre kapalıysa, ilgili tabloların sütunları arasında tür uyumsuzluk sorunları oluşabilir. Power BI modeli , DAX örtük tür dönüştürmesi nedeniyle bu sorunları algılamayabilir.

SemPy read_table , Power BI'ın sağladığı model bilgilerini de kullanır.

Anlamsal modeller tarafından kullanılabilen veri yazma

Lakehouse'a eklenen Spark tabloları, karşılık gelen varsayılan anlam modeline otomatik olarak eklenir. Bu makalede, ekli Lakehouse'a veri yazma işlemi gösterilmektedir. , FabricDataFrame Pandas veri çerçeveleriyle aynı giriş verilerini kabul eder.

from sempy.fabric import FabricDataFrame

df_forecast = FabricDataFrame({'ForecastedRevenue': [1, 2, 3]})

df_forecast.to_lakehouse_table("ForecastTable")

Power BI ile ForecastTable tablosu, Lakehouse semantik modelini içeren bileşik bir anlam modeline eklenebilir.