Κοινή χρήση μέσω


Δυναμικές παράμετροι ερωτήματος M στο Power BI Desktop

Αυτό το άρθρο περιγράφει τον τρόπο δημιουργίας και εργασίας με δυναμικές παραμέτρους ερωτήματος M στο Power BI Desktop. Με δυναμικές παραμέτρους ερωτήματος M, οι συντάκτες μοντέλων μπορούν να ρυθμίσουν τις τιμές φίλτρου ή αναλυτή που μπορούν να χρησιμοποιήσουν οι θεατές αναφοράς για μια παράμετρο ερωτήματος M. Οι δυναμικές παράμετροι ερωτήματος M παρέχουν στους συντάκτες μοντέλων περισσότερο έλεγχο στις επιλογές φίλτρου για ενσωμάτωση σε ερωτήματα προέλευσης DirectQuery.

Οι συντάκτες μοντέλων κατανοούν την προβλεπόμενη σημασιολογία των φίλτρων τους και συχνά γνωρίζουν πώς να συντάσσουν αποτελεσματικά ερωτήματα για την προέλευση δεδομένων τους. Με δυναμικές παραμέτρους ερωτήματος M, οι συντάκτες μοντέλων μπορούν να εξασφαλίσουν ότι οι επιλογές φίλτρου ενσωματώνουν στα ερωτήματα προέλευσης στο σωστό σημείο για να επιτύχουν τα αναμενόμενα αποτελέσματα με τη βέλτιστη απόδοση. Οι δυναμικές παράμετροι ερωτήματος M μπορεί να είναι ιδιαίτερα χρήσιμες για τη βελτιστοποίηση απόδοσης ερωτημάτων.

Παρακολουθήστε τη Sujata να εξηγεί και να χρησιμοποιεί δυναμικές παραμέτρους ερωτήματος M στο παρακάτω βίντεο και, στη συνέχεια, δοκιμάστε τις μόνοι σας.

Σημείωμα

Αυτό το βίντεο μπορεί να χρησιμοποιεί παλαιότερες εκδόσεις του Power BI Desktop ή του Υπηρεσία Power BI.

Προαπαιτούμενα στοιχεία

Για να ακολουθήσετε αυτές τις διαδικασίες, πρέπει να έχετε ένα έγκυρο ερώτημα M που χρησιμοποιεί έναν ή περισσότερους πίνακες DirectQuery.

Δημιουργία και χρήση δυναμικών παραμέτρων

Το παρακάτω παράδειγμα μεταβιβάζει μια μοναδική τιμή σε μια παράμετρο δυναμικά.

Προσθήκη παραμέτρων

  1. Στο Power BI Desktop, επιλέξτε Μετασχηματισμός δεδομένων αρχικής σελίδας>Μετασχηματισμός δεδομένων> για να ανοίξετε το πρόγραμμα επεξεργασίας Power Query.

  2. Στο πρόγραμμα επεξεργασίας Power Query, επιλέξτε Νέες παράμετροι στην περιοχή Διαχείριση παραμέτρων στην κορδέλα.

    Screenshot that shows the Ribbon menu.

  3. Στο παράθυρο Διαχείριση παραμέτρων, συμπληρώστε τις πληροφορίες σχετικά με την παράμετρο. Για περισσότερες πληροφορίες, ανατρέξτε στο θέμα Δημιουργία παραμέτρου.

    Screenshot that shows parameter information.

  4. Επιλέξτε Δημιουργία για να προσθέσετε περισσότερες παραμέτρους.

    Screenshot that shows New to create another parameter.

  5. Όταν ολοκληρώσετε την προσθήκη παραμέτρων, επιλέξτε OK.

Αναφορά των παραμέτρων στο ερώτημα M

  1. Αφού δημιουργήσετε τις παραμέτρους, μπορείτε να τις αναφέρετε στο ερώτημα M. Για να τροποποιήσετε το ερώτημα M, ενώ έχετε επιλέξει το ερώτημα, ανοίξτε το Προηγμένο πρόγραμμα επεξεργασίας.

    Screenshot that shows opening the Advanced Editor.

  2. Αναφέρετε τις παραμέτρους στο ερώτημα M, όπως επισημαίνεται με κίτρινο χρώμα στην παρακάτω εικόνα:

    Screenshot that shows referencing the parameter.

  3. Όταν ολοκληρώσετε την επεξεργασία του ερωτήματος, επιλέξτε Τέλος.

Δημιουργία πινάκων τιμών

Δημιουργήστε έναν πίνακα για κάθε παράμετρο με μια στήλη που παρέχει τις πιθανές τιμές που είναι διαθέσιμες για δυναμική ρύθμιση με βάση την επιλογή φίλτρου. Σε αυτό το παράδειγμα, θέλετε οι StartTime παράμετροι και EndTime να είναι δυναμικές. Δεδομένου ότι αυτές οι παράμετροι απαιτούν μια Date/Time παράμετρο, δημιουργείτε τις πιθανές εισόδους για να ορίσετε δυναμικά την ημερομηνία για την παράμετρο.

  1. Στην κορδέλα του Power BI Desktop, στην περιοχή Μοντελοποίηση, επιλέξτε Νέος πίνακας.

    Screenshot that shows selecting New table.

  2. Δημιουργήστε έναν πίνακα για τις τιμές της StartTime παραμέτρου, για παράδειγμα:

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

    Screenshot that shows the first table.

  3. Δημιουργήστε έναν δεύτερο πίνακα για τις τιμές της EndTime παραμέτρου, για παράδειγμα:

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

    Screenshot that shows the second table.

    Σημείωμα

    Χρησιμοποιήστε ένα όνομα στήλης που δεν υπάρχει σε έναν πραγματικό πίνακα. Εάν χρησιμοποιείτε το ίδιο όνομα με μια πραγματική στήλη πίνακα, η επιλεγμένη τιμή εφαρμόζεται ως φίλτρο στο ερώτημα.

Σύνδεση των πεδίων με τις παραμέτρους

Τώρα που δημιουργήσατε τους πίνακες με τα Date πεδία, μπορείτε να συνδέσετε κάθε πεδίο σε μια παράμετρο. Η σύνδεση ενός πεδίου σε μια παράμετρο σημαίνει ότι καθώς αλλάζει η επιλεγμένη τιμή πεδίου, η τιμή μεταβιβάζει στην παράμετρο και ενημερώνει το ερώτημα που αναφέρεται στην παράμετρο.

  1. Για να συνδέσετε ένα πεδίο, στην προβολή Μοντέλο του Power BI Desktop, επιλέξτε το πεδίο που μόλις δημιουργήθηκε και στο τμήμα παραθύρου Ιδιότητες, επιλέξτε Για προχωρημένους.

    Σημείωμα

    Ο τύπος δεδομένων στήλης θα πρέπει να συμφωνεί με τον τύπο δεδομένων παραμέτρου M.

    Screenshot that shows binding the field to a parameter.

  2. Επιλέξτε την αναπτυσσόμενη λίστα στην περιοχή Σύνδεση με την παράμετρο και επιλέξτε την παράμετρο που θέλετε να συνδέσετε στο πεδίο:

    Screenshot that shows binding the parameter to the field.

    Δεδομένου ότι αυτό το παράδειγμα αφορά τον ορισμό της παραμέτρου σε μία μόνο τιμή, διατηρήστε τη ρύθμιση Πολλαπλή επιλογή ορισμένη σε Όχι, το οποίο είναι η προεπιλογή:

    Screenshot that shows multi-select set to No.

    Εάν ορίσετε την αντιστοιχισμένη στήλη σε Όχι για πολλαπλή επιλογή, πρέπει να χρησιμοποιήσετε μία μόνο λειτουργία επιλογής στον αναλυτή ή να απαιτήσετε μία μόνο επιλογή στην κάρτα φίλτρου.

    Εάν οι υποθέσεις χρήσης σας απαιτούν διαβίβαση πολλών τιμών σε μία μόνο παράμετρο, ορίστε το στοιχείο ελέγχου σε Ναι και βεβαιωθείτε ότι το ερώτημα M έχει ρυθμιστεί ώστε να αποδέχεται πολλές τιμές. Ακολουθεί ένα παράδειγμα για RepoNameParameterτο , το οποίο επιτρέπει πολλαπλές τιμές:

    Screenshot that shows a multivalue example.

  3. Επαναλάβετε αυτά τα βήματα εάν έχετε άλλα πεδία για σύνδεση με άλλες παραμέτρους.

    Screenshot that shows configuring more parameters.

Μπορείτε πλέον να αναφέρετε αυτό το πεδίο σε έναν αναλυτή ή ως φίλτρο:

Screenshot that shows referencing the fields.

Ενεργοποίηση επιλογής όλων

Σε αυτό το παράδειγμα, το μοντέλο Power BI Desktop έχει ένα πεδίο που ονομάζεται Χώρα, το οποίο είναι μια λίστα με χώρες/περιοχές που συνδέονται με μια παράμετρο M που ονομάζεται countryNameMParameter. Αυτή η παράμετρος είναι ενεργοποιημένη για Πολλαπλή επιλογή, αλλά δεν είναι ενεργοποιημένη για Επιλογή όλων. Για να μπορέσετε να χρησιμοποιήσετε την επιλογή Επιλογή όλων σε έναν αναλυτή ή κάρτα φίλτρου, ακολουθήστε τα παρακάτω βήματα που έχουν προστεθεί:

Screenshot that shows an example of a multiselect M parameter.

Για να ενεργοποιήσετε την επιλογή Επιλογή όλων για τη χώρα:

  1. Στις Ιδιότητες για προχωρημένους για τη Χώρα, ενεργοποιήστε το κουμπί εναλλαγής Επιλογή όλων, το οποίο ενεργοποιεί την είσοδο Επιλογή όλων των τιμών. Επεξεργαστείτε την επιλογή Επιλογή όλων των τιμών ή σημειώστε την προεπιλεγμένη τιμή.

    Screenshot that shows Select all for an M parameter.

    Η επιλογή Επιλογή όλων των τιμών μεταβιβάζει στην παράμετρο ως λίστα που περιέχει την τιμή που ορίσατε. Επομένως, όταν ορίζετε αυτή την τιμή ή χρησιμοποιείτε την προεπιλεγμένη τιμή, βεβαιωθείτε ότι η τιμή είναι μοναδική και δεν υπάρχει στο πεδίο που είναι συνδεδεμένο με την παράμετρο.

  2. Εκκινήστε το πρόγραμμα επεξεργασίας Power Query, επιλέξτε το ερώτημα και, στη συνέχεια, επιλέξτε Προηγμένο πρόγραμμα επεξεργασίας. Επεξεργαστείτε το ερώτημα M για να χρησιμοποιήσετε την τιμή Επιλογή όλων για να αναφερθείτε στην επιλογή Επιλογή όλων .

    Screenshot that shows an M query.

  3. Στο Προηγμένο πρόγραμμα επεξεργασίας, προσθέστε μια δυαδική παράσταση που αξιολογεί true εάν η παράμετρος έχει ενεργοποιηθεί για Πολλαπλή επιλογή και περιέχει την τιμή Επιλογή όλων και επιστρέφει με διαφορετικό τρόπο false:

    Screenshot that shows an example Boolean expression for Select all.

  4. Ενσωματώστε το αποτέλεσμα της παράστασης Επιλογή όλων των δυαδικών τιμών στο ερώτημα προέλευσης. Το παράδειγμα έχει μια παράμετρο δυαδικού ερωτήματος στο ερώτημα προέλευσης που ονομάζεται includeAllCountries , η οποία ορίζεται στο αποτέλεσμα της δυαδικής παράστασης από το προηγούμενο βήμα. Μπορείτε να χρησιμοποιήσετε αυτή την παράμετρο σε έναν όρο φίλτρου στο ερώτημα, έτσι ώστε false για τα δυαδικά φίλτρα στα επιλεγμένα ονόματα χώρας ή περιοχής και true να μην εφαρμόζει κανένα φίλτρο.

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

  5. Αφού ενημερώσετε το ερώτημα M ώστε να λαμβάνει υπόψη τη νέα τιμή Επιλογή όλων, μπορείτε να χρησιμοποιήσετε τη συνάρτηση Select all σε αναλυτές ή φίλτρα.

    Screenshot that shows Select all in a slicer.

Για αναφορά, δείτε το πλήρες ερώτημα για το προηγούμενο παράδειγμα:

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.

Μη υποστηριζόμενοι έτοιμοι τύποι παραμέτρων

  • Any
  • Διάρκεια
  • Αληθές/Ψευδές
  • Δυαδικό

Μη υποστηριζόμενα φίλτρα

  • Αναλυτής σχετικής τιμής χρόνου ή φίλτρο
  • Σχετική ημερομηνία
  • Αναλυτής ιεραρχίας
  • Φίλτρο συμπερίληψης πολλαπλών πεδίων
  • Εξαίρεση φίλτρων / Όχι φίλτρων
  • Διασταυρούμενη επισήμανση
  • Φίλτρο διερεύνησης
  • Διασταυρούμενο φίλτρο διερεύνησης
  • Φίλτρο κορυφαίων N

Μη υποστηριζόμενες λειτουργίες

  • And
  • Περιέχει
  • Μικρότερο από
  • Μεγαλύτερο από
  • Αρχίζει με
  • Δεν αρχίζει από
  • Δεν είναι
  • Δεν περιέχει
  • Είναι κενό
  • Δεν είναι κενό

Για περισσότερες πληροφορίες σχετικά με τις δυνατότητες του Power BI Desktop, ανατρέξτε στους παρακάτω πόρους: