Del via


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.

  • Log på Microsoft Fabric.

  • Brug oplevelsesskifteren i venstre side af startsiden til at skifte til Synapse Data Science-oplevelsen.

    Skærmbillede af menuen til skift af oplevelse, der viser, hvor du skal vælge Datavidenskab.

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

  1. Åbn dit arbejdsområde i Fabric Data Science
  2. Vælg Upload > Gennemse, og vælg den semantiske model Customer Profitability Sample.pbix .

Skærmbillede, der viser grænsefladen til overførsel af en semantisk model til arbejdsområdet.

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.

Skærmbillede, der viser elementerne fra Den Power BI-fil, der er uploadet til arbejdsområdet.

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:

  1. Vis de tilgængelige semantiske modeller i dit arbejdsområde.

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

  4. 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.
  5. 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
  6. 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
    
  7. 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
  8. 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()
    
  9. 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 formularen TableName[ColumnName]
  • num_rows: Antallet af rækker, der skal udskrives i resultatet
  • pandas_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.