Les fra semantiske modeller og skriv data som kan brukes av Power BI ved hjelp av python
I denne artikkelen lærer du hvordan du leser data og metadata og evaluerer mål i semantiske modeller ved hjelp av SemPy python-biblioteket i Microsoft Fabric. Du lærer også hvordan du skriver data som semantiske modeller kan bruke.
Forutsetning
Få et Microsoft Fabric-abonnement. Eller registrer deg for en gratis prøveversjon av Microsoft Fabric.
Logg på Microsoft Fabric.
Bruk opplevelsesbryteren til venstre på hjemmesiden for å bytte til Synapse Data Science-opplevelsen.
- Gå til Data Science-opplevelsen i Microsoft Fabric.
- Opprette en ny notatblokk for å kopiere/lime inn kode i celler
- For Spark 3.4 og nyere er Semantic-koblingen tilgjengelig i standard kjøretid når du bruker Fabric, og det er ikke nødvendig å installere den. Hvis du bruker Spark 3.3 eller nedenfor, eller hvis du vil oppdatere til den nyeste versjonen av Semantic Link, kan du kjøre kommandoen:
python %pip install -U semantic-link
- Legge til et Lakehouse i notatblokken
- Last ned semantisk modell for kundelønnsomhet.pbix fra datasettmappen i repositoriet for stoffeksempler, og lagre semantisk modell lokalt
Last opp den semantiske modellen til arbeidsområdet
Denne artikkelen bruker semantisk modell for eksempel på kundelønnsomhet.pbix . Denne semantiske modellen refererer til et markedsføringsmateriell for firmaet. Den inneholder produkt-, kunde- og tilsvarende inntektsdata for ulike forretningsenheter.
- Åpne arbeidsområdet i Fabric Data Science
- Velg Last opp > bla gjennom, og velg semantisk modell for eksempel på kundelønnsomhet.pbix .
Når opplastingen er fullført, har arbeidsområdet tre nye artefakter: en Power BI-rapport, et instrumentbord og en semantisk modell kalt Eksempel på kundelønnsomhet. Trinnene i denne artikkelen er avhengige av den semantiske modellen.
Bruke Python til å lese data fra semantiske modeller
SemPy Python-API-en kan hente data og metadata fra semantiske modeller i et Microsoft Fabric-arbeidsområde. API-en kan også kjøre spørringer på dem.
Notatblokken, power bi-datasettets semantiske modell og lakehouse kan være plassert i samme arbeidsområde eller i forskjellige arbeidsområder. Som standard prøver SemPy å få tilgang til den semantiske modellen fra:
- Arbeidsområdet i lakehouse, hvis du festet et lakehouse til notatblokken.
- Arbeidsområdet for notatblokken, hvis det ikke er noen lakehouse vedlagt.
Hvis den semantiske modellen ikke er plassert i noen av disse arbeidsområdene, må du angi arbeidsområdet for den semantiske modellen når du kaller en SemPy-metode.
Slik leser du data fra semantiske modeller:
Vis de tilgjengelige semantiske modellene i arbeidsområdet.
import sempy.fabric as fabric df_datasets = fabric.list_datasets() df_datasets
Vis tabellene som er tilgjengelige i semantisk modell for eksempel på kundelønnsomhet .
df_tables = fabric.list_tables("Customer Profitability Sample", include_columns=True) df_tables
Vis målene som er definert i semantisk modell for eksempel på kundelønnsomhet .
Tips
I det følgende kodeeksempelet har vi angitt arbeidsområdet som SemPy skal bruke for tilgang til semantisk modell. Du kan erstatte
Your Workspace
med navnet på arbeidsområdet der du lastet opp den semantiske modellen (fra delen Last opp den semantiske modellen til arbeidsområdet ).df_measures = fabric.list_measures("Customer Profitability Sample", workspace="Your Workspace") df_measures
Her bestemte vi oss for at Kunde-tabellen er en interessetabell.
Les kundetabellen fra semantisk modell for eksempel på kundelønnsomhet.
df_table = fabric.read_table("Customer Profitability Sample", "Customer") df_table
Merk
- Data hentes ved hjelp av XMLA. Dette krever minst at XMLA er skrivebeskyttet for å kunne aktiveres.
- Mengden data som kan hentes, er begrenset av – maksimalt minne per spørring for SKU-en for kapasiteten som er vert for den semantiske modellen – Spark-drivernoden (gå til nodestørrelser for mer informasjon) som kjører notatblokken
- Alle forespørsler bruker lav prioritet for å minimere innvirkningen på Microsoft Azure Analysis Services-ytelsen, og faktureres som interaktive forespørsler.
Evaluer total omsetning-målet for tilstanden og datoen for hver kunde.
df_measure = fabric.evaluate_measure( "Customer Profitability Sample", "Total Revenue", ["'Customer'[State]", "Calendar[Date]"]) df_measure
Merk
- Som standard hentes ikke data ved hjelp av XMLA, og krever derfor ikke at XMLA er skrivebeskyttet for å kunne aktiveres.
- Dataene er ikke underlagt begrensninger for Power BI-serverdel.
- Mengden data som kan hentes, er begrenset av – maksimalt minne per spørring for SKU-en som er vert for den semantiske modellen – Spark-drivernoden (gå til nodestørrelser for mer informasjon) som kjører notatblokken
- Alle forespørsler faktureres som interaktive forespørsler
Hvis du vil legge til filtre i målberegningen, angir du en liste over tillatte verdier 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ålet for totale inntekter per kundens tilstand og dato med en DAX-spørring.
df_dax = fabric.evaluate_dax( "Customer Profitability Sample", """ EVALUATE SUMMARIZECOLUMNS( 'State'[Region], 'Calendar'[Date].[Year], 'Calendar'[Date].[Month], "Total Revenue", CALCULATE([Total Revenue])) """)
Merk
- Data hentes ved hjelp av XMLA og krever derfor at minst XMLA er skrivebeskyttet for å kunne aktiveres
- Mengden data som kan hentes, begrenses av det tilgjengelige minnet i Microsoft Azure Analysis Services og Spark-drivernoden (gå til nodestørrelser for mer informasjon)
- Alle forespørsler bruker lav prioritet for å minimere innvirkningen på Analysis Services-ytelsen og faktureres som interaktive forespørsler
Bruk cellemagien
%%dax
til å evaluere den samme DAX-spørringen, uten å måtte importere biblioteket. Kjør denne cellen for å laste inn cellemagi%%dax
:%load_ext sempy
Arbeidsområdeparameteren er valgfri. Den følger de samme reglene som arbeidsområdeparameteren for
evaluate_dax
funksjonen.Cellemagien støtter også tilgang til Python-variabler med syntaksen
{variable_name}
. Hvis du vil bruke en klammeparentes i DAX-spørringen, slipper du den med en annen klammeparentes (eksempel: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 tilgjengelig via variabelen
_
. Denne variabelen registrerer utdataene for den siste kjørede cellen.df_dax = _ df_dax.head()
Du kan legge til mål i data som hentes fra eksterne kilder. Denne fremgangsmåten kombinerer tre oppgaver:
- Den løser kolonnenavn til Power BI-dimensjoner
- Den definerer grupper etter kolonner
- Den filtrerer målet Alle kolonnenavn som ikke kan løses i den angitte semantiske modellen, ignoreres (gå til den støttede DAX-syntaksressursen for mer informasjon).
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
Spesielle parametere
SemPy read_table
og evaluate_measure
metodene har flere parametere som er nyttige for å manipulere utdataene. Disse parameterne inkluderer:
fully_qualified_columns
: Metodene returnerer kolonnenavn i skjemaet for en Sann-verdiTableName[ColumnName]
num_rows
: Antall rader som skal utdata i resultatetpandas_convert_dtypes
: For en Sann-verdi kaster pandaer de resulterende DataFrame-kolonnene til den beste mulige convert_dtypes. Hvis denne parameteren er deaktivert, kan det føre til inkompatibilitetsproblemer mellom kolonner i relaterte tabeller. Power BI-modellen oppdager kanskje ikke disse problemene på grunn av DAX implisitt typekonvertering
SemPy read_table
bruker også modellinformasjonen som Power BI gir.
multiindex_hierarchies
: Hvis «Sann», konverterer den Power BI-hierarkier til en pandas MultiIndex-struktur
Skriv data som kan forbrukes av semantiske modeller
Spark-tabeller som legges til i et Lakehouse, legges automatisk til den tilsvarende semantiske standardmodellen. Dette eksemplet viser hvordan du skriver data til det vedlagte Lakehouse. FabricDataFrame godtar de samme inndatadataene som Pandas-datarammer.
from sempy.fabric import FabricDataFrame
df_forecast = FabricDataFrame({'ForecastedRevenue': [1, 2, 3]})
df_forecast.to_lakehouse_table("ForecastTable")
Med Power BI kan ForecastTable-tabellen legges til i en sammensatt semantisk modell med Semantisk Lakehouse-modellen.