Odczytywanie z modeli semantycznych i zapisywanie danych eksploatacyjnych przez usługę Power BI przy użyciu języka Python
Z tego artykułu dowiesz się, jak odczytywać dane i metadane oraz 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ć modele semantyczne.
Wymagania wstępne
Uzyskaj subskrypcję usługi Microsoft Fabric. Możesz też utworzyć konto bezpłatnej wersji próbnej usługi Microsoft Fabric.
Zaloguj się do usługi Microsoft Fabric.
Użyj przełącznika środowiska po lewej stronie głównej, aby przełączyć się na środowisko usługi Synapse Nauka o danych.
- Odwiedź środowisko Nauka o danych w usłudze Microsoft Fabric.
- Tworzenie nowego notesu w celu skopiowania/wklejania kodu 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 sieci szkieletowej i nie ma potrzeby jej 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
- Dodawanie usługi Lakehouse do notesu
- Pobierz model semantyczny Customer Profitability Sample.pbix z folderu datasets repozytorium fabric-samples i zapisz model semantyczny lokalnie
Przekazywanie modelu semantycznego do obszaru roboczego
W tym artykule jest używany model semantyczny Customer Profitability Sample.pbix . Ten semantyczny model odwołuje się do materiałów marketingowych firmy. Zawiera on dane dotyczące produktów, klientów i odpowiednich przychodów dla różnych jednostek biznesowych.
- Otwieranie obszaru roboczego w usłudze Fabric Nauka o danych
- Wybierz pozycję Przekaż > przeglądaj i wybierz semantyczny model Customer Profitability Sample.pbix .
Po zakończeniu przekazywania obszar roboczy ma trzy nowe artefakty: raport usługi Power BI, pulpit nawigacyjny i semantyczny model o nazwie Customer Profitability Sample. Kroki opisane w tym artykule opierają się na tym modelu semantycznym.
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.
Notes, semantyczny model zestawu danych usługi Power BI i usługa 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 lakehouse, jeśli do notesu dołączono magazyn lakehouse.
- Obszar roboczy notesu, jeśli nie ma dołączonego magazynu 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:
Wyświetl listę dostępnych modeli semantycznych w obszarze roboczym.
import sempy.fabric as fabric df_datasets = fabric.list_datasets() df_datasets
Wyświetl tabele dostępne w modelu semantycznym Customer Profitability Sample .
df_tables = fabric.list_tables("Customer Profitability Sample", include_columns=True) df_tables
Wyświetl listę miar zdefiniowanych w modelu semantycznym przykładu Customer Profitability .
Napiwek
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
ciąg nazwą obszaru roboczego, w którym został przekazany model semantyczny (z sekcji Przekaż 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 Customer (Klient ) jest tabelą zainteresowań.
Przeczytaj tabelę Customer (Klient) z modelu semantycznego Customer Profitability Sample.
df_table = fabric.read_table("Customer Profitability Sample", "Customer") df_table
Uwaga
- Dane są pobierane przy użyciu kodu XMLA. Wymaga to włączenia co najmniej funkcji XMLA tylko do odczytu.
- Ilość pobieranych danych jest ograniczona przez — maksymalną ilość pamięci na zapytanie jednostki SKU pojemności, która hostuje model semantyczny — węzeł sterownika Platformy Spark (odwiedź rozmiary węzłów , aby uzyskać więcej informacji) uruchamiający notes
- Wszystkie żądania używają niskiego priorytetu, aby zminimalizować wpływ na wydajność usług Microsoft Azure Analysis Services i są rozliczane jako żądania interakcyjne.
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
- Domyślnie dane nie są pobierane przy użyciu formatu XMLA i dlatego nie wymagają włączenia tylko do odczytu XMLA.
- Dane nie podlegają ograniczeniom zaplecza usługi Power BI.
- Ilość pobieranych danych jest ograniczona przez — maksymalną ilość pamięci na zapytanie jednostki SKU pojemności obsługującej model semantyczny — węzeł sterownika platformy Spark (odwiedź rozmiary węzłów , aby uzyskać więcej informacji), który uruchamia notes
- Wszystkie żądania są rozliczane jako żądania interakcyjne
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
Możesz również ocenić miarę Łączny przychód na stan i datę klienta za pomocą zapytania języka 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 formatu XMLA tylko do odczytu
- Ilość danych do pobrania jest ograniczona przez dostępną pamięć w usługach Microsoft Azure Analysis Services i węźle sterownika Spark (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 Analysis Services i są rozliczane jako żądania interakcyjne
%%dax
Użyj magii komórki, aby ocenić to samo zapytanie języka 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 języka DAX, należy go użyć innego nawiasu klamrowego (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 przechwytuje dane wyjściowe ostatniej wykonanej komórki.df_dax = _ df_dax.head()
Miary można dodawać do danych pobranych ze źródeł zewnętrznych. To podejście łączy trzy zadania:
- Rozpoznaje nazwy kolumn w wymiarach usługi 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
Pliki SemPy read_table
i evaluate_measure
metody mają więcej parametrów, które są przydatne do manipulowania danymi wyjściowymi. Te parametry obejmują:
fully_qualified_columns
: Dla wartości "True" metody zwracają nazwy kolumn w formularzuTableName[ColumnName]
num_rows
: liczba wierszy do danych wyjściowych w wynikupandas_convert_dtypes
: W przypadku wartości "True" biblioteka pandas rzutuje wynikowe kolumny ramki danych na najlepszy możliwy typconvert_dtypes. Jeśli ten parametr jest wyłączony, mogą wynikać problemy z niezgodnością między kolumnami powiązanych tabel; model usługi Power BI może nie wykryć tych problemów z powodu niejawnej konwersji typu języka DAX
Oprogramowanie SemPy read_table
używa również informacji o modelu, które udostępnia usługa Power BI.
multiindex_hierarchies
: Jeśli wartość "True", konwertuje hierarchie usługi Power BI na strukturę pandas MultiIndex
Zapisywanie danych eksploatacyjnych przez modele semantyczne
Tabele platformy Spark dodane do usługi Lakehouse są automatycznie dodawane do odpowiedniego domyślnego modelu semantycznego. W tym przykładzie pokazano, jak zapisywać dane w dołączonej usłudze Lakehouse. Element FabricDataFrame akceptuje te same dane wejściowe co ramki danych biblioteki 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 z semantycznym modelem lakehouse.