Del via


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.

    Skjermbilde av menyen for opplevelsesbryteren, som viser hvor du velger Datavitenskap.

  • 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.

  1. Åpne arbeidsområdet i Fabric Data Science
  2. Velg Last opp > bla gjennom, og velg semantisk modell for eksempel på kundelønnsomhet.pbix .

Skjermbilde som viser grensesnittet for opplasting av en semantisk modell til arbeidsområdet.

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.

Skjermbilde som viser elementene fra Power BI-filen som er lastet opp til arbeidsområdet.

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:

  1. Vis de tilgjengelige semantiske modellene i arbeidsområdet.

    import sempy.fabric as fabric
    
    df_datasets = fabric.list_datasets()
    df_datasets
    
  2. 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
    
  3. 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.

  4. 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.
  5. 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
  6. 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
    
  7. 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
  8. 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()
    
  9. 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-verdi TableName[ColumnName]
  • num_rows: Antall rader som skal utdata i resultatet
  • pandas_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.

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.