Dynamiske M-spørringsparametere i Power BI Desktop (forhåndsversjon)

Med dynamiske M-spørringsparametere kan modellforfattere la rapportleserne bruke filtre eller slicere til å angi verdien(e) for en M-spørringsparameter, som kan være spesielt nyttig for optimaliseringer av spørringsytelse. Med dynamiske M spørrings parametere har modell forfattere mer kontroll over hvordan filter valg blir innlemmet i DirectQuery-kildedata.

Når modellforfattere forstår den tiltenkte semantikken i filtrene sine, vet de ofte hvordan de skal skrive effektive spørringer mot datakilden, og kan dermed sikre at filtervalgene er innlemmet i kildespørringer til rett tid for å oppnå de tiltenkte resultatene med forbedret ytelse.

Se Justyna forklare og bruk dynamiske M spørrings parametere, og prøv dem selv.

Obs!

denne videoen kan bruke tidligere versjoner av Power BI Desktop eller Power BI-tjenesten.

Aktiver parametere for dynamisk M-spørring

Dynamiske M-spørringsparametere er for øyeblikket i forhåndsversjon og må aktiveres for å kunne brukes. Velg Alternativer og innstillinger-alternativer på fil -båndet, > og velg deretter forhånds visnings funksjoner fra ruten til venstre. Derfra må du påse at det er merket av for dynamiske M-spørringsparametere. Du må kanskje starte Power BI Desktop på nytt for at endringen skal bli aktivert.

Aktivering av prøvefunksjon

Som en forutsetning for denne funksjonen må du ha en gyldig M-spørringsparameter opprettet og referert til i én eller flere Direct Query-tabeller.

Obs!

Sørg for at du kontrollerer avsnittet Vurderinger og begrensninger i denne artikkelen, siden ikke alle DirectQuery-kilder støttes med denne funksjonen.

La oss gå gjennom et eksempel på å sende en enkeltverdi til en parameter dynamisk:

  1. i Power BI Desktop velger du > data > transformerings data for Home transform for å åpne Power Querys redigering. Velg nye parametere under behandle parametere -knappen på båndet.

    Båndmeny

  2. Deretter fyller du ut følgende informasjon om parameteren.

    Parameterinformasjon

  3. Klikk på Ny på nytt hvis du har flere parametere som skal legges til.

    Opprett en ny parameter

  4. 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 merket spørringen du vil endre:

    Åpne Avansert redigering

  5. Deretter kan du referere til parameterne i M-spørringen, uthevet i gult i følgende bilde.

    Referer til parameteren

  6. Nå som du har opprettet parameterne og referert dem i M-spørringen, må du opprette en tabell med en kolonne som gir de mulige verdiene som er tilgjengelige for denne parameteren. Dette vil tillate at parameterne er dynamisk angitt basert på filtervalg. I dette eksemplet vil vi at StartTime-parameteren og EndTime-parameteren skal være dynamiske. Siden disse parameterne krever en parameter for dato/klokkeslett, vil jeg generere datoinndata som kan brukes til å angi datoen for parameteren. Opprett en ny tabell for å begynne:

    Opprett en ny tabell

  7. Her er den første tabellen jeg opprettet for verdiene for Start Time-parameteren:

    StartDateTable = CALENDAR (DATE(2016,1,1), DATE(2016,12,31))

    opprett en tabell

  8. Her er den andre tabellen jeg opprettet for verdiene for EndTime-parameteren:

    EndDateTable = CALENDAR (DATE(2016,1,1), DATE(2016,12,31))

    opprett den andre tabellen

    Obs!

    Vi anbefaler at du bruker et annet kolonnenavn som ikke er i en faktisk tabell. Hvis de har samme navn, brukes den valgte verdien som et filter i den faktiske spørringen.

  9. Nå som tabellene med Dato-feltet er opprettet, kan vi binde hvert felt til en parameter. Hvis du binder feltet til parameteren, betyr det i hovedsak at etterhvert som den valgte verdien for feltet endres, sendes verdien til parameteren og oppdaterer spørringen der det refereres til parameteren. Gå altså til Modellering-fanen, velg det nylig opprettede feltet, og gå til Avansert-egenskapene for å binde felt:

    Obs!

    Kolonnedatatypen må samsvare med M-parametertypen.

    bind feltet til parameteren

  10. Velg rullegardinlisten under Bind til parameter, og velg parameteren som du vil binde til feltet:

    bind parameteren til feltet

    Siden dette eksemplet gjelder for en enkeltvalgverdi (angi parameteren til én enkelt verdi), bør du beholde Flervalg angitt til Nei, som er standard:

    flervalg angitt til av

    Hvis brukstilfellene krever flere valg (ved å sende flere verdier til én enkelt parameter), må du veksle bryteren til Ja og sørge for at M-spørringen er riktig konfigurert for å godta flere verdier i M-spørringen. Her er et eksempel for RepoNameParameter, som tillater flere verdier:

    eksempel med flere verdier

  11. Du kan gjenta disse trinnene hvis du har andre felt å binde til andre parametere:

    konfigurer flere parametere

  12. Til slutt kan du referere til dette feltet i en slicer eller som et filter:

    referer til feltene

Hvis den tilordnede kolonnen er satt til Nei for flervalg, må du enten bruke en enkeltvalgmodus i sliceren eller kreve enkeltvalg i filterkortet.

Aktiver Merk alt

Det finnes flere trinn hvis du vil at slutt brukerne skal kunne bruke alternativet Velg alle i sliceren eller filter kortet. La oss bruke følgende scenario som eksempel. i modell -fanen i Power BI Desktop kan du se at vi har et felt kalt land (liste over land) som er bundet til en M-parameter kalt countryNameMParameter:

Eksempel på fler valgs M-parameter

Du vil også se at denne parameteren er aktivert for flervalg , men ikke aktivert for Utvalgte alle. Når vi aktiverer alternativet for å velge alle , vil vi se en aktivert inn data kalt Velg alle verdi:

Velg alle innstillinger for M-parameter

Select all-verdien brukes til å referere til alternativet select all i M-spørringen. Denne verdien sendes til parameter som en liste som inneholder verdien du definerte for Velg alle. Når du definerer denne verdien eller bruker standard verdien, må du derfor kontrollere at verdien er unik og ikke finnes i feltet som er bundet til parameteren. Når du har angitt verdien eller brukt standard verdien for SELECT all, må du oppdatere M-spørringen for å konto for denne select all-verdien.

S skjerm bilde for spørring

Hvis du vil redigere M-spørringen, må du først starte redigerings programmet for Power Query og deretter velge Avansert redigering i spørrings delen:

Avansert oppførings punkt for redigering i bånd

I Avansert redigering må vi legge til et boolsk uttrykk som skal evalueres til sann hvis parameteren er aktivert for flervalg , og inneholder Select all-verdien (ellers returneres USANN). For vårt eksempel som kan se slik ut:

Eksempel på boolsk uttrykk for SELECT all

Deretter må vi inkludere resultatet av dette Velg alle boolske uttrykk i kilde spørringen. I eksemplet vårt har vi en boolsk spørrings parameter i kilde spørringen, kalt includeAllCountries, som er satt til resultatet av det boolske uttrykket fra forrige trinn. Vi bruker deretter denne parameteren i en filter-setning i spørringen, slik at USANN for boolsk vil filtrere til de valgte lands navnene, og en sann kan effektivt bruke ingen filtre:

Velg all Boolsk som brukes i kilde spørring

For referanse her er den fullstendige spørringen vi brukte:

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"

Når du har oppdatert M-spørringen for å kontoen for den nye Velg alle-verdien, kan du nå bruke Select all -funksjonen i slicere eller filtre:

Velg alle i slicer

Potensiell sikkerhetsrisiko

Når du tillater rapportlesere å angi verdiene for M-spørringsparameteren dynamisk, får de kanskje tilgang til mer data eller mulighet til å utløse endringer i kildesystemet ved bruk av injeksjonsangrep, avhengig av hvordan parameterne refereres til i M-spørringen, og hvilke verdier som sendes til denne parameteren.

La oss for eksempel si at du har en parametrisert Kusto-spørring som er konstruert på følgende måte:

Products
| where Category == [Parameter inserted here] & HasReleased == 'True'
 | project ReleaseDate, Name, Category, Region```

Det kan hende du ikke har problemer med en vennlig bruker som sender en passende verdi for parameteren, for eksempel Spill:

| where Category == 'Games' & HasReleased == 'True'

En angriper kan imidlertid være i stand til å sende en verdi som endrer spørringen for å få tilgang til mer data, for eksempel Spill // :

Products
| where Category == 'Games'// & HasReleased == 'True'
| project ReleaseDate, Name, Category, Region

I dette eksemplet kan angriperen få tilgang til informasjon om spill som ikke er lansert ennå, ved å endre en del av spørringen til en kommentar.

Slik reduserer du risikoen

For å redusere sikkerhetsrisikoen er det best å unngå strengsammenkobling av M-parameterverdier i spørringen. Forbruk heller disse parameterverdiene i M-operasjoner som falses i kildespørringen, slik at M-motoren og koblingen konstruerer den endelige spørringen. Hvis det er tilgjengelig, kan du eventuelt bruke en parameteroverføringsmekanisme innebygd i kildespørringsspråket og -koblingene. Azure Data Explorer har for eksempel innebygd spørringsparameterfunksjonalitet som er utformet for å beskytte mot injeksjonsangrep.

Her ser du noen eksempler:

  • Eksempel som bruker M-spørringens filtreringsoperasjoner:

    Table.SelectRows(Source, (r) =\&gt; r[Columns] = Parameter)
    
  • Eksempel på å deklarere parameteren i kildespørringen (eller sende parameterverdien som en inndata til en kildespørringsfunksjon):

    declare query\_parameters (Name of Parameter : Type of Parameter);
    

Viktige faktorer og begrensninger

Det finnes noen begrensninger og faktorer å ta hensyn til ved bruk av dynamiske M-spørringsparametere:

  • Én enkeltparameter kan ikke bindes til flere felt eller omvendt.

  • Funksjonen støttes bare for M-baserte datakilder. Følgende DirectQuery-kilder støttes ikke:

    • T-SQL-baserte data kilder: SQL Server, Azure SQL Database, Synapse SQL pools (for eksempel Azure Synapse Analytics (tidligere SQL Data Warehouse)) og Synapse SQL OnDemand pools
    • Sanntidstilkobling til datakilder: Azure Analysis Services, SQL Server Analysis Services, Power BI Datasets
    • Andre data kilder som ikke støttes: Oracle, Teradata og relasjonell SAP Hana, PostgreSQL
    • Støttes delvis gjennom XMLA/TOM endepunkt-programmerbarhet: SAP BW og SAP Hana
  • Aggregasjoner støttes ikke med funksjonen

  • Sikkerhet på radnivå (RLS) støttes ikke med funksjonen

  • Parameter navn kan ikke reserveres ord i DAX eller inneholder mellomrom. Hvis du føyer til «parameter» på slutten av parameter navnet, kan dette bidra til å unngå denne begrensningen.

  • Følgende bruksklare parametertyper støttes ikke:

    • Alle
    • Varighet
    • Sann/usann
    • Binær
  • Filtre som ikke støttes:

    • Relativ tids-slicer eller filter
    • Relativ dato
    • Hierarki-slicer
    • Inkluder-filter for flere felt
    • Utelat-filter / ikke-filtre
    • Kryssutheving
    • Neddrilling-filter
    • Kryssdrilling-filter
    • Øverste N-filter
  • Operasjoner som ikke støttes:

    • And
    • Inneholder
    • Mindre enn
    • Større enn
    • Begynner med
    • Begynner ikke med
    • Er ikke
    • Inneholder ikke
    • Er tom
    • Er ikke tom

Neste trinn

Du kan gjøre mange ulike ting med Power BI Desktop. Hvis du vil ha mer informasjon om funksjonene til programmet, kan du sjekke ut følgende ressurser: