Čtení ze sémantických modelů a zápis dat využitých v Power BI
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.
Důležité
Tato funkce je ve verzi Preview.
Předpoklady
Získejte předplatné Microsoft Fabric. Nebo si zaregistrujte bezplatnou zkušební verzi Microsoft Fabric.
Přihlaste se k Microsoft Fabric.
Přepněte na Datová Věda prostředí pomocí ikony přepínače prostředí na levé straně domovské stránky.
- Přejděte do prostředí Datová Věda v Microsoft Fabric.
- Vytvořte nový poznámkový blok pro zkopírování nebo vložení kódu do buněk.
- Nainstalujte knihovnu Pythonu
SemPy
do jádra poznámkového bloku spuštěním tohoto kódu v buňce poznámkového bloku:%pip install semantic-link
- Přidejte do poznámkového bloku Lakehouse.
- 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
V tomto článku používáme sémantický model Customer Profitability Sample.pbix . Tento sémantický model odkazuje na marketingové materiály společnosti a obsahuje data o produktech, zákaznících a odpovídajících výnosech pro různé obchodní jednotky.
- Otevřete pracovní prostor 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í bude mít váš pracovní prostor tři nové artefakty: sestavu Power BI, řídicí panel a sémantický model s názvem Customer Profitability Sample. Tento sémantický model použijete pro kroky v tomto článku.
Čtení dat z sémantických modelů pomocí Pythonu
Rozhraní API SemPy Pythonu může načítat data a metadata z sémantických modelů umístěných v pracovním prostoru Microsoft Fabric a spouštět na ně dotazy.
Poznámkový blok, sémantický model (datová sada 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 Lakehouse.
- pokud není připojený žádný lakehouse, pracovní prostor poznámkového bloku.
Pokud se váš sémantický model nenachází ve výchozím pracovním prostoru, ke kterému se SemPy pokouší získat přístup, 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.
# %pip and import only needs to be done once per notebook %pip install semantic-link 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 .
# %pip and import only needs to be done once per notebook %pip install semantic-link import sempy.fabric as fabric 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ím kódu jsme pro SemPy zadali pracovní prostor, 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ání sémantického modelu do pracovního prostoru](#upload-the-sémantický model-into-your-workspace).# %pip and import only needs to be done once per notebook %pip install semantic-link import sempy.fabric as fabric df_measures = fabric.list_measures("Customer Profitability Sample", workspace="Your Workspace")
Teď jsme zjistili, že tabulka Zákazník je tabulka zájmu.
Přečtěte si tabulku Customer z sémantického modelu Customer Profitability Sample.
# %pip and import only needs to be done once per notebook %pip install semantic-link import sempy.fabric as fabric df_table = fabric.read_table("Customer Profitability Sample", "Customer") df_table
Poznámka:
Data se načítají pomocí XMLA, a proto vyžadují, aby byla povolena alespoň funkce XMLA jen pro čtení. Množství dat, která se dají načíst, je omezené maximální pamětí na dotaz skladové položky kapacity hostující sémantický model a uzlem ovladače Sparku (viz velikosti 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 Celkové výnosy podle stavu a data zákazníka.
# %pip and import only needs to be done once per notebook %pip install semantic-link import sempy.fabric as fabric 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í. Data navíc nejsou předmětem omezení back-endu Power BI. Množství dat, která se dají načíst, je omezené maximální pamětí na dotaz skladové položky kapacity hostující sémantický model a uzlem ovladače Sparku (viz velikosti uzlů), na kterém je spuštěný poznámkový blok. Všechny žádosti se účtují jako interaktivní žádosti.
Filtry můžete do výpočtu míry přidat zadáním seznamu hodnot, které můžou být v určitém sloupci.
# %pip and import only needs to be done once per notebook %pip install semantic-link import sempy.fabric as fabric 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.
# %pip and import only needs to be done once per notebook %pip install semantic-link import sempy.fabric as fabric 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í. Objem načítání dat je omezený dostupnou pamětí ve službě Microsoft Azure Analysis Services a uzlem ovladače Sparku (viz velikosti 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.
Stejný dotaz DAX můžete vyhodnotit bez nutnosti importovat knihovnu
%%dax
pomocí magie buňky. Parametr pracovního prostoru je volitelný a řídí se stejnými pravidly jako parametrevaluate_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 (např.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é, která zachycuje výstup poslední spuštěné buňky.df_dax = _ df_dax.head()
Případně můžete přidat míry k datům načteným z externích zdrojů. Tento přístup kombinuje tři úlohy: překládá názvy sloupců na dimenze Power BI, definuje seskupení podle sloupců a filtruje míru. Všechny názvy sloupců, které nelze vyřešit v rámci daného sémantického modelu, se ignorují (viz podporovaná syntaxe jazyka DAX).
# %pip and import only needs to be done once per notebook %pip install semantic-link 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")
Čtení dat pomocí Sparku v Pythonu, R, SQL a Scala
Stejně jako u rozhraní SemPy python API ve výchozím nastavení je pracovní prostor používaný pro přístup k sémantickým modelům následující:
- pracovní prostor připojeného lakehouse nebo
- pokud není připojený žádný lakehouse, pracovní prostor poznámkového bloku.
Microsoft Fabric zveřejňuje všechny tabulky ze všech sémantických modelů v pracovním prostoru jako tabulky Sparku. Všechny příkazy Spark SQL je možné spouštět v Pythonu, R a Scala. Sémantický odkaz (Preview) Nativní konektor Sparku podporuje nabízení změn predikátů Sparku do modulu Power BI.
Tip
Vzhledem k tomu, že tabulky a míry Power BI jsou vystavené jako běžné tabulky Sparku, je možné je spojit s jinými zdroji dat Sparku v jednom dotazu.
Nakonfigurujte Spark tak, aby používal nativní konektor Power BI Spark:
spark.conf.set("spark.sql.catalog.pbi", "com.microsoft.azure.synapse.ml.powerbi.PowerBICatalog") # Optionally, configure the workspace ID for the Power BI catalog # spark.conf.set("spark.sql.catalog.pbi.workspace", "212598c9-a3bf-441e-a6f2-2034281e7f18")
Tip
Sémantický odkaz (Preview) Nativní konektor Sparku je předinstalovaný v prostředcích infrastruktury a nevyžaduje instalaci knihovny Pythonu
SemPy
. Několik pracovních prostorů Power BI můžete nakonfigurovat přidáním více položek katalogu (např. spark.sql.catalog.my_pbi).Vypíše tabulky všech sémantických modelů v pracovním prostoru pomocí PySparku.
df = spark.sql("SHOW TABLES FROM pbi") df
Načtěte data z tabulky Customer (Zákazník) v sémantickém modelu Ukázka ziskovosti zákazníků pomocí SparkR.
Poznámka:
Načítání tabulek podléhá striktním omezením (viz Omezení čtení) a výsledky můžou být neúplné. Pomocí agregovaného odsdílení změn snižte objem přenášených dat. Mezi podporované agregace patří: COUNT, SUM, AVG, MIN a MAX.
%%sparkr df = sql("SELECT * FROM pbi.`Customer Profitability Sample`.Customer") df
Míry Power BI jsou dostupné prostřednictvím virtuální tabulky _Metrics. Následující dotaz vypočítá celkový výnos a rozpočet výnosů podle oblastí a odvětví.
%%sql SELECT `Customer[Country/Region]`, `Industry[Industry]`, AVG(`Total Revenue`), AVG(`Revenue Budget`) FROM pbi.`Customer Profitability Sample`.`_Metrics` WHERE `Customer[State]` in ('CA', 'WA') GROUP BY `Customer[Country/Region]`, `Industry[Industry]`
Zkontrolujte dostupné míry a dimenze pomocí schématu Sparku.
spark.table("pbi.`Customer Profitability Sample`._Metrics").printSchema()
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
: Pokud je hodnota True, vrátí metody názvy sloupců ve formulářiTableName[ColumnName]
.num_rows
: Počet řádků pro výstup ve výsledku.pandas_convert_dtypes
: Pokud je hodnota True, výsledné sloupce datového rámce se přetypují na nejlepší možný typ dtype pomocí knihovny pandas convert_dtypes. Pokud je tento parametr vypnutý, problémy s nekompatibilitou typu můžou mít za následek mezi sloupci souvisejících tabulek, které v modelu Power BI nebyly zjištěny kvůli implicitní převodu typu DAX.
SemPy read_table
také používá informace o modelu poskytované Power BI.
multiindex_hierarchies
: Pokud je hodnota True, převede hierarchie Power BI na strukturu pandas MultiIndex.
Omezení přístupu pro čtení
Rozhraní API pro čtení mají následující omezení:
- Přístup k tabulce Power BI pomocí Spark SQL podléhá omezením back-endu Power BI.
- Predikát pushdownu pro dotazy Sparku _Metrics je omezený na jeden výraz IN . Výrazy IN a nepodporované predikáty se po přenosu dat vyhodnocují ve Sparku.
- Predikát pro tabulky Power BI, ke které se přistupuje pomocí Spark SQL, nepodporuje následující výrazy:
- Relace Sparku se musí restartovat, aby byly nové sémantické modely přístupné ve Spark SQL.
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")
Pomocí Power BI lze tabulku ForecastTable přidat do složeného sémantického modelu pomocí sémantického modelu Lakehouse.
Další kroky
Váš názor
Odeslat a zobrazit názory pro