Udostępnij przez


Odczytywanie z modeli semantycznych i zapisywanie danych eksploatacyjnych przez usługę Power BI przy użyciu języka Python

W tym artykule nauczysz się odczytywać dane, metadane i oceniać miary w modelach semantycznych przy użyciu biblioteki języka Python SemPy w usłudze Microsoft Fabric. Dowiesz się również, jak zapisywać dane, z których mogą korzystać semantyczne modele.

Wymagania wstępne

  • Przejdź do środowiska nauki o danych w usłudze Microsoft Fabric.
  • Utwórz nowy notatnik, aby kopiować i wklejać kod do komórek.
  • W przypadku platformy Spark w wersji 3.4 lub nowszej link semantyczny jest dostępny w domyślnym środowisku uruchomieniowym podczas korzystania z Fabric i nie ma potrzeby jego instalowania. Jeśli używasz platformy Spark 3.3 lub nowszej albo chcesz zaktualizować do najnowszej wersji narzędzia Semantic Link, możesz uruchomić polecenie: python %pip install -U semantic-link
  • Dodaj Lakehouse do notesu
  • Pobierz model semantyczny Customer Profitability Sample.pbix z folderu datasets repozytorium fabric-samples i zapisz go lokalnie.

Prześlij model semantyczny do swojego obszaru roboczego

W tym artykule jest używany model semantyczny Customer Profitability Sample.pbix . Semantyczny model odwołuje się do firmy produkującej materiały marketingowe. Obejmuje ona dane dotyczące produktów, klientów i przychodów dla różnych jednostek biznesowych.

  1. Otwórz obszar roboczy w usłudze Fabric Data Science.
  2. Wybierz Importuj > Raport, Raport stronicowany lub Skoroszyt > z tego komputera, a następnie wybierz Customer Profitability Sample.pbix model semantyczny.

Zrzut ekranu przedstawiający interfejs przekazywania modelu semantycznego do obszaru roboczego.

Po zakończeniu przesyłania, obszar roboczy będzie zawierał trzy nowe elementy: raport Power BI, pulpit nawigacyjny oraz model semantyczny o nazwie Customer Profitability Sample. Kroki opisane w tym artykule opierają się na tym modelu semantycznym.

Zrzut ekranu przedstawiający elementy z pliku usługi Power BI przekazanego do obszaru roboczego.

Odczytywanie danych z modeli semantycznych przy użyciu języka Python

Interfejs API języka Python SemPy może pobierać dane i metadane z modeli semantycznych znajdujących się w obszarze roboczym usługi Microsoft Fabric. Interfejs API może również wykonywać na nich zapytania.

Twój notes, semantyczny model zestawu danych usługi Power BI i lakehouse mogą znajdować się w tym samym obszarze roboczym lub w różnych obszarach roboczych. Domyślnie program SemPy próbuje uzyskać dostęp do modelu semantycznego z:

  • Obszar roboczy jeziora danych, jeśli dołączyłeś jezioro danych do swojego notatnika.
  • Obszar roboczy twojego notesu, jeśli nie jest dołączony żaden lakehouse.

Jeśli model semantyczny nie znajduje się w jednym z tych obszarów roboczych, podczas wywoływania metody SemPy należy określić obszar roboczy modelu semantycznego.

Aby odczytać dane z modeli semantycznych, wykonaj następujące kroki:

  1. Wyświetl listę dostępnych modeli semantycznych w obszarze roboczym.

    import sempy.fabric as fabric
    
    df_datasets = fabric.list_datasets()
    df_datasets
    
  2. Wyświetl tabele dostępne w modelu semantycznym Customer Profitability Sample .

    df_tables = fabric.list_tables("Customer Profitability Sample", include_columns=True)
    df_tables
    
  3. Wymień miary zdefiniowane w semantycznym modelu przykładowym Customer Profitability.

    Wskazówka

    W poniższym przykładzie kodu określono obszar roboczy dla biblioteki SemPy, który ma być używany do uzyskiwania dostępu do modelu semantycznego. Możesz zastąpić <Your Workspace> nazwą obszaru roboczego, do którego przesłałeś model semantyczny (z sekcji Przesłać model semantyczny do obszaru roboczego).

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

    W tym miejscu ustaliliśmy, że tabela Klient jest tabelą, która nas interesuje.

  4. Przeczytaj tabelę Customer z Customer Profitability Sample modelu semantycznego.

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

    Uwaga

    • Dane są pobierane przy użyciu kodu XMLA, co wymaga włączenia co najmniej funkcji XMLA tylko do odczytu .
    • Ilość pobieranych danych jest ograniczona przez: — maksymalna ilość pamięci na zapytanie jednostki SKU pojemności, która hostuje model semantyczny. — Węzeł sterujący Spark, który uruchamia notebook (odwiedź stronę rozmiarów węzłów, aby uzyskać więcej informacji).
    • Wszystkie żądania używają niskiego priorytetu, aby zminimalizować wpływ na wydajność usług Microsoft Azure Analysis Services i są rozliczane jako żądania interakcyjne.
  5. Oceń miarę Total Revenue (Łączny przychód ) dla stanu i daty każdego klienta.

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

    Uwaga

  6. Aby dodać filtry do obliczenia miary, określ listę dopuszczalnych wartości dla określonej kolumny.

    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. Oceń miarę Total Revenue w odniesieniu do stanu i daty klientów za pomocą zapytania DAX.

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

    Uwaga

    • Dane są pobierane przy użyciu XMLA i dlatego wymaga włączenia co najmniej uprawnień XMLA tylko do odczytu.
    • Ilość danych możliwych do odzyskania jest ograniczona przez dostępną pamięć w Microsoft Azure Analysis Services i węźle sterującym Spark (odwiedź rozmiary węzłów, aby uzyskać więcej informacji)
    • Wszystkie żądania używają niskiego priorytetu, aby zminimalizować wpływ na wydajność usług Analysis Services i są rozliczane jako żądania interakcyjne
  8. Użyj funkcji magicznej komórki %%dax, aby ocenić to samo zapytanie DAX, bez konieczności importowania biblioteki. Uruchom tę komórkę, aby załadować %%dax magię komórek:

    %load_ext sempy
    

    Parametr obszaru roboczego jest opcjonalny. Jest zgodny z tymi samymi regułami co parametr obszaru roboczego evaluate_dax funkcji.

    Magia komórki obsługuje również dostęp do zmiennych języka Python ze składnią {variable_name} . Aby użyć nawiasu klamrowego w zapytaniu DAX, należy go poprzedzić drugim nawiasem klamrowym (na przykład: EVALUATE {{1}}).

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

    Wynikowy element FabricDataFrame jest dostępny za pośrednictwem zmiennej _ . Ta zmienna zapisuje dane wyjściowe ostatniej wykonanej komórki.

    df_dax = _
    
    df_dax.head()
    
  9. Miary można dodawać do danych pobranych ze źródeł zewnętrznych. To podejście łączy trzy zadania:

    • Przypisuje nazwy kolumn do wymiarów w Power BI
    • Definiuje grupowanie według kolumn
    • Filtruje ona miarę Wszystkie nazwy kolumn, których nie można rozpoznać w danym modelu semantycznym, są ignorowane (odwiedź obsługiwany zasób składni języka DAX, aby uzyskać więcej informacji).
    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
    

Specjalne parametry

Metody SemPy read_table i evaluate_measure mają więcej parametrów, które są przydatne do manipulowania wynikiem. Te parametry obejmują:

  • pandas_convert_dtypes: Jeśli ustawiono wartość True, biblioteka pandas rzutuje wynikowe kolumny DataFrame na najlepszy możliwy typ danych. Dowiedz się więcej w convert_dtypes. Jeśli ten parametr jest wyłączony, mogą wystąpić problemy z niezgodnością typów między kolumnami powiązanych tabel. Model usługi Power BI może nie wykryć tych problemów z powodu niejawnej konwersji typu DAX.

Oprogramowanie SemPy read_table używa również informacji o modelu, które udostępnia usługa Power BI.

Zapisywanie danych do wykorzystania przez modele semantyczne

Tabele platformy Spark dodane do usługi Lakehouse są automatycznie dodawane do odpowiedniego domyślnego modelu semantycznego. W tym artykule pokazano, jak zapisywać dane do podłączonego Lakehouse. FabricDataFrame akceptuje te same dane wejściowe co ramki danych Pandas.

from sempy.fabric import FabricDataFrame

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

df_forecast.to_lakehouse_table("ForecastTable")

Za pomocą usługi Power BI tabela ForecastTable można dodać do złożonego modelu semantycznego, który zawiera semantyczny model lakehouse.