Dinamikus M lekérdezési paraméterek a Power BI Desktopban

Ez a cikk azt ismerteti, hogyan hozhat létre és dolgozhat dinamikus M lekérdezési paraméterekkel a Power BI Desktopban. Dinamikus M lekérdezési paraméterekkel a modellkészítők konfigurálhatják azokat a szűrő- vagy szeletelőértékeket, amelyeket a jelentésmegjelenítők használhatnak egy M lekérdezési paraméterhez. A dinamikus M lekérdezési paraméterek nagyobb ellenőrzést biztosítanak a modellkészítők számára a DirectQuery-forrás lekérdezésekbe beépítendő szűrőkijelölések felett.

A modellkészítők megértik a szűrők tervezett szemantikáját, és gyakran tudják, hogyan írhatnak hatékony lekérdezéseket az adatforrásukhoz. Dinamikus M lekérdezési paraméterekkel a modellkészítők gondoskodhatnak arról, hogy a szűrőkijelölések a megfelelő ponton belefoglaljanak a forrás lekérdezésekbe, hogy optimális teljesítménnyel érjék el a kívánt eredményeket. A dinamikus M lekérdezési paraméterek különösen hasznosak lehetnek a lekérdezési teljesítmény optimalizálásához.

Tekintse meg a Sujata dinamikus M lekérdezési paramétereit az alábbi videóban, majd próbálja ki őket.

Feljegyzés

Ez a videó a Power BI Desktop vagy a Power BI szolgáltatás korábbi verzióit használhatja.

Előfeltételek

Ezen eljárások végrehajtásához érvényes M lekérdezéssel kell rendelkeznie, amely egy vagy több DirectQuery-táblát használ.

Dinamikus paraméterek létrehozása és használata

Az alábbi példa egyetlen értéket ad át egy paraméternek dinamikusan.

Paraméterek hozzáadása

  1. A Power BI Desktopban válassza a Home Transform data Transform data (Adatok>átalakítása)>lehetőséget a Power Query-szerkesztő megnyitásához.

  2. A Power Query-szerkesztő válassza az Új paramétereklehetőséget a menüszalag Paraméterek kezelése területén.

    Screenshot that shows the Ribbon menu.

  3. A Paraméterek kezelése ablakban töltse ki a paraméterre vonatkozó információkat. További információ: Paraméter létrehozása.

    Screenshot that shows parameter information.

  4. További paraméterek hozzáadásához válassza az Új lehetőséget.

    Screenshot that shows New to create another parameter.

  5. Ha befejezte a paraméterek hozzáadását, válassza az OK gombot.

Az M-lekérdezés paramétereinek hivatkozása

  1. Miután létrehozta a paramétereket, hivatkozhat rájuk az M lekérdezésben. Ha módosítani szeretné az M lekérdezést, miközben a lekérdezés ki van jelölve, nyissa meg a Speciális szerkesztőt.

    Screenshot that shows opening the Advanced Editor.

  2. Hivatkozzon az M-lekérdezés paramétereire a következő képen sárga színnel kiemelve:

    Screenshot that shows referencing the parameter.

  3. Ha végzett a lekérdezés szerkesztésével, válassza a Kész lehetőséget.

Értéktáblák létrehozása

Hozzon létre egy táblát minden paraméterhez egy oszloppal, amely a szűrőkijelölés alapján dinamikusan beállítható lehetséges értékeket biztosítja. Ebben a példában azt szeretné, hogy a paraméterek és EndTime a StartTime paraméterek dinamikusak legyenek. Mivel ezek a paraméterek paramétert Date/Time igényelnek, a lehetséges bemenetek generálása a paraméter dátumának dinamikus beállításához.

  1. A Power BI Desktop menüszalagJának Modellezés területén válassza az Új táblázat lehetőséget.

    Screenshot that shows selecting New table.

  2. Hozzon létre egy táblát a StartTime paraméter értékeihez, például:

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

    Screenshot that shows the first table.

  3. Hozzon létre egy második táblát a EndTime paraméter értékeihez, például:

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

    Screenshot that shows the second table.

    Feljegyzés

    Olyan oszlopnevet használjon, amely nem szerepel egy tényleges táblában. Ha ugyanazt a nevet használja, mint egy tényleges táblaoszlop, a kiválasztott érték szűrőként lesz alkalmazva a lekérdezésben.

Mezők kötése a paraméterekhez

Most, hogy létrehozta a táblákat a Date mezőkkel, minden mezőt egy paraméterhez köthet. A mező paraméterhez kötése azt jelenti, hogy a kijelölt mező értékének változásakor az érték átmegy a paraméterre, és frissíti a paraméterre hivatkozó lekérdezést.

  1. Mező kötéséhez a Power BI Desktop Modell nézetében jelölje ki az újonnan létrehozott mezőt, majd a Tulajdonságok panelen válassza a Speciális lehetőséget.

    Feljegyzés

    Az oszlop adattípusának meg kell egyeznie az M paraméter adattípusával.

    Screenshot that shows binding the field to a parameter.

  2. Válassza ki a legördülő menüt a Kötés paraméter alatt, és válassza ki a mezőhöz kötni kívánt paramétert:

    Screenshot that shows binding the parameter to the field.

    Mivel ez a példa a paraméter egyetlen értékre való beállítására használható, tartsa a Többszörös kijelölés beállítást Nem értékre, ami az alapértelmezett érték:

    Screenshot that shows multi-select set to No.

    Ha a megfeleltetett oszlopot Nem értékre állítja a többszörös kijelöléshez, a szeletelőben egyetlen kijelölési módot kell használnia, vagy a szűrőkártyán egyetlen kijelölést kell igényelnie.

    Ha a használati esetek több értéket igényelnek egyetlen paraméternek, állítsa a vezérlőt Igen értékre, és győződjön meg arról, hogy az M-lekérdezés több érték elfogadására van beállítva. Íme egy példa, RepoNameParameteramely több értéket engedélyez:

    Screenshot that shows a multivalue example.

  3. Ismételje meg ezeket a lépéseket, ha más mezőket szeretne más paraméterekhez kötni.

    Screenshot that shows configuring more parameters.

Most már hivatkozhat erre a mezőre egy szeletelőben vagy szűrőként:

Screenshot that shows referencing the fields.

Az összes kijelölése

Ebben a példában a Power BI Desktop-modell egy Ország nevű mezővel rendelkezik, amely egy countryNameMParameter nevű M paraméterhez kötött országok/régiók listája. Ez a paraméter engedélyezve van a többszörös kijelöléshez, de nincs engedélyezve az összes kijelölése esetén. Ha egy szeletelőben vagy szűrőkártyán az Összes kijelölése lehetőséget szeretné használni, hajtsa végre a következő lépéseket:

Screenshot that shows an example of a multiselect M parameter.

Ha engedélyezni szeretné az összes kijelölése az országhoz:

  1. Az Ország speciális tulajdonságai között engedélyezze az Összes kijelölése váltógombot, amely lehetővé teszi az Összes érték kijelölése bemenetet. Szerkessze az Összes kijelölése értéket , vagy jegyezze fel az alapértelmezett értéket.

    Screenshot that shows Select all for an M parameter.

    A Select all value pass to the parameter as a list that contains the value you defined. Ezért ha ezt az értéket definiálja vagy az alapértelmezett értéket használja, győződjön meg arról, hogy az érték egyedi, és nem létezik a paraméterhez kötött mezőben.

  2. Indítsa el a Power Query-szerkesztő, válassza ki a lekérdezést, majd válassza a Speciális szerkesztő. Szerkessze az M-lekérdezést, hogy a Select all value (Az összes kijelölése) lehetőséggel hivatkozzon az Összes kijelölése lehetőségre.

    Screenshot that shows an M query.

  3. A Speciális szerkesztő adjon hozzá egy logikai kifejezést, amely kiértékeli, hogy true a paraméter engedélyezve van-e a Többszörös kijelöléshez, és tartalmazza az Összes kijelölése értéket, és egyéb esetben a következőt falseadja vissza:

    Screenshot that shows an example Boolean expression for Select all.

  4. Az összes logikai kifejezés kijelölése eredményének belefoglalása a forráslekérdezésbe. A példában van egy logikai lekérdezési paraméter a forráslekérdezésben includeAllCountries , amely az előző lépés logikai kifejezésének eredményére van beállítva. Ezt a paramétert a lekérdezés szűrő záradékában használhatja, így false a logikai szűrők a kiválasztott ország- vagy régiónevekre vonatkoznak, és true gyakorlatilag nem alkalmaz szűrőt.

    Screenshot that shows the Select all Boolean used in the source query.

  5. Miután frissítette az M-lekérdezést az új Select all értékre, használhatja a Select all függvényt szeletelőkben vagy szűrőkben.

    Screenshot that shows Select all in a slicer.

Hivatkozásként az előző példához tartozó teljes lekérdezést tekintheti meg:

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"

Lehetséges biztonsági kockázat

Azok a jelentésolvasók, akik dinamikusan meg tudják adni az M lekérdezési paraméterek értékeit, több adathoz férhetnek hozzá, vagy injektálási támadásokkal módosíthatják a forrásrendszert. Ez a lehetőség attól függ, hogyan hivatkozik az M-lekérdezés paramétereire, és hogy milyen értékeket ad át a paramétereknek.

Egy paraméteres Kusto-lekérdezés például a következőképpen lett létrehozva:

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

Nincs probléma egy olyan barátságos felhasználóval, aki megfelelő értéket ad át a paraméternek, Gamespéldául:

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

Előfordulhat azonban, hogy a támadó olyan értéket ad át, amely módosítja a lekérdezést, hogy több adathoz férhessen hozzá, 'Games'//például:

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

Ebben a példában a támadó a lekérdezés egy részének megjegyzéssé alakításával hozzáférhet a még ki nem adott játékokkal kapcsolatos információkhoz.

A kockázat csökkentése

A biztonsági kockázat csökkentése érdekében kerülje az M paraméterértékek sztringösszefűzését a lekérdezésen belül. Ehelyett használja ezeket a paraméterértékeket a forrás lekérdezésre redő M műveletekben, hogy az M motor és az összekötő hozza létre a végső lekérdezést.

Ha egy adatforrás támogatja a tárolt eljárások importálását, fontolja meg a lekérdezési logika ott való tárolását és az M-lekérdezésben való meghívását. Másik lehetőségként használjon paraméterátadási mechanizmust, amely a forrás lekérdezési nyelvére és összekötőire épül. Az Azure Data Explorer például beépített lekérdezésparaméter-képességekkel rendelkezik, amelyek az injektálási támadások elleni védelemre szolgálnak.

Íme néhány példa a következő kockázatcsökkentésekre:

  • Példa az M-lekérdezés szűrési műveleteire:

    Table.SelectRows(Source, (r) => r[Columns] = Parameter)
    
  • Példa, amely deklarálja a paramétert a forrás lekérdezésben, vagy egy forrás lekérdezési függvény bemeneteként adja át a paraméter értékét:

    declare query_parameters (Name of Parameter : Type of Parameter);
    
  • Példa egy tárolt eljárás közvetlen meghívására:

    let CustomerByProductFn = AzureDataExplorer.Contents("Help", "ContosoSales"){[Name="CustomerByProduct"]}[Data] in
    CustomerByProductFn({1, 3, 5})
    

Szempontok és korlátozások

A dinamikus M lekérdezési paraméterek használatakor a következő szempontokat és korlátozásokat kell figyelembe venni:

  • Egyetlen paraméter nem köthető több mezőhöz, és fordítva sem.
  • A dinamikus M lekérdezési paraméterek nem támogatják az összesítéseket.
  • A dinamikus M lekérdezési paraméterek nem támogatják a sorszintű biztonságot (RLS).
  • A paraméternevek nem lehetnek fenntartott adatelemzési kifejezések (DAX) szavak, és nem tartalmazhatnak szóközöket. A paraméternév végéhez fűzve Parameter elkerülheti ezt a korlátozást.
  • A táblázatnevek nem tartalmazhatnak szóközöket vagy speciális karaktereket.
  • Ha a paraméter az Date/Time adattípus, akkor azt az M lekérdezésben kell megadnia.DateTime.Date(<YourDateParameter>)
  • SQL-források használata esetén a paraméterérték minden módosításakor megjelenik egy megerősítést kérő párbeszédpanel. Ezt a párbeszédpanelt biztonsági beállítás okozza: Felhasználói jóváhagyás megkövetelése új natív adatbázis-lekérdezésekhez. Ezt a beállítást a Power BI Desktop beállításainak Biztonság szakaszában találja és kikapcsolhatja.
  • Előfordulhat, hogy a dinamikus M lekérdezési paraméterek nem működnek szemantikai modell elérésekor az Excelben.
  • A dinamikus M lekérdezési paraméterek nem támogatottak Power BI jelentéskészítő kiszolgáló.

Nem támogatott beépített paramétertípusok

  • Bármely
  • Időtartam
  • True/false
  • Bináris

Nem támogatott szűrők

  • Relatív időszeletelő vagy -szűrő
  • Relatív dátum
  • Hierarchiaszeletelő
  • Többmezős belefoglalási szűrő
  • Szűrők kizárása / Nem szűrők
  • Keresztkiemelés
  • Részletezési szűrő
  • Keresztfúró szűrő
  • Felső N szűrő

Nem támogatott műveletek

  • És
  • Tartalmazza
  • Kisebb mint
  • Nagyobb mint
  • A következővel kezdődik:
  • Nem a
  • Nem
  • Nem tartalmaz
  • Üres
  • Nem üres

A Power BI Desktop képességeivel kapcsolatos további információkért tekintse meg a következő erőforrásokat: