Bagikan melalui


Membaca dari model semantik dan menulis data yang dapat dikonsumsi oleh Power BI menggunakan Python

Dalam artikel ini, Anda belajar membaca data, metadata, dan mengevaluasi langkah-langkah dalam model semantik menggunakan pustaka SemPy Python di Microsoft Fabric. Anda juga belajar menulis data yang dapat dikonsumsi model semantik.

Prasyarat

  • Buka pengalaman Ilmu Data di Microsoft Fabric.
  • Buat buku catatan baru untuk menyalin dan menempelkan kode ke dalam sel.
  • Untuk Spark 3.4 ke atas, tautan Semantic tersedia dalam runtime default saat menggunakan Fabric, dan tidak perlu menginstalnya. Jika Anda menggunakan Spark 3.3 atau yang lebih baru, atau jika Anda ingin memperbarui ke versi Terbaru Semantic Link, Anda dapat menjalankan perintah: python %pip install -U semantic-link
  • Menambahkan Lakehouse ke buku catatan Anda
  • Unduh model semantik Customer Profitability Sample.pbix dari folder himpunan data repositori fabric-samples dan simpan secara lokal.

Mengunggah model semantik ke ruang kerja Anda

Artikel ini menggunakan model semantik Customer Profitability Sample.pbix . Model semantik mereferensikan perusahaan yang memproduksi materi pemasaran. Ini termasuk data produk, pelanggan, dan pendapatan untuk unit bisnis yang berbeda.

  1. Buka ruang kerja Anda di Fabric Data Science.
  2. Pilih Impor > Laporan, Laporan Paginasi, atau Buku Kerja > Dari komputer ini, dan pilih model semantik Customer Profitability Sample.pbix .

Cuplikan layar antarmuka untuk mengunggah model semantik ke ruang kerja.

Setelah unggahan selesai, ruang kerja Anda menyertakan tiga artefak baru: laporan Power BI, dasbor, dan model semantik bernama Sampel Profitabilitas Pelanggan. Langkah-langkah dalam artikel ini mengandalkan model semantik ini.

Cuplikan layar item dari file Power BI yang diunggah ke ruang kerja.

Menggunakan Python untuk membaca data dari model semantik

API Python SemPy dapat mengambil data dan metadata dari model semantik yang terletak di ruang kerja Microsoft Fabric. API juga dapat melakukan pemintaan pada data.

Notebook, model semantik himpunan data Power BI, dan lakehouse Anda dapat berada di ruang kerja yang sama atau di ruang kerja yang berbeda. Secara default, SemPy mencoba mengakses model semantik Anda dari:

  • Ruang kerja lakehouse Anda, jika Anda menautkan lakehouse ke buku catatan Anda.
  • Ruang kerja buku catatan Anda, jika tidak ada lakehouse yang terpasang.

Jika model semantik Anda tidak terletak di salah satu ruang kerja ini, Anda harus menentukan ruang kerja model semantik Anda saat memanggil metode SemPy.

Untuk membaca data dari model semantik, ikuti langkah-langkah berikut:

  1. Cantumkan model semantik yang tersedia di ruang kerja Anda.

    import sempy.fabric as fabric
    
    df_datasets = fabric.list_datasets()
    df_datasets
    
  2. Cantumkan tabel yang tersedia dalam model semantik Sampel Profitabilitas Pelanggan.

    df_tables = fabric.list_tables("Customer Profitability Sample", include_columns=True)
    df_tables
    
  3. Cantumkan langkah-langkah yang ditentukan dalam model semantik Sampel Profitabilitas Pelanggan.

    Tips

    Dalam sampel kode berikut, kami menentukan ruang kerja yang digunakan SemPy untuk mengakses model semantik. Anda dapat mengganti <Your Workspace> dengan nama ruang kerja tempat Anda mengunggah model semantik (dari bagian Unggah model semantik ke ruang kerja Anda).

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

    Di sini, kami menentukan bahwa tabel Pelanggan adalah tabel yang menarik.

  4. Baca tabel Pelanggan dari model semantik Sampel Profitabilitas Pelanggan.

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

    Catatan

    • Data diambil menggunakan XMLA, yang mengharuskan setidaknya XMLA hanya baca untuk diaktifkan.
    • Jumlah data yang dapat diambil dibatasi oleh: - Memori maksimum untuk setiap kueri dari SKU kapasitas yang menjadi host model semantik. - Simpul driver Spark (kunjungi ukuran simpul untuk informasi lebih lanjut) yang menjalankan notebook.
    • Semua permintaan menggunakan prioritas rendah untuk meminimalkan dampak pada performa Microsoft Azure Analysis Services dan ditagih sebagai permintaan interaktif.
  5. Evaluasi ukuran Total Pendapatan untuk status dan tanggal setiap pelanggan.

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

    Catatan

    • Secara default, data tidak diambil menggunakan XMLA, sehingga XMLA baca-saja tidak perlu diaktifkan.
    • Data tidak tunduk pada batasan backend Power BI.
    • Jumlah data yang dapat diambil dibatasi oleh: - memori maksimum per kueri dari model semantik yang dihosting oleh SKU kapasitas. - Simpul driver Spark (kunjungi ukuran simpul untuk informasi lebih lanjut) yang menjalankan notebook.
    • Semua permintaan ditagih sebagai permintaan interaktif.
    • Fungsi evaluate_dax ini tidak menyegarkan model semantik secara otomatis. Kunjungi halaman ini untuk detail selengkapnya.
  6. Untuk menambahkan filter ke perhitungan pengukuran, tentukan daftar nilai yang diizinkan untuk kolom tertentu.

    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. Evaluasi ukuran Total Pendapatan per status dan tanggal pelanggan dengan kueri DAX.

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

    Catatan

    • Data diambil menggunakan XMLA dan oleh karena itu mengharuskan setidaknya XMLA baca-saja untuk diaktifkan
    • Jumlah data yang dapat diambil dibatasi oleh memori yang tersedia di Microsoft Azure Analysis Services dan simpul driver Spark (kunjungi ukuran simpul untuk informasi lebih lanjut)
    • Semua permintaan menggunakan prioritas rendah untuk meminimalkan dampak pada performa Analysis Services dan ditagih sebagai permintaan interaktif
  8. %%dax Gunakan sihir sel untuk mengevaluasi kueri DAX yang sama, tanpa perlu mengimpor pustaka. Jalankan sel ini untuk memuat %%dax sihir sel:

    %load_ext sempy
    

    Parameter ruang kerja bersifat opsional. Ini mengikuti aturan yang sama dengan parameter fungsi evaluate_dax ruang kerja.

    Sihir sel juga mendukung akses variabel Python dengan {variable_name} sintaks. Untuk menggunakan kurung kurawal dalam kueri DAX, tambahkan kurung kurawal lain (misalnya: EVALUATE {{1}}).

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

    FabricDataFrame yang dihasilkan tersedia melalui _ variabel . Variabel tersebut memuat output dari sel terakhir yang dijalankan.

    df_dax = _
    
    df_dax.head()
    
  9. Anda dapat menambahkan pengukuran ke data yang diambil dari sumber eksternal. Pendekatan ini menggabungkan tiga tugas:

    • Ini mengaitkan nama kolom ke dimensi Power BI
    • Ini menentukan grup menurut kolom
    • Ini memfilter pengukuran Nama kolom apa pun yang tidak dapat diselesaikan dalam model semantik yang diberikan diabaikan (kunjungi sumber daya sintaks DAX yang didukung untuk informasi selengkapnya).
    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
    

Parameter khusus

SemPy read_table dan evaluate_measure metode memiliki lebih banyak parameter yang berguna untuk memanipulasi output. Parameter ini meliputi:

  • pandas_convert_dtypes: Jika diatur ke True, pandas akan mengonversi kolom DataFrame yang dihasilkan ke dtype terbaik. Pelajari selengkapnya di convert_dtypes. Jika parameter ini dinonaktifkan, masalah ketidakcocokan tipe antara kolom tabel terkait mungkin terjadi. Model Power BI mungkin tidak mendapati isu ini karena konversi jenis implisit DAX.

SemPy read_table juga menggunakan informasi model yang disediakan Power BI.

  • multiindex_hierarchies: Jika diatur ke True, ini mengonversi hierarki Power BI ke struktur MultiIndex pandas.

Menulis data yang dapat dikonsumsi oleh model semantik

Tabel Spark yang ditambahkan ke Lakehouse secara otomatis ditambahkan ke model semantik default yang sesuai. Artikel ini menunjukkan bagaimana cara menulis data ke dalam Lakehouse yang terlampir. FabricDataFrame menerima data input yang sama dengan dataframe Pandas.

from sempy.fabric import FabricDataFrame

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

df_forecast.to_lakehouse_table("ForecastTable")

Dengan Power BI, tabel ForecastTable dapat ditambahkan ke model semantik komposit yang menyertakan model semantik Lakehouse.