Læs fra semantiske modeller, og skriv data, der kan forbruges af Power BI, ved hjælp af python
I denne artikel lærer du, hvordan du læser data og metadata og evaluerer målinger i semantiske modeller ved hjælp af SemPy Python-biblioteket i Microsoft Fabric. Du kan også få mere at vide om, hvordan du skriver data, som semantiske modeller kan forbruge.
Forudsætninger
Få et Microsoft Fabric-abonnement. Du kan også tilmelde dig en gratis Prøveversion af Microsoft Fabric.
Brug oplevelsesskifteren i venstre side af startsiden til at skifte til Synapse Data Science-oplevelsen.
- Besøg datavidenskabsoplevelsen i Microsoft Fabric.
- Opret en ny notesbog for at kopiere/indsætte kode i celler
- For Spark 3.4 og nyere er Semantic-link tilgængeligt i standardkørslen, når du bruger Fabric, og det er ikke nødvendigt at installere det. Hvis du bruger Spark 3.3 eller nedenfor, eller hvis du vil opdatere til den nyeste version af Semantic Link, kan du køre kommandoen:
python %pip install -U semantic-link
- Føj et Lakehouse til din notesbog
- Download semantikmodellen Customer Profitability Sample.pbix fra datasætmappen i lageret med stofeksempler, og gem den semantiske model lokalt
Overfør den semantiske model til dit arbejdsområde
I denne artikel bruges semantikmodellen Customer Profitability Sample.pbix . Denne semantiske model refererer til en virksomhed, der producerer marketingmaterialer. Den indeholder data om produkt, kunde og tilsvarende omsætning for forskellige forretningsenheder.
- Åbn dit arbejdsområde i Fabric Data Science
- Vælg Upload > Gennemse, og vælg den semantiske model Customer Profitability Sample.pbix .
Når overførslen er fuldført, har dit arbejdsområde tre nye artefakter: en Power BI-rapport, et dashboard og en semantisk model med navnet Eksempel på kunderentabilitet. Trinnene i denne artikel er afhængige af den semantiske model.
Brug Python til at læse data fra semantiske modeller
SemPy Python-API'en kan hente data og metadata fra semantiske modeller, der er placeret i et Microsoft Fabric-arbejdsområde. API'en kan også udføre forespørgsler på dem.
Din notesbog, semantiske power BI-datasætmodel og lakehouse kan være placeret i det samme arbejdsområde eller i forskellige arbejdsområder. Som standard forsøger SemPy at få adgang til din semantiske model fra:
- Arbejdsområdet i dit lakehouse, hvis du har knyttet et lakehouse til din notesbog.
- Arbejdsområdet i din notesbog, hvis der ikke er knyttet noget lakehouse.
Hvis din semantiske model ikke er placeret i et af disse arbejdsområder, skal du angive arbejdsområdet for din semantiske model, når du kalder en SemPy-metode.
Sådan læser du data fra semantiske modeller:
Vis de tilgængelige semantiske modeller i dit arbejdsområde.
import sempy.fabric as fabric df_datasets = fabric.list_datasets() df_datasets
Vis de tabeller, der er tilgængelige i semantikmodellen Customer Profitability Sample .
df_tables = fabric.list_tables("Customer Profitability Sample", include_columns=True) df_tables
Angiv de målinger, der er defineret i semantisk model for eksempel på kunderentabilitet .
Tip
I følgende kodeeksempel har vi angivet det arbejdsområde, som SemPy skal bruge til at få adgang til den semantiske model. Du kan erstatte
Your Workspace
med navnet på det arbejdsområde, hvor du uploadede den semantiske model (fra afsnittet Overfør den semantiske model til dit arbejdsområde ).df_measures = fabric.list_measures("Customer Profitability Sample", workspace="Your Workspace") df_measures
Her har vi fastslået, at tabellen Kunde er den interessetabel, der er interessant.
Læs tabellen Customer fra semantikmodellen Customer Profitability Sample .
df_table = fabric.read_table("Customer Profitability Sample", "Customer") df_table
Bemærk
- Data hentes ved hjælp af XMLA. Dette kræver, at XMLA som minimum er skrivebeskyttet for at være aktiveret.
- Mængden af data, der kan hentes, er begrænset af – den maksimale hukommelse pr. forespørgsel for den kapacitets-SKU, der er vært for den semantiske model – Spark-drivernoden (besøg nodestørrelser for at få flere oplysninger), der kører notesbogen
- Alle anmodninger bruger lav prioritet til at minimere indvirkningen på Ydeevnen for Microsoft Azure Analysis Services og faktureres som interaktive anmodninger.
Evaluer målingen Samlet omsætning for hver kundes tilstand og dato.
df_measure = fabric.evaluate_measure( "Customer Profitability Sample", "Total Revenue", ["'Customer'[State]", "Calendar[Date]"]) df_measure
Bemærk
- Som standard hentes data ikke ved hjælp af XMLA og kræver derfor ikke, at XMLA er skrivebeskyttet for at være aktiveret.
- Dataene er ikke underlagt begrænsninger for Power BI-backend.
- Mængden af data, der kan hentes, er begrænset af – den maksimale hukommelse pr. forespørgsel for den kapacitets-SKU, der hoster den semantiske model – Spark-drivernoden (besøg nodestørrelser for at få flere oplysninger), der kører notesbogen
- Alle anmodninger faktureres som interaktive anmodninger
Hvis du vil føje filtre til målingsberegningen, skal du angive en liste over tilladte værdier for en bestemt kolonne.
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
Du kan også evaluere målingen Samlet omsætning pr. kundes tilstand og dato med en DAX-forespørgsel.
df_dax = fabric.evaluate_dax( "Customer Profitability Sample", """ EVALUATE SUMMARIZECOLUMNS( 'State'[Region], 'Calendar'[Date].[Year], 'Calendar'[Date].[Month], "Total Revenue", CALCULATE([Total Revenue])) """)
Bemærk
- Data hentes ved hjælp af XMLA og kræver derfor, at XMLA som minimum er skrivebeskyttet for at være aktiveret
- Mængden af data, der kan hentes, er begrænset af den tilgængelige hukommelse i Microsoft Azure Analysis Services og Spark-drivernoden (besøg nodestørrelser for at få flere oplysninger)
- Alle anmodninger bruger lav prioritet til at minimere indvirkningen på Analysis Services-ydeevnen og faktureres som interaktive anmodninger
Brug cellemagisen
%%dax
til at evaluere den samme DAX-forespørgsel uden at skulle importere biblioteket. Kør denne celle for at indlæse%%dax
cellemagri:%load_ext sempy
Parameteren for arbejdsområdet er valgfri. Den følger de samme regler som arbejdsområdeparameteren
evaluate_dax
for funktionen.Cellemagi understøtter også adgang til Python-variabler med syntaksen
{variable_name}
. Hvis du vil bruge en krøllet klammeparentes i DAX-forespørgslen, skal du slippe den med en anden krøllet klammeparentes (f.eks.:EVALUATE {{1}}
).%%dax "Customer Profitability Sample" -w "Your Workspace" EVALUATE SUMMARIZECOLUMNS( 'State'[Region], 'Calendar'[Date].[Year], 'Calendar'[Date].[Month], "Total Revenue", CALCULATE([Total Revenue]))
Den resulterende FabricDataFrame er tilgængelig via variablen
_
. Denne variabel henter outputtet fra den senest udførte celle.df_dax = _ df_dax.head()
Du kan føje målinger til data, der hentes fra eksterne kilder. Denne fremgangsmåde kombinerer tre opgaver:
- Det fortolker kolonnenavne til Power BI-dimensioner
- Den definerer gruppér efter kolonner
- Den filtrerer målingen Alle kolonnenavne, der ikke kan løses i den angivne semantiske model, ignoreres (besøg den understøttede DAX-syntaksressource for at få flere oplysninger).
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
Særlige parametre
SemPy read_table
og evaluate_measure
-metoderne har flere parametre, der er nyttige til at manipulere outputtet. Disse parametre omfatter:
fully_qualified_columns
: For en værdi af typen "True" returnerer metoderne kolonnenavne i formularenTableName[ColumnName]
num_rows
: Antallet af rækker, der skal udskrives i resultatetpandas_convert_dtypes
: For en værdi af typen "True" caster pandas de resulterende DataFrame-kolonner til den bedst mulige dtypeconvert_dtypes. Hvis denne parameter er slået fra, kan der opstå problemer med manglende kompatibilitet mellem kolonner i relaterede tabeller. Power BI-modellen registrerer muligvis ikke disse problemer på grund af konvertering af implicit DAX-type
SemPy read_table
bruger også de modeloplysninger, som Power BI leverer.
multiindex_hierarchies
: Hvis "Sand", konverteres Power BI-hierarkier til en Pandas MultiIndex-struktur
Skriv data, der kan forbruges af semantiske modeller
Spark-tabeller, der føjes til et Lakehouse, føjes automatisk til den tilsvarende semantiske standardmodel. I dette eksempel kan du se, hvordan du skriver data til det tilknyttede Lakehouse. FabricDataFrame accepterer de samme inputdata som Pandas-dataframes.
from sempy.fabric import FabricDataFrame
df_forecast = FabricDataFrame({'ForecastedRevenue': [1, 2, 3]})
df_forecast.to_lakehouse_table("ForecastTable")
Med Power BI kan tabellen ForecastTable føjes til en sammensat semantisk model med den semantiske Lakehouse-model.