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
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.
A Power Query-szerkesztő válassza az Új paramétereklehetőséget a menüszalag Paraméterek kezelése területén.
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.
További paraméterek hozzáadásához válassza az Új lehetőséget.
Ha befejezte a paraméterek hozzáadását, válassza az OK gombot.
Az M-lekérdezés paramétereinek hivatkozása
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.
Hivatkozzon az M-lekérdezés paramétereire a következő képen sárga színnel kiemelve:
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.
A Power BI Desktop menüszalagJának Modellezés területén válassza az Új táblázat lehetőséget.
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))
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))
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.
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.
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:
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:
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,
RepoNameParameter
amely több értéket engedélyez:Ismételje meg ezeket a lépéseket, ha más mezőket szeretne más paraméterekhez kötni.
Most már hivatkozhat erre a mezőre egy szeletelőben vagy szűrőként:
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:
Ha engedélyezni szeretné az összes kijelölése az országhoz:
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.
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.
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.
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őtfalse
adja vissza: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, ígyfalse
a logikai szűrők a kiválasztott ország- vagy régiónevekre vonatkoznak, éstrue
gyakorlatilag nem alkalmaz szűrőt.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.
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, Games
pé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
Kapcsolódó tartalom
A Power BI Desktop képességeivel kapcsolatos további információkért tekintse meg a következő erőforrásokat: