Lezen uit semantische modellen en gegevens schrijven die kunnen worden gebruikt door Power BI met behulp van Python
In dit artikel leert u hoe u gegevens en metagegevens leest en metingen evalueert in semantische modellen met behulp van de SemPy Python-bibliotheek in Microsoft Fabric. U leert ook hoe u gegevens schrijft die semantische modellen kunnen gebruiken.
Vereisten
Haal een Microsoft Fabric-abonnement op. Of meld u aan voor een gratis proefversie van Microsoft Fabric.
Meld u aan bij Microsoft Fabric.
Gebruik de ervaringswisselaar aan de linkerkant van de startpagina om over te schakelen naar de Synapse-Datawetenschap-ervaring.
- Bezoek de Datawetenschap ervaring in Microsoft Fabric.
- Een nieuw notitieblok maken om code te kopiëren/plakken in cellen
- Voor Spark 3.4 en hoger is Semantische koppeling beschikbaar in de standaardruntime wanneer u Fabric gebruikt en hoeft u deze niet te installeren. Als u Spark 3.3 of lager gebruikt of als u wilt bijwerken naar de meest recente versie van Semantic Link, kunt u de opdracht uitvoeren:
python %pip install -U semantic-link
- Een Lakehouse toevoegen aan uw notitieblok
- Download het semantische model Customer Profitability Sample.pbix uit de map gegevenssets van de opslagplaats fabric-samples en sla het semantische model lokaal op
Het semantische model uploaden naar uw werkruimte
In dit artikel wordt het semantische model Customer Profitability Sample.pbix gebruikt. Dit semantische model verwijst naar marketingmateriaal van een bedrijf. Het bevat product-, klant- en bijbehorende omzetgegevens voor verschillende bedrijfseenheden.
- Open uw werkruimte in Fabric Datawetenschap
- Selecteer Bladeren uploaden >en selecteer het semantische model Customer Profitability Sample.pbix.
Wanneer het uploaden is voltooid, heeft uw werkruimte drie nieuwe artefacten: een Power BI-rapport, een dashboard en een semantisch model met de naam Klantwinstgevendheidsvoorbeeld. De stappen in dit artikel zijn afhankelijk van dat semantische model.
Python gebruiken om gegevens te lezen uit semantische modellen
De SemPy Python-API kan gegevens en metagegevens ophalen uit semantische modellen die zich in een Microsoft Fabric-werkruimte bevinden. De API kan er ook query's op uitvoeren.
Uw notebook, het semantische power BI-gegevenssetmodel en lakehouse kunnen zich in dezelfde werkruimte of in verschillende werkruimten bevinden. SemPy probeert standaard toegang te krijgen tot uw semantische model vanuit:
- De werkruimte van uw lakehouse, als u een lakehouse aan uw notitieblok hebt gekoppeld.
- De werkruimte van uw notitieblok, als er geen lakehouse is gekoppeld.
Als uw semantische model zich niet in een van deze werkruimten bevindt, moet u de werkruimte van uw semantische model opgeven wanneer u een SemPy-methode aanroept.
Gegevens lezen uit semantische modellen:
Geef de beschikbare semantische modellen in uw werkruimte weer.
import sempy.fabric as fabric df_datasets = fabric.list_datasets() df_datasets
Geef de tabellen weer die beschikbaar zijn in het semantische model klantwinstgevendheidsvoorbeeld .
df_tables = fabric.list_tables("Customer Profitability Sample", include_columns=True) df_tables
Vermeld de metingen die zijn gedefinieerd in het semantische model klantwinstgevendheidsvoorbeeld .
Tip
In het volgende codevoorbeeld hebben we de werkruimte voor SemPy opgegeven die moet worden gebruikt voor toegang tot het semantische model. U kunt vervangen door
Your Workspace
de naam van de werkruimte waar u het semantische model hebt geüpload (van het semantische model uploaden naar de werkruimtesectie ).df_measures = fabric.list_measures("Customer Profitability Sample", workspace="Your Workspace") df_measures
Hier hebben we vastgesteld dat de tabel Klant de interessetabel is.
Lees de tabel Klant uit het semantische model Klantwinstgevendheidsvoorbeeld .
df_table = fabric.read_table("Customer Profitability Sample", "Customer") df_table
Notitie
- Gegevens worden opgehaald met XMLA. Hiervoor moet ten minste XMLA alleen-lezen zijn ingeschakeld.
- De hoeveelheid ophaalbare gegevens wordt beperkt door - het maximale geheugen per query van de capaciteits-SKU die als host fungeert voor het semantische model - het Spark-stuurprogrammaknooppunt (bezoek knooppuntgrootten voor meer informatie) waarmee het notebook wordt uitgevoerd
- Alle aanvragen gebruiken lage prioriteit om de impact op de prestaties van Microsoft Azure Analysis Services te minimaliseren en worden gefactureerd als interactieve aanvragen.
Evalueer de meting Totale omzet voor de status en datum van elke klant.
df_measure = fabric.evaluate_measure( "Customer Profitability Sample", "Total Revenue", ["'Customer'[State]", "Calendar[Date]"]) df_measure
Notitie
- Standaard worden gegevens niet opgehaald met XMLA en hoeven daarom niet alleen-lezen XMLA te worden ingeschakeld.
- De gegevens zijn niet onderhevig aan power BI-back-endbeperkingen.
- De hoeveelheid ophaalbare gegevens wordt beperkt door - het maximale geheugen per query van de capaciteits-SKU die als host fungeert voor het semantische model - het Spark-stuurprogrammaknooppunt (bezoek knooppuntgrootten voor meer informatie) die het notebook uitvoert
- Alle aanvragen worden gefactureerd als interactieve aanvragen
Als u filters wilt toevoegen aan de metingberekening, geeft u een lijst met toegestane waarden voor een bepaalde kolom op.
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
U kunt ook de meting Totale omzet per klantstatus en -datum evalueren met een DAX-query.
df_dax = fabric.evaluate_dax( "Customer Profitability Sample", """ EVALUATE SUMMARIZECOLUMNS( 'State'[Region], 'Calendar'[Date].[Year], 'Calendar'[Date].[Month], "Total Revenue", CALCULATE([Total Revenue])) """)
Notitie
- Gegevens worden opgehaald met XMLA en daarom moeten ten minste XMLA-alleen-lezen zijn ingeschakeld
- De hoeveelheid ophaalbare gegevens wordt beperkt door het beschikbare geheugen in Microsoft Azure Analysis Services en het Spark-stuurprogrammaknooppunt (bezoek knooppuntgrootten voor meer informatie)
- Alle aanvragen gebruiken lage prioriteit om de impact op de prestaties van Analysis Services te minimaliseren en worden gefactureerd als interactieve aanvragen
Gebruik de magic van de
%%dax
cel om dezelfde DAX-query te evalueren, zonder dat u de bibliotheek hoeft te importeren. Voer deze cel uit om magic voor cellen te laden%%dax
:%load_ext sempy
De werkruimteparameter is optioneel. Het volgt dezelfde regels als de werkruimteparameter van de
evaluate_dax
functie.De magic van de cel biedt ook ondersteuning voor toegang tot Python-variabelen met de
{variable_name}
syntaxis. Als u een accolade in de DAX-query wilt gebruiken, escapet u deze met een andere accolade (bijvoorbeeld:EVALUATE {{1}}
).%%dax "Customer Profitability Sample" -w "Your Workspace" EVALUATE SUMMARIZECOLUMNS( 'State'[Region], 'Calendar'[Date].[Year], 'Calendar'[Date].[Month], "Total Revenue", CALCULATE([Total Revenue]))
Het resulterende FabricDataFrame is beschikbaar via de
_
variabele. Deze variabele legt de uitvoer van de laatst uitgevoerde cel vast.df_dax = _ df_dax.head()
U kunt metingen toevoegen aan gegevens die zijn opgehaald uit externe bronnen. Deze benadering combineert drie taken:
- Hiermee worden kolomnamen omgezet in Power BI-dimensies
- Het definieert groeperen op kolommen
- Hiermee wordt de meting kolomnamen gefilterd die niet kunnen worden omgezet in het opgegeven semantische model, worden genegeerd (ga naar de ondersteunde DAX-syntaxisresource voor meer informatie).
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
Speciale parameters
De SemPy read_table
en evaluate_measure
methoden hebben meer parameters die nuttig zijn voor het bewerken van de uitvoer. Deze parameters omvatten:
fully_qualified_columns
: Voor een 'True'-waarde retourneren de methoden kolomnamen in het formulierTableName[ColumnName]
num_rows
: Het aantal rijen dat moet worden uitgevoerd in het resultaatpandas_convert_dtypes
: Voor een 'True'-waarde cast pandas de resulterende DataFrame-kolommen naar de best mogelijke dtype-convert_dtypes. Als deze parameter is uitgeschakeld, kunnen incompatibiliteitsproblemen tussen kolommen met gerelateerde tabellen resulteren; het Power BI-model detecteert deze problemen mogelijk niet vanwege impliciete DAX-typeconversie
SemPy read_table
gebruikt ook de modelgegevens die Power BI levert.
multiindex_hierarchies
: Als 'Waar' wordt gebruikt, worden Power BI-hiërarchieën geconverteerd naar een pandas MultiIndex-structuur
Gegevens schrijven die kunnen worden gebruikt door semantische modellen
Spark-tabellen die aan een Lakehouse worden toegevoegd, worden automatisch toegevoegd aan het bijbehorende semantische standaardmodel. In dit voorbeeld ziet u hoe u gegevens naar de gekoppelde Lakehouse schrijft. Het FabricDataFrame accepteert dezelfde invoergegevens als Pandas-gegevensframes.
from sempy.fabric import FabricDataFrame
df_forecast = FabricDataFrame({'ForecastedRevenue': [1, 2, 3]})
df_forecast.to_lakehouse_table("ForecastTable")
Met Power BI kan de tabel ForecastTable worden toegevoegd aan een samengesteld semantisch model met het semantische Lakehouse-model.