Aracılığıyla paylaş


Python kullanarak Power BI tarafından kullanılan anlamsal modellerden okuma ve veri yazma

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

Önkoşullar

  • Microsoft Fabric'teki Veri Bilimi deneyimini ziyaret edin.
  • Hücrelere kod kopyalamak/yapıştırmak için yeni bir not defteri oluşturma
  • 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ünden Customer Profitability Sample.pbix semantik modelini indirin ve anlam modelini yerel olarak kaydedin

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

Bu makalede Customer Profitability Sample.pbix semantik modeli kullanılmaktadır. Bu anlamsal model, pazarlama malzemeleri üreten bir şirkete başvuruyor. Çeşitli iş birimleri için ürün, müşteri ve buna karşılık gelen gelir verilerini içerir.

  1. Çalışma alanınızı Doku Veri Bilimi'nde açma
  2. Karşıya Yükle > Gözat'ı seçin ve Müşteri Kârlılığı Örneği.pbix anlam modelini seçin.

Çalışma alanına anlamsal model yükleme arabirimini gösteren ekran görüntüsü.

Karşıya yükleme tamamlandığında çalışma alanınızda üç yeni yapıt bulunur: 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 öğeleri gösteren 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:

  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 XMLA kullanılarak alınır. Bunun için en az XMLA salt okunur özelliğinin etkinleştirilmesi gerekir.
    • Alınabilir veri miktarı, semantik modeli barındıran kapasite SKU'su sorgusu başına en yüksek bellek 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, 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 ve bu nedenle XMLA'nın salt okunur olarak etkinleştirilmesini gerektirmez.
    • Veriler Power BI arka uç sınırlamalarına tabi değildir.
    • Alınabilir veri miktarı, semantik modeli barındıran kapasite SKU'su sorgusu başına en yüksek bellek ile sınırlıdır. Spark sürücü düğümü (daha fazla bilgi için düğüm boyutlarını ziyaret edin) not defterini çalıştırır
    • Tüm istekler etkileşimli istekler olarak faturalandırılır
  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. Ayrıca bir DAX sorgusuyla müşterinin durumu ve tarihi başına Toplam Gelir ölçüsünü de değerlendirebilirsiniz.

    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:

  • fully_qualified_columns: "True" değeri için yöntemler formda sütun adlarını döndürür TableName[ColumnName]
  • num_rows: Sonuçta çıkış olarak elde edilen satır sayısı
  • pandas_convert_dtypes: "True" değeri için pandas, sonuçta elde edilen DataFrame sütunlarını mümkün olan en iyi dtypeconvert_dtypes dönüştürür. Bu parametre kapalıysa, ilgili tabloların sütunları arasındaki tür uyumsuzluk sorunları oluşabilir; DaX örtük tür dönüştürmesi nedeniyle Power BI modeli bu sorunları algılamayabilir

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

  • multiindex_hierarchies: "True" ise Power BI Hiyerarşilerini pandas MultiIndex yapısına dönüştürü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 örnekte, 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 modeliyle bileşik bir anlam modeline eklenebilir.