Čtení ze sémantických modelů a zápis dat použitelných v Power BI pomocí Pythonu
V tomto článku se dozvíte, jak číst data a metadata a vyhodnocovat míry v sémantických modelech pomocí knihovny SemPy Python v Microsoft Fabric. Naučíte se také psát data, která můžou sémantické modely využívat.
Požadavky
Získejte předplatné Microsoft Fabric. Nebo si zaregistrujte bezplatnou zkušební verzi Microsoft Fabricu.
Přihlaste se k Microsoft Fabric.
Pomocí přepínače zkušeností v levém dolním rohu domovské stránky přepněte na Fabric.
- Navštivte Datová Věda prostředí v Microsoft Fabric.
- Vytvoření nového poznámkového bloku pro zkopírování nebo vložení kódu do buněk
- Pro Spark 3.4 a vyšší je sémantický odkaz dostupný ve výchozím modulu runtime při použití prostředků infrastruktury a není potřeba ho nainstalovat. Pokud používáte Spark 3.3 nebo novější nebo pokud chcete aktualizovat na nejnovější verzi sémantického odkazu, můžete tento příkaz spustit:
python %pip install -U semantic-link
- Přidání lakehouse do poznámkového bloku
- Stáhněte si sémantický model Customer Profitability Sample.pbix ze složky datových sad úložiště ukázek prostředků infrastruktury a uložte sémantický model místně.
Nahrání sémantického modelu do pracovního prostoru
Tento článek používá sémantický model Customer Profitability Sample.pbix . Tento sémantický model odkazuje na marketingové materiály společnosti. Obsahuje údaje o produktech, zákaznících a odpovídajících výnosech pro různé obchodní jednotky.
- Otevření pracovního prostoru v Datová Věda Fabric
- Vyberte Nahrát > procházet a vyberte sémantický model Customer Profitability Sample.pbix .
Po dokončení nahrávání má váš pracovní prostor tři nové artefakty: sestavu Power BI, řídicí panel a sémantický model s názvem Customer Profitability Sample. Kroky v tomto článku se spoléhají na tento sémantický model.
Čtení dat z sémantických modelů pomocí Pythonu
Rozhraní API Pythonu SemPy může načítat data a metadata z sémantických modelů umístěných v pracovním prostoru Microsoft Fabric. Rozhraní API na ně může také spouštět dotazy.
Poznámkový blok, sémantický model datové sady Power BI a lakehouse se dají nacházet ve stejném pracovním prostoru nebo v různých pracovních prostorech. Ve výchozím nastavení se SemPy pokusí o přístup k sémantickému modelu z:
- Pokud jste k poznámkovému bloku připojili lakehouse pracovní prostor jezera.
- Pokud není připojený žádný lakehouse, pracovní prostor poznámkového bloku
Pokud se váš sémantický model nenachází v některém z těchto pracovních prostorů, musíte při volání metody SemPy zadat pracovní prostor sémantického modelu.
Čtení dat z sémantických modelů:
Vypište dostupné sémantické modely v pracovním prostoru.
import sempy.fabric as fabric df_datasets = fabric.list_datasets() df_datasets
Zobrazí seznam tabulek dostupných v sémantickém modelu Customer Profitability Sample .
df_tables = fabric.list_tables("Customer Profitability Sample", include_columns=True) df_tables
Uveďte míry definované v sémantickém modelu Ukázka ziskovosti zákazníků.
Tip
V následující ukázce kódu jsme zadali pracovní prostor pro SemPy, který se má použít pro přístup k sémantickému modelu. Můžete nahradit
Your Workspace
názvem pracovního prostoru, do kterého jste nahráli sémantický model (z části Nahrát sémantický model do oddílu pracovního prostoru ).df_measures = fabric.list_measures("Customer Profitability Sample", workspace="Your Workspace") df_measures
V této části jsme zjistili, že tabulka Customer (Zákazník) je tabulka zájmu.
Přečtěte si tabulku Customer z sémantického modelu Customer Profitability Sample.
df_table = fabric.read_table("Customer Profitability Sample", "Customer") df_table
Poznámka:
- Data se načítají pomocí XMLA. To vyžaduje, aby byla povolena alespoň funkce XMLA jen pro čtení.
- Množství načítaných dat je omezené – maximální paměť na dotaz skladové položky kapacity, která hostuje sémantický model – uzel ovladače Sparku ( další informace najdete v velikostech uzlů), na kterém je spuštěný poznámkový blok.
- Všechny požadavky používají nízkou prioritu k minimalizaci dopadu na výkon služby Microsoft Azure Analysis Services a účtují se jako interaktivní požadavky.
Vyhodnoťte míru Total Revenue (Celkové výnosy ) pro stav a datum každého zákazníka.
df_measure = fabric.evaluate_measure( "Customer Profitability Sample", "Total Revenue", ["'Customer'[State]", "Calendar[Date]"]) df_measure
Poznámka:
- Ve výchozím nastavení se data nenačítají pomocí XMLA, a proto nevyžadují povolení XMLA jen pro čtení.
- Na data se nevztahujíomezení back-endu Power BI.
- Množství načístelných dat je omezené – maximální paměť na dotaz skladové položky kapacity hostující sémantický model – uzel ovladače Sparku (další informace najdete v velikostech uzlů), na kterém je spuštěný poznámkový blok.
- Všechny žádosti se účtují jako interaktivní žádosti.
Pokud chcete do výpočtu míry přidat filtry, zadejte seznam povolených hodnot pro určitý sloupec.
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
Pomocí dotazu DAX můžete také vyhodnotit míru Celkové výnosy podle stavu a data zákazníka.
df_dax = fabric.evaluate_dax( "Customer Profitability Sample", """ EVALUATE SUMMARIZECOLUMNS( 'State'[Region], 'Calendar'[Date].[Year], 'Calendar'[Date].[Month], "Total Revenue", CALCULATE([Total Revenue])) """)
Poznámka:
- Data se načítají pomocí XMLA, a proto vyžadují, aby byla povolena alespoň funkce XMLA jen pro čtení.
- Množství načístelných dat je omezené dostupnou pamětí ve službě Microsoft Azure Analysis Services a uzlem ovladače Spark (další informace najdete v velikostech uzlů).
- Všechny požadavky používají nízkou prioritu k minimalizaci dopadu na výkon služby Analysis Services a účtují se jako interaktivní požadavky.
%%dax
Pomocí magic buňky vyhodnoťte stejný dotaz DAX, aniž byste museli knihovnu importovat. Spusťte tuto buňku pro načtení%%dax
magie buněk:%load_ext sempy
Parametr pracovního prostoru je volitelný. Řídí se stejnými pravidly jako parametr
evaluate_dax
pracovního prostoru funkce.Magie buňky také podporuje přístup k proměnným Pythonu
{variable_name}
pomocí syntaxe. Pokud chcete v dotazu DAX použít složenou závorku, uchytáte ji jinou složenou závorkou (příklad:EVALUATE {{1}}
).%%dax "Customer Profitability Sample" -w "Your Workspace" EVALUATE SUMMARIZECOLUMNS( 'State'[Region], 'Calendar'[Date].[Year], 'Calendar'[Date].[Month], "Total Revenue", CALCULATE([Total Revenue]))
Výsledný objekt FabricDataFrame je k dispozici prostřednictvím
_
proměnné. Tato proměnná zachycuje výstup poslední spuštěné buňky.df_dax = _ df_dax.head()
Míry můžete přidat k datům načteným z externích zdrojů. Tento přístup kombinuje tři úkoly:
- Překládá názvy sloupců na dimenze Power BI.
- Definuje seskupení podle sloupců.
- Filtruje míru Všechny názvy sloupců, které nelze vyřešit v rámci daného sémantického modelu, jsou ignorovány (další informace najdete v podporovaném prostředku syntaxe JAZYKA DAX).
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
Speciální parametry
SemPy read_table
a evaluate_measure
metody mají více parametrů, které jsou užitečné pro manipulaci s výstupem. Mezi tyto parametry patří:
-
fully_qualified_columns
: Pro hodnotu True vrátí metody názvy sloupců ve formuláři.TableName[ColumnName]
-
num_rows
: Počet řádků pro výstup ve výsledku -
pandas_convert_dtypes
: U hodnoty True přetypuje knihovna pandas výsledné sloupce datového rámce na nejlepší možný typ dtypeconvert_dtypes. Pokud je tento parametr vypnutý, může dojít k problémům s nekompatibilitou typu mezi sloupci souvisejících tabulek; Model Power BI nemusí tyto problémy rozpoznat kvůli implicitní převodu typu DAX
SemPy read_table
také používá informace o modelu, které Power BI poskytuje.
-
multiindex_hierarchies
: Pokud má hodnotu True, převede hierarchie Power BI na strukturu pandas MultiIndex.
Zápis dat použitelných pomocí sémantických modelů
Tabulky Sparku přidané do Lakehouse se automaticky přidají do odpovídajícího výchozího sémantického modelu. Tento příklad ukazuje, jak zapisovat data do připojeného Lakehouse. FabricDataFrame přijímá stejná vstupní data jako datové rámce Pandas.
from sempy.fabric import FabricDataFrame
df_forecast = FabricDataFrame({'ForecastedRevenue': [1, 2, 3]})
df_forecast.to_lakehouse_table("ForecastTable")
V Power BI je možné tabulku ForecastTable přidat do složeného sémantického modelu sémantickým modelem Lakehouse.