Dela via


Läsa från semantiska modeller och skriva data som kan användas av Power BI med python

I den här artikeln får du lära dig hur du läser data och metadata och utvärderar mått i semantiska modeller med hjälp av SemPy Python-biblioteket i Microsoft Fabric. Du får också lära dig hur du skriver data som semantiska modeller kan använda.

Förutsättningar

  • Gå till Data Science-upplevelsen i Microsoft Fabric.
  • Skapa en ny anteckningsbok för att kopiera/klistra in kod i celler.
  • För Spark 3.4 och senare är Semantic-länken tillgänglig i standardkörningen när du använder Infrastrukturresurser, och du behöver inte installera den. Om du använder Spark 3.3 eller senare, eller om du vill uppdatera till den senaste versionen av Semantic Link, kan du köra kommandot: python %pip install -U semantic-link  
  • Lägg till en Lakehouse i anteckningsboken.
  • Ladda ned semantikmodellen Customer Profitability Sample.pbix från datauppsättningsmappen på lagringsplatsen fabric-samples och spara den semantiska modellen lokalt.

Ladda upp den semantiska modellen till din arbetsyta

I den här artikeln använder vi semantikmodellen Customer Profitability Sample.pbix . Den här semantiska modellen refererar till ett företag som tillverkar marknadsföringsmaterial och innehåller data om produkter, kunder och motsvarande intäkter för olika affärsenheter.

  1. Öppna din arbetsyta i Fabric Data Science.
  2. Välj Ladda upp > Bläddra och välj semantikmodellen Customer Profitability Sample.pbix .

Skärmbild som visar gränssnittet för att ladda upp en semantisk modell till arbetsytan.

När uppladdningen är klar har arbetsytan tre nya artefakter: en Power BI-rapport, en instrumentpanel och en semantisk modell med namnet Customer Profitability Sample. Du använder den här semantiska modellen för stegen i den här artikeln.

Skärmbild som visar objekten från Power BI-filen som laddats upp till arbetsytan.

Använda Python för att läsa data från semantiska modeller

SemPy Python-API:et kan hämta data och metadata från semantiska modeller som finns på en Microsoft Fabric-arbetsyta och köra frågor på dem.

Notebook-filen, Power BI-datauppsättningens semantiska modell och lakehouse kan finnas på samma arbetsyta eller på olika arbetsytor. Som standard försöker SemPy komma åt din semantiska modell från:

  • Arbetsytan i ditt sjöhus, om du bifogat ett sjöhus till din anteckningsbok.
  • Arbetsytan i anteckningsboken, om det inte finns någon bifogad lakehouse.

Om din semantiska modell inte finns på någon av dessa arbetsytor måste du ange arbetsytan för din semantiska modell när du anropar en SemPy-metod.

Så här läser du data från semantiska modeller:

  1. Visa en lista över tillgängliga semantiska modeller på din arbetsyta.

    import sempy.fabric as fabric
    
    df_datasets = fabric.list_datasets()
    df_datasets
    
  2. Lista tabellerna som är tillgängliga i semantikmodellen Exempel på kundlönsamhet .

    df_tables = fabric.list_tables("Customer Profitability Sample", include_columns=True)
    df_tables
    
  3. Visa en lista över måtten som definierats i semantikmodellen Exempel på kundlönsamhet .

    Dricks

    I följande kod har vi angett arbetsytan för SemPy som ska användas för att komma åt semantikmodellen. Du kan ersätta Your Workspace med namnet på arbetsytan där du laddade upp semantikmodellen (från avsnittet Ladda upp semantikmodellen till arbetsytan ).

    df_measures = fabric.list_measures("Customer Profitability Sample", workspace="Your Workspace")
    df_measures
    

    Nu har vi fastställt att tabellen Kund är den intressanta tabellen.

  4. Läs tabellen Kund från semantikmodellen Exempel på kundlönsamhet .

    df_table = fabric.read_table("Customer Profitability Sample", "Customer")
    df_table
    

    Kommentar

    • Data hämtas med XMLA och kräver därför att minst XMLA är skrivskyddat för att aktiveras.
    • Mängden data som kan hämtas begränsas av maximalt minne per fråga för den kapacitets-SKU som är värd för semantikmodellen och av Spark-drivrutinsnoden (se nodstorlekar) som kör notebook-filen.
    • Alla begäranden har låg prioritet för att minimera påverkan på Prestanda för Microsoft Azure Analysis Services och faktureras som interaktiva begäranden.
  5. Utvärdera måttet Total revenue per kundens tillstånd och datum.

    df_measure = fabric.evaluate_measure(
        "Customer Profitability Sample",
        "Total Revenue",
        ["'Customer'[State]", "Calendar[Date]"])
    df_measure
    

    Kommentar

    • Som standard hämtas inte data med XMLA och kräver därför inte att XMLA är skrivskyddat för att aktiveras.
    • Dessutom omfattas inte data av begränsningar för Power BI-serverdelen.
    • Mängden data som kan hämtas begränsas av maximalt minne per fråga för den kapacitets-SKU som är värd för semantikmodellen och av Spark-drivrutinsnoden (se nodstorlekar) som kör notebook-filen.
    • Alla begäranden faktureras som interaktiva begäranden.
  6. Du kan lägga till filter i måttberäkningen genom att ange en lista med värden som kan finnas i en viss kolumn.

    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 också utvärdera måttet Total revenue per kundens tillstånd och datum med hjälp av en DAX-fråga.

    df_dax = fabric.evaluate_dax(
        "Customer Profitability Sample",
        """
        EVALUATE SUMMARIZECOLUMNS(
            'State'[Region],
            'Calendar'[Date].[Year],
            'Calendar'[Date].[Month],
            "Total Revenue",
            CALCULATE([Total Revenue]))
        """)
    

    Kommentar

    • Data hämtas med XMLA och kräver därför att minst XMLA är skrivskyddat för att aktiveras.
    • Mängden data som kan hämtas begränsas av det tillgängliga minnet i Microsoft Azure Analysis Services och Spark-drivrutinsnoden (se nodstorlekar).
    • Alla begäranden har låg prioritet för att minimera påverkan på Analysis Services-prestanda och faktureras som interaktiva begäranden.
  8. Du kan utvärdera samma DAX-fråga utan att behöva importera biblioteket med hjälp av cellmagi %%dax . Vi kör cellen nedan för att läsa in %%dax cellmagi.

    %load_ext sempy
    

    Parametern för arbetsytan är valfri och följer samma regler som funktionens arbetsyteparameter evaluate_dax . Cellmagi har också stöd för åtkomst till Python-variabler med hjälp av syntaxen {variable_name} . Om du vill använda en klammerparentes i DAX-frågan undfly du den med en annan klammerparentes (t.ex. 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 resulterande FabricDataFrame är tillgänglig via variabeln _ , som samlar in utdata från den senast utförda cellen.

    df_dax = _
    
    df_dax.head()
    
  9. Du kan också lägga till mått till data som hämtats från externa källor. Den här metoden kombinerar tre uppgifter: den löser kolumnnamn till Power BI-dimensioner, definierar grupper efter kolumner och filtrerar måttet. Alla kolumnnamn som inte kan matchas inom den angivna semantiska modellen ignoreras (se DAX-syntaxen som stöds).

    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ärskilda parametrar

SemPy read_table och evaluate_measure metoderna har fler parametrar som är användbara för att manipulera utdata. Dessa parametrar omfattar:

  • fully_qualified_columns: Om värdet är "True" returnerar metoderna kolumnnamn i formuläret TableName[ColumnName].
  • num_rows: Antal rader som ska matas ut i resultatet.
  • pandas_convert_dtypes: Om värdet är "True" omvandlas resulterande DataFrame-kolumner till bästa möjliga dtype, med pandas convert_dtypes. Om den här parametern är inaktiverad kan inkompatibilitetsproblem uppstå mellan kolumner i relaterade tabeller som kanske inte har identifierats i Power BI-modellen på grund av konvertering av implicit DAX-typ.

SemPy read_table använder också modellinformationen som tillhandahålls av Power BI.

  • multiindex_hierarchies: Om sant konverterar Power BI-hierarkier till Pandas MultiIndex-struktur.

Skriva data som kan användas med semantiska modeller

Spark-tabeller som läggs till i ett Lakehouse läggs automatiskt till i motsvarande standardsemantiska modell. Det här exemplet visar hur du skriver data till det bifogade Lakehouse. FabricDataFrame accepterar samma indata som Pandas-dataramar.

from sempy.fabric import FabricDataFrame

df_forecast = FabricDataFrame({'ForecastedRevenue': [1, 2, 3]})

df_forecast.to_lakehouse_table("ForecastTable")

Med hjälp av Power BI kan tabellen ForecastTable läggas till i en sammansatt semantisk modell med hjälp av Lakehouse-semantikmodellen.