Δυναμικές παράμετροι ερωτήματος M στο Power BI Desktop
Αυτό το άρθρο περιγράφει τον τρόπο δημιουργίας και εργασίας με δυναμικές παραμέτρους ερωτήματος M στο Power BI Desktop. Με δυναμικές παραμέτρους ερωτήματος M, οι συντάκτες μοντέλων μπορούν να ρυθμίσουν τις τιμές φίλτρου ή αναλυτή που μπορούν να χρησιμοποιήσουν οι θεατές αναφοράς για μια παράμετρο ερωτήματος M. Οι δυναμικές παράμετροι ερωτήματος M παρέχουν στους συντάκτες μοντέλων περισσότερο έλεγχο στις επιλογές φίλτρου για ενσωμάτωση σε ερωτήματα προέλευσης DirectQuery.
Οι συντάκτες μοντέλων κατανοούν την προβλεπόμενη σημασιολογία των φίλτρων τους και συχνά γνωρίζουν πώς να συντάσσουν αποτελεσματικά ερωτήματα για την προέλευση δεδομένων τους. Με δυναμικές παραμέτρους ερωτήματος M, οι συντάκτες μοντέλων μπορούν να εξασφαλίσουν ότι οι επιλογές φίλτρου ενσωματώνουν στα ερωτήματα προέλευσης στο σωστό σημείο για να επιτύχουν τα αναμενόμενα αποτελέσματα με τη βέλτιστη απόδοση. Οι δυναμικές παράμετροι ερωτήματος M μπορεί να είναι ιδιαίτερα χρήσιμες για τη βελτιστοποίηση απόδοσης ερωτημάτων.
Παρακολουθήστε τη Sujata να εξηγεί και να χρησιμοποιεί δυναμικές παραμέτρους ερωτήματος M στο παρακάτω βίντεο και, στη συνέχεια, δοκιμάστε τις μόνοι σας.
Σημείωμα
Αυτό το βίντεο μπορεί να χρησιμοποιεί παλαιότερες εκδόσεις του Power BI Desktop ή της υπηρεσίας Power BI.
Προαπαιτούμενα στοιχεία
Για να ακολουθήσετε αυτές τις διαδικασίες, πρέπει να έχετε ένα έγκυρο ερώτημα M που χρησιμοποιεί έναν ή περισσότερους πίνακες DirectQuery.
Δημιουργία και χρήση δυναμικών παραμέτρων
Το παρακάτω παράδειγμα μεταβιβάζει μια μοναδική τιμή σε μια παράμετρο δυναμικά.
Προσθήκη παραμέτρων
Στο Power BI Desktop, επιλέξτε Μετασχηματισμός δεδομένων αρχικής σελίδας>Μετασχηματισμός δεδομένων> για να ανοίξετε το Πρόγραμμα επεξεργασίας Power Query.
Στο Πρόγραμμα επεξεργασίας Power Query, επιλέξτε Νέες παράμετροι στην περιοχή Διαχείριση παραμέτρων στην κορδέλα.
Στο παράθυρο Διαχείριση παραμέτρων, συμπληρώστε τις πληροφορίες σχετικά με την παράμετρο. Για περισσότερες πληροφορίες, ανατρέξτε στο θέμα Δημιουργία παραμέτρου.
Επιλέξτε Δημιουργία για να προσθέσετε περισσότερες παραμέτρους.
Όταν ολοκληρώσετε την προσθήκη παραμέτρων, επιλέξτε OK.
Αναφορά των παραμέτρων στο ερώτημα M
Αφού δημιουργήσετε τις παραμέτρους, μπορείτε να τις αναφέρετε στο ερώτημα M. Για να τροποποιήσετε το ερώτημα M, ενώ έχετε επιλέξει το ερώτημα, ανοίξτε το Προηγμένο πρόγραμμα επεξεργασίας.
Αναφέρετε τις παραμέτρους στο ερώτημα M, όπως επισημαίνεται με κίτρινο χρώμα στην παρακάτω εικόνα:
Όταν ολοκληρώσετε την επεξεργασία του ερωτήματος, επιλέξτε Τέλος.
Δημιουργία πινάκων τιμών
Δημιουργήστε έναν πίνακα για κάθε παράμετρο με μια στήλη που παρέχει τις πιθανές τιμές που είναι διαθέσιμες για δυναμική ρύθμιση με βάση την επιλογή φίλτρου. Σε αυτό το παράδειγμα, θέλετε οι StartTime
παράμετροι και EndTime
να είναι δυναμικές. Δεδομένου ότι αυτές οι παράμετροι απαιτούν μια Date/Time
παράμετρο, δημιουργείτε τις πιθανές εισόδους για να ορίσετε δυναμικά την ημερομηνία για την παράμετρο.
Στην κορδέλα του Power BI Desktop, στην περιοχή Μοντελοποίηση, επιλέξτε Νέος πίνακας.
Δημιουργήστε έναν πίνακα για τις τιμές της
StartTime
παραμέτρου, για παράδειγμα:StartDateTable = CALENDAR (DATE(2016,1,1), DATE(2016,12,31))
Δημιουργήστε έναν δεύτερο πίνακα για τις τιμές της
EndTime
παραμέτρου, για παράδειγμα:EndDateTable = CALENDAR (DATE(2016,1,1), DATE(2016,12,31))
Σημείωμα
Χρησιμοποιήστε ένα όνομα στήλης που δεν υπάρχει σε έναν πραγματικό πίνακα. Εάν χρησιμοποιείτε το ίδιο όνομα με μια πραγματική στήλη πίνακα, η επιλεγμένη τιμή εφαρμόζεται ως φίλτρο στο ερώτημα.
Σύνδεση των πεδίων με τις παραμέτρους
Τώρα που δημιουργήσατε τους πίνακες με τα Date
πεδία, μπορείτε να συνδέσετε κάθε πεδίο σε μια παράμετρο. Η σύνδεση ενός πεδίου σε μια παράμετρο σημαίνει ότι καθώς αλλάζει η επιλεγμένη τιμή πεδίου, η τιμή μεταβιβάζει στην παράμετρο και ενημερώνει το ερώτημα που αναφέρεται στην παράμετρο.
Για να συνδέσετε ένα πεδίο, στην προβολή Μοντέλο του Power BI Desktop, επιλέξτε το πεδίο που μόλις δημιουργήθηκε και στο τμήμα παραθύρου Ιδιότητες, επιλέξτε Για προχωρημένους.
Σημείωμα
Ο τύπος δεδομένων στήλης θα πρέπει να συμφωνεί με τον τύπο δεδομένων παραμέτρου M.
Επιλέξτε την αναπτυσσόμενη λίστα στην περιοχή Σύνδεση με την παράμετρο και επιλέξτε την παράμετρο που θέλετε να συνδέσετε στο πεδίο:
Δεδομένου ότι αυτό το παράδειγμα αφορά τον ορισμό της παραμέτρου σε μία μόνο τιμή, διατηρήστε τη ρύθμιση Πολλαπλή επιλογή ορισμένη σε Όχι, το οποίο είναι η προεπιλογή:
Εάν ορίσετε την αντιστοιχισμένη στήλη σε Όχι για πολλαπλή επιλογή, πρέπει να χρησιμοποιήσετε μία μόνο λειτουργία επιλογής στον αναλυτή ή να απαιτήσετε μία μόνο επιλογή στην κάρτα φίλτρου.
Εάν οι υποθέσεις χρήσης σας απαιτούν διαβίβαση πολλών τιμών σε μία μόνο παράμετρο, ορίστε το στοιχείο ελέγχου σε Ναι και βεβαιωθείτε ότι το ερώτημα M έχει ρυθμιστεί ώστε να αποδέχεται πολλές τιμές. Ακολουθεί ένα παράδειγμα για
RepoNameParameter
το , το οποίο επιτρέπει πολλαπλές τιμές:Επαναλάβετε αυτά τα βήματα εάν έχετε άλλα πεδία για σύνδεση με άλλες παραμέτρους.
Μπορείτε πλέον να αναφέρετε αυτό το πεδίο σε έναν αναλυτή ή ως φίλτρο:
Ενεργοποίηση επιλογής όλων
Σε αυτό το παράδειγμα, το μοντέλο Power BI Desktop έχει ένα πεδίο που ονομάζεται Χώρα, το οποίο είναι μια λίστα με χώρες/περιοχές που συνδέονται με μια παράμετρο M που ονομάζεται countryNameMParameter. Αυτή η παράμετρος είναι ενεργοποιημένη για Πολλαπλή επιλογή, αλλά δεν είναι ενεργοποιημένη για Επιλογή όλων. Για να μπορέσετε να χρησιμοποιήσετε την επιλογή Επιλογή όλων σε έναν αναλυτή ή κάρτα φίλτρου, ακολουθήστε τα παρακάτω βήματα που έχουν προστεθεί:
Για να ενεργοποιήσετε την επιλογή Επιλογή όλων για τη χώρα:
Στις Ιδιότητες για προχωρημένους για τη Χώρα, ενεργοποιήστε το κουμπί εναλλαγής Επιλογή όλων, το οποίο ενεργοποιεί την είσοδο Επιλογή όλων των τιμών. Επεξεργαστείτε την επιλογή Επιλογή όλων των τιμών ή σημειώστε την προεπιλεγμένη τιμή.
Η επιλογή Επιλογή όλων των τιμών μεταβιβάζει στην παράμετρο ως λίστα που περιέχει την τιμή που ορίσατε. Επομένως, όταν ορίζετε αυτή την τιμή ή χρησιμοποιείτε την προεπιλεγμένη τιμή, βεβαιωθείτε ότι η τιμή είναι μοναδική και δεν υπάρχει στο πεδίο που είναι συνδεδεμένο με την παράμετρο.
Εκκινήστε το Πρόγραμμα επεξεργασίας Power Query, επιλέξτε το ερώτημα και, στη συνέχεια, επιλέξτε Προηγμένο πρόγραμμα επεξεργασίας. Επεξεργαστείτε το ερώτημα M για να χρησιμοποιήσετε την τιμή Επιλογή όλων για να αναφερθείτε στην επιλογή Επιλογή όλων .
Στο Προηγμένο πρόγραμμα επεξεργασίας, προσθέστε μια δυαδική παράσταση που αξιολογείται
true
εάν η παράμετρος είναι ενεργοποιημένη για Πολλαπλή επιλογή και περιέχει την τιμή Επιλογή όλων και επιστρέφει με διαφορετικό τρόποfalse
:Ενσωματώστε το αποτέλεσμα της παράστασης Επιλογή όλων των δυαδικών τιμών στο ερώτημα προέλευσης. Το παράδειγμα έχει μια παράμετρο δυαδικού ερωτήματος στο ερώτημα προέλευσης που ονομάζεται
includeAllCountries
, η οποία ορίζεται στο αποτέλεσμα της δυαδικής παράστασης από το προηγούμενο βήμα. Μπορείτε να χρησιμοποιήσετε αυτή την παράμετρο σε έναν όρο φίλτρου στο ερώτημα, έτσι ώστεfalse
για τα δυαδικά φίλτρα στα επιλεγμένα ονόματα χώρας ή περιοχής καιtrue
να μην εφαρμόζει κανένα φίλτρο.Αφού ενημερώσετε το ερώτημα M ώστε να λαμβάνει υπόψη τη νέα τιμή Επιλογή όλων, μπορείτε να χρησιμοποιήσετε τη συνάρτηση Select all σε αναλυτές ή φίλτρα.
Για αναφορά, δείτε το πλήρες ερώτημα για το προηγούμενο παράδειγμα:
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"
Δυνητικός κίνδυνος ασφαλείας
Οι αναγνώστες αναφορών που μπορούν να ορίσουν δυναμικά τις τιμές για παραμέτρους ερωτήματος M μπορεί να έχουν πρόσβαση σε περισσότερα δεδομένα ή να ενεργοποιήσουν τροποποιήσεις στο σύστημα προέλευσης, χρησιμοποιώντας επιθέσεις με προσθήκη κακόβουλου κώδικα. Αυτή η πιθανότητα εξαρτάται από τον τρόπο με τον οποίο αναφέρεστε στις παραμέτρους στο ερώτημα M και τις τιμές που μεταβιβάζετε στις παραμέτρους.
Για παράδειγμα, έχετε ένα παραμετροποιημένο ερώτημα Kusto που κατασκευάστηκε ως εξής:
Products
| where Category == [Parameter inserted here] & HasReleased == 'True'
| project ReleaseDate, Name, Category, Region
Δεν υπάρχουν προβλήματα με έναν φιλικό χρήστη που διαβιβάζει μια κατάλληλη τιμή για την παράμετρο, για παράδειγμα, Games
:
| where Category == 'Games' & HasReleased == 'True'
Ωστόσο, ένας εισβολέας μπορεί να είναι σε θέση να περάσει μια τιμή που τροποποιεί το ερώτημα για να αποκτήσει πρόσβαση σε περισσότερα δεδομένα, για παράδειγμα, 'Games'//
:
Products
| where Category == 'Games'// & HasReleased == 'True'
| project ReleaseDate, Name, Category, Region
Σε αυτό το παράδειγμα, ο εισβολέας μπορεί να αποκτήσει πρόσβαση σε πληροφορίες σχετικά με παιχνίδια που δεν έχουν κυκλοφορήσει ακόμα, αλλάζοντας μέρος του ερωτήματος σε ένα σχόλιο.
Μετριασμός του κινδύνου
Για να μετριάσετε τον κίνδυνο ασφαλείας, αποφύγετε τη συνένωση συμβολοσειρών τιμών παραμέτρων M μέσα στο ερώτημα. Αντί για αυτό, καταναλώστε αυτές τις τιμές παραμέτρων σε λειτουργίες M που αναδιπλώνονται στο ερώτημα προέλευσης, έτσι ώστε ο μηχανισμός M και η σύνδεση να κατασκευάσουν το τελικό ερώτημα.
Εάν μια προέλευση δεδομένων υποστηρίζει την εισαγωγή αποθηκευμένων διαδικασιών, εξετάστε το ενδεχόμενο να αποθηκεύσετε εκεί τη λογική του ερωτήματός σας και να την επικαλεσθείτε στο ερώτημα M. Εναλλακτικά, εάν υπάρχει, χρησιμοποιήστε έναν μηχανισμό διαβίβασης παραμέτρων που είναι ενσωματωμένος στη γλώσσα και τις συνδέσεις του ερωτήματος προέλευσης. Για παράδειγμα, η Εξερεύνηση δεδομένων Azure διαθέτει ενσωματωμένες δυνατότητες παραμέτρων ερωτήματος που έχουν σχεδιαστεί για προστασία από επιθέσεις με προσθήκη κακόβουλου κώδικα.
Ακολουθούν ορισμένα παραδείγματα για αυτούς τους μετριασμούς:
Παράδειγμα που χρησιμοποιεί τις λειτουργίες φιλτραρίσματος του ερωτήματος M:
Table.SelectRows(Source, (r) => r[Columns] = Parameter)
Παράδειγμα που δηλώνει την παράμετρο στο ερώτημα προέλευσης ή διαβιβάζει την τιμή παραμέτρου ως είσοδο σε μια συνάρτηση ερωτήματος προέλευσης:
declare query_parameters (Name of Parameter : Type of Parameter);
Παράδειγμα απευθείας κλήσης μιας αποθηκευμένης διαδικασίας:
let CustomerByProductFn = AzureDataExplorer.Contents("Help", "ContosoSales"){[Name="CustomerByProduct"]}[Data] in CustomerByProductFn({1, 3, 5})
Ζητήματα προς εξέταση και περιορισμοί
Υπάρχουν ορισμένα ζητήματα και περιορισμοί που πρέπει να λάβετε υπόψη όταν χρησιμοποιείτε δυναμικές παραμέτρους ερωτήματος M:
- Μια μοναδική παράμετρος δεν μπορεί να συνδεθεί σε πολλαπλά πεδία ή το αντίστροφο.
- Οι δυναμικές παράμετροι ερωτήματος M δεν υποστηρίζουν συναθροίσεις.
- Οι δυναμικές παράμετροι ερωτήματος M δεν υποστηρίζουν ασφάλεια σε επίπεδο γραμμών (RLS).
- Τα ονόματα παραμέτρων δεν μπορεί να είναι δεσμευμένες λέξεις παραστάσεων ανάλυσης δεδομένων (DAX) ούτε να περιέχουν κενά διαστήματα. Μπορείτε να προσαρτήσετε
Parameter
στο τέλος του ονόματος παραμέτρου για να αποφύγετε αυτόν τον περιορισμό. - Τα ονόματα πινάκων δεν μπορούν να περιέχουν κενά διαστήματα ή ειδικούς χαρακτήρες.
- Εάν η παράμετρος είναι ο
Date/Time
τύπος δεδομένων, πρέπει να την εισαγάγετε εντός του ερωτήματος M ωςDateTime.Date(<YourDateParameter>)
. - Εάν χρησιμοποιείτε προελεύσεις SQL, μπορεί να λαμβάνετε ένα παράθυρο διαλόγου επιβεβαίωσης κάθε φορά που αλλάζει η τιμή της παραμέτρου. Αυτό το παράθυρο διαλόγου οφείλεται σε μια ρύθμιση ασφάλειας: Να απαιτείται έγκριση χρήστη για νέα εγγενή ερωτήματα βάσης δεδομένων. Μπορείτε να βρείτε και να απενεργοποιήσετε αυτήν τη ρύθμιση στην ενότητα Ασφάλεια στις Επιλογές Power BI Desktop.
- Οι δυναμικές παράμετροι ερωτήματος M ενδέχεται να μην λειτουργούν κατά την πρόσβαση σε ένα μοντέλο σημασιολογίας στο Excel.
- Οι δυναμικές παράμετροι ερωτήματος M δεν υποστηρίζονται στον Power BI Report Server.
- Η εναλλαγή προελεύσεων δεδομένων με χρήση δυναμικών παραμέτρων ερωτήματος M δεν υποστηρίζεται στην υπηρεσία Power BI. Ανατρέξτε στο θέμα Ανανέωση και δυναμικές προελεύσεις δεδομένων για πρόσθετες πληροφορίες.
Μη υποστηριζόμενοι έτοιμοι τύποι παραμέτρων
- Any
- Διάρκεια
- Αληθές/Ψευδές
- Δυαδικό
Μη υποστηριζόμενα φίλτρα
- Αναλυτής σχετικής τιμής χρόνου ή φίλτρο
- Σχετική ημερομηνία
- Αναλυτής ιεραρχίας
- Φίλτρο συμπερίληψης πολλαπλών πεδίων
- Εξαίρεση φίλτρων / Όχι φίλτρων
- Διασταυρούμενη επισήμανση
- Φίλτρο διερεύνησης
- Φίλτρο διασταυρούμενων λεπτομερούς έρευνας
- Φίλτρο κορυφαίων N
Μη υποστηριζόμενες λειτουργίες
- And
- Περιέχει
- Μικρότερο από
- Μεγαλύτερο από
- Αρχίζει με
- Δεν αρχίζει από
- Δεν είναι
- Δεν περιέχει
- Είναι κενό
- Δεν είναι κενό
Σχετικό περιεχόμενο
Για περισσότερες πληροφορίες σχετικά με τις δυνατότητες του Power BI Desktop, ανατρέξτε στους παρακάτω πόρους: