Hendelser
31. mars, 23 - 2. apr., 23
Den ultimate Power BI-, Fabric-, SQL- og AI-fellesskapsledede hendelsen. 31 mars til 2 april. Bruk koden MSCUST for en rabatt på USD 150. Prisene går opp 11 februar.
Registrer deg i dagDenne nettleseren støttes ikke lenger.
Oppgrader til Microsoft Edge for å dra nytte av de nyeste funksjonene, sikkerhetsoppdateringene og den nyeste tekniske støtten.
Denne artikkelen beskriver hvordan du oppretter og arbeider med dynamiske M-spørringsparametere i Power BI Desktop. Med dynamiske M-spørringsparametere kan modellforfattere konfigurere filter- eller slicerverdiene som rapportlesere kan bruke for en M-spørringsparameter. Dynamiske M-spørringsparametere gir modellforfattere mer kontroll over filtervalgene som skal innlemmes i DirectQuery-kildespørringer.
Modellforfattere forstår de tiltenkte semantikkene til filtrene sine, og vet ofte hvordan de skal skrive effektive spørringer mot datakilden. Med dynamiske M-spørringsparametere kan modellforfattere sikre at filtreringsvalg innlemmes i kildespørringer på riktig tidspunkt for å oppnå de tiltenkte resultatene med optimal ytelse. Dynamiske M-spørringsparametere kan være spesielt nyttige for optimalisering av spørringsytelse.
Se Sujata forklare og bruke dynamiske M-spørringsparametere i følgende video, og prøv dem deretter selv.
Obs!
Denne videoen kan bruke tidligere versjoner av Power BI Desktop eller Power Bi-tjeneste.
Hvis du vil arbeide gjennom disse prosedyrene, må du ha en gyldig M-spørring som bruker én eller flere DirectQuery-tabeller.
Eksemplet nedenfor sender én enkelt verdi gjennom til en parameter dynamisk.
Velg Transformer>datatransformingsdata> i Power BI Desktop for å åpne Power Query-redigering.
Velg Nye parametere under Behandle parametere på båndet i Power Query-redigering.
Fyll ut informasjonen om parameteren i vinduet Behandle parametere. Hvis du vil ha mer informasjon, kan du se Opprette en parameter.
Velg Ny for å legge til flere parametere.
Når du er ferdig med å legge til parametere, velger du OK.
Når du har opprettet parameterne, kan du referere til dem i M-spørringen. Hvis du vil endre M-spørringen, åpner du avansert redigering mens du har valgt spørringen.
Referer til parameterne i M-spørringen, som uthevet i gult i følgende bilde:
Når du er ferdig med å redigere spørringen, velger du Ferdig.
Opprett en tabell for hver parameter med en kolonne som gir de mulige verdiene som kan angis dynamisk basert på filtervalg. I dette eksemplet vil du at parameterne og EndTime
parameterne skal StartTime
være dynamiske. Siden disse parameterne krever en Date/Time
parameter, genererer du mulige inndata for å angi datoen for parameteren dynamisk.
Velg Ny tabell under Modellering på Power BI Desktop-båndet.
Opprett en tabell for verdiene i parameteren StartTime
, for eksempel:
StartDateTable = CALENDAR (DATE(2016,1,1), DATE(2016,12,31))
Opprett en ny tabell for verdiene i parameteren EndTime
, for eksempel:
EndDateTable = CALENDAR (DATE(2016,1,1), DATE(2016,12,31))
Obs!
Bruk et kolonnenavn som ikke er i en faktisk tabell. Hvis du bruker samme navn som en faktisk tabellkolonne, gjelder den valgte verdien som et filter i spørringen.
Nå som du har opprettet tabellene med Date
feltene, kan du binde hvert felt til en parameter. Binding av et felt til en parameter betyr at når den valgte feltverdien endres, går verdien til parameteren og oppdaterer spørringen som refererer til parameteren.
Hvis du vil binde et felt, velger du det nyopprettede feltet i Power BI Desktop-modellvisningen, og velger Avansert i Egenskaper-ruten.
Obs!
Kolonnedatatypen må samsvare med M-parameterdatatypen.
Velg rullegardinlisten under Bind til parameter , og velg parameteren du vil binde til feltet:
Siden dette eksemplet er for å angi parameteren til én enkelt verdi, beholder du Flervalg satt til Nei, som er standard:
Hvis du setter den tilordnede kolonnen til Nei for flervalg, må du bruke én enkelt valgmodus i sliceren, eller du må velge enkelt på filterkortet.
Hvis brukstilfellene krever at du sender flere verdier til én enkelt parameter, angir du kontrollen til Ja og kontrollerer at M-spørringen er konfigurert til å godta flere verdier. Her er et eksempel for RepoNameParameter
, som tillater flere verdier:
Gjenta disse trinnene hvis du har andre felt å binde til andre parametere.
Du kan nå referere til dette feltet i en slicer eller som et filter:
I dette eksemplet har Power BI Desktop-modellen et felt kalt Land, som er en liste over land/områder som er bundet til en M-parameter kalt countryNameMParameter. Denne parameteren er aktivert for flervalg, men er ikke aktivert for Merk alle. Hvis du vil kunne bruke alternativet Velg alt i en slicer eller et filterkort, gjør du følgende:
Slik aktiverer du Velg alt for land:
Aktiver veksleknappen Merk alt i avanserte egenskaper for land, som aktiverer Velg alle verdiinndata. Rediger velg alle verdier eller legg merke til standardverdien.
Velg alle verdier går til parameteren som en liste som inneholder verdien du definerte. Når du definerer denne verdien eller bruker standardverdien, må du derfor kontrollere at verdien er unik og ikke finnes i feltet som er bundet til parameteren.
Start Power Query-redigering, velg spørringen, og velg deretter avansert redigering. Rediger M-spørringen for å bruke Velg alle-verdien for å referere til alternativet Velg alt .
I avansert redigering legger du til et boolsk uttrykk som evalueres til true
hvis parameteren er aktivert for flervalg og inneholder Merk alle-verdien, og ellers returneresfalse
:
Inkorporer resultatet av velg alle boolske uttrykk i kildespørringen. Eksemplet har en boolsk spørringsparameter i kildespørringen includeAllCountries
kalt som er satt til resultatet av det boolske uttrykket fra forrige trinn. Du kan bruke denne parameteren i en filtersetning i spørringen, slik at false
boolske filtre for de valgte land- eller områdenavnene, og true
effektivt ikke bruker noe filter.
Når du oppdaterer M-spørringen til kontoen for den nye Velg alle-verdien, kan du bruke Velg alle-funksjonen i slicere eller filtre.
Her er den fullstendige spørringen for det foregående eksemplet:
let
selectedcountryNames = if Type.Is(Value.Type(countryNameMParameter), List.Type) then
Text.Combine({"'", Text.Combine(countryNameMParameter, "','") , "'"})
else
Text.Combine({"'" , countryNameMParameter , "'"}),
selectAllCountries = if Type.Is(Value.Type(countryNameMParameter), List.Type) then
List.Contains(countryNameMParameter, "__SelectAll__")
else
false,
KustoParametersDeclareQuery = Text.Combine({"declare query_parameters(",
"startTimep:datetime = datetime(", DateTime.ToText(StartTimeMParameter, "yyyy-MM-dd hh:mm"), "), " ,
"endTimep:datetime = datetime(", DateTime.ToText(EndTimeMParameter, "yyyy-MM-dd hh:mm:ss"), "), ",
"includeAllCountries: bool = ", Logical.ToText(selectAllCountries) ,",",
"countryNames: dynamic = dynamic([", selectedcountryNames, "]));" }),
ActualQueryWithKustoParameters =
"Covid19
| where includeAllCountries or Country in(countryNames)
| where Timestamp > startTimep and Timestamp < endTimep
| summarize sum(Confirmed) by Country, bin(Timestamp, 30d)",
finalQuery = Text.Combine({KustoParametersDeclareQuery, ActualQueryWithKustoParameters}),
Source = AzureDataExplorer.Contents("help", "samples", finalQuery, [MaxRows=null, MaxSize=null, NoTruncate=null, AdditionalSetStatements=null]),
#"Renamed Columns" = Table.RenameColumns(Source,{{"Timestamp", "Date"}, {"sum_Confirmed", "Confirmed Cases"}})
in
#"Renamed Columns"
Rapportlesere som dynamisk kan angi verdiene for M-spørringsparametere, kan få tilgang til flere data eller utløse endringer i kildesystemet ved hjelp av injeksjonsangrep. Denne muligheten avhenger av hvordan du refererer til parameterne i M-spørringen og hvilke verdier du sender til parameterne.
Du har for eksempel en parameterisert Kusto-spørring konstruert på følgende måte:
Products
| where Category == [Parameter inserted here] & HasReleased == 'True'
| project ReleaseDate, Name, Category, Region
Det er ingen problemer med en egendefinert bruker som sender en passende verdi for parameteren, for eksempel Games
:
| where Category == 'Games' & HasReleased == 'True'
En angriper kan imidlertid kanskje sende en verdi som endrer spørringen for å få tilgang til flere data, for eksempel 'Games'//
:
Products
| where Category == 'Games'// & HasReleased == 'True'
| project ReleaseDate, Name, Category, Region
I dette eksemplet kan angriperen få tilgang til informasjon om spill som ikke har blitt utgitt ennå, ved å endre en del av spørringen til en kommentar.
Hvis du vil redusere sikkerhetsrisikoen, unngår du strengsammenkobling av M-parameterverdier i spørringen. Bruk i stedet disse parameterverdiene i M-operasjoner som brettes til kildespørringen, slik at M-motoren og koblingen konstruerer den endelige spørringen.
Hvis en datakilde støtter import av lagrede prosedyrer, bør du vurdere å lagre spørringslogikken der og aktivere den i M-spørringen. Hvis det er tilgjengelig, kan du også bruke en parameterpasseringsmekanisme som er innebygd i kildespørringsspråket og -koblingene. Azure Data Explorer har for eksempel innebygde spørringsparameterfunksjoner som er utformet for å beskytte mot injeksjonsangrep.
Her er noen eksempler på disse begrensningene:
Eksempel som bruker M-spørringens filtreringsoperasjoner:
Table.SelectRows(Source, (r) => r[Columns] = Parameter)
Eksempel som deklarerer parameteren i kildespørringen, eller sender parameterverdien som inndata til en kildespørringsfunksjon:
declare query_parameters (Name of Parameter : Type of Parameter);
Eksempel på direkte kall til en lagret prosedyre:
let CustomerByProductFn = AzureDataExplorer.Contents("Help", "ContosoSales"){[Name="CustomerByProduct"]}[Data] in
CustomerByProductFn({1, 3, 5})
Det er noen hensyn og begrensninger å ta hensyn til når du bruker dynamiske M-spørringsparametere:
Parameter
til slutten av parameternavnet for å unngå denne begrensningen.Date/Time
er datatypen, må du kaste den i M-spørringen som DateTime.Date(<YourDateParameter>)
.Hvis du vil ha mer informasjon om Power BI Desktop-funksjoner, kan du se følgende ressurser:
Hendelser
31. mars, 23 - 2. apr., 23
Den ultimate Power BI-, Fabric-, SQL- og AI-fellesskapsledede hendelsen. 31 mars til 2 april. Bruk koden MSCUST for en rabatt på USD 150. Prisene går opp 11 februar.
Registrer deg i dagOpplæring
Læringsbane
Bruk DAX i Power BI Desktop - Training
Dette læreprogrammet introduserer DAX (Data Analysis Expressions) og gir deg grunnleggende ferdigheter som kreves for å forbedre semantiske modeller med beregninger. Det starter med å beskrive modellstrukturen i Power BI Desktop og hvordan den kan forbedres med DAX-beregninger. Den beskriver deretter hvordan du kan skrive DAX-formler og de ulike typene modellberegninger, inkludert beregnede tabeller og kolonner, samt mål. Evalueringskontekster introduseres, og etterfølgende leksjoner beskriver hvordan du sk
Sertifisering
Microsoft Certified: Power BI Data Analyst Associate - Certifications
Demonstrate methods and best practices that align with business and technical requirements for modeling, visualizing, and analyzing data with Microsoft Power BI.