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 anlamsal modellerdeki ölçüleri değerlendirmeyi öğreneceksiniz. Ayrıca anlamsal modellerin kullanabileceği verileri yazmayı da öğreneceksiniz.

Önkoşullar

  • Microsoft Fabric'te Veri Bilimi deneyimine gidin.
  • Hücrelere kod kopyalamak/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 bir Lakehouse ekleyin.
  • Fabric-samples deposunun datasets klasöründen Customer Profitability Sample.pbix anlam modelini indirin ve anlam modelini yerel olarak kaydedin.

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

Bu makalede Customer Profitability Sample.pbix semantik modelini kullanacağız. Bu anlamsal model, pazarlama malzemeleri üreten bir şirkete başvurur ve çeşitli iş birimleri için ürünler, müşteriler ve buna karşılık gelen gelir hakkında veriler içerir.

  1. Çalışma alanınızı Doku Veri Bilimi'nde açın.
  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ıktan sonra çalışma alanınızda üç yeni yapıt bulunur: Power BI raporu, pano ve Customer Profitability Sample adlı anlam modeli. Bu makaledeki adımlar için bu anlam modelini kullanacaksınız.

Ç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 ve bunlar üzerinde sorgular 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 kodda 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
    

    Şimdi Müşteri tablosunun ilgilendiğiniz 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

  5. Müşterinin durumu ve tarihi başına Toplam Gelir ölçüsünü değerlendirin.

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

    Not

  6. Belirli bir sütunda bulunabilecek değerlerin listesini belirterek ölçü hesaplamasına filtre ekleyebilirsiniz.

    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 sorgusu kullanarak 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 (bkz. düğüm boyutları).
    • 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. Hücre sihrini kullanarak kitaplığı içeri aktarmanıza gerek kalmadan aynı DAX sorgusunu %%dax değerlendirebilirsiniz. Hücre sihrini yüklemek %%dax için aşağıdaki hücreyi çalıştıralım.

    %load_ext sempy
    

    Çalışma alanı parametresi isteğe bağlıdır ve işlevin çalışma alanı parametresiyle evaluate_dax aynı kuralları izler. Hücre sihri, söz dizimini kullanarak Python değişkenlerine {variable_name} erişimi de destekler. DAX sorgusunda küme ayracı kullanmak için, başka bir küme ayracıyla (örn. EVALUATE {{1}}) bu küme ayracından kurtulı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, son yürütülen hücrenin çıkışını yakalayan değişkeni aracılığıyla _ kullanılabilir.

    df_dax = _
    
    df_dax.head()
    
  9. Alternatif olarak, dış kaynaklardan alınan verilere ölçüler 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 ve ölçüyü filtreler. Belirli bir anlam modeli içinde çözümlenebilen tüm sütun adları yoksayılır (desteklenen DAX söz dizimine bakın).

    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: Değer "True" ise, yöntemler biçiminde TableName[ColumnName]sütun adları döndürür.
  • num_rows: Sonuçta çıkış olarak elde edilen satır sayısı.
  • pandas_convert_dtypes: Değer "True" ise, sonuçta elde edilen DataFrame sütunları pandas convert_dtypes kullanılarak mümkün olan en iyi dtype'a atılır. Bu parametre kapalıysa, tür uyumsuzluğu sorunları, DAX örtük tür dönüştürmesi nedeniyle Power BI modelinde algılanmamış olabilecek ilişkili tabloların sütunları arasında sonuçlanabilir.

SemPy read_table , Power BI tarafından sağlanan 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 kullanılarak, ForecastTable tablosu Lakehouse semantik modeli kullanılarak bileşik bir anlam modeline eklenebilir.