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


Δυναμικές παράμετροι ερωτήματος 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, επιλέξτε Νέες παράμετροι στην περιοχή Διαχείριση παραμέτρων στην κορδέλα.

    Στιγμιότυπο οθόνης που εμφανίζει το μενού κορδέλας.

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

    Στιγμιότυπο οθόνης που εμφανίζει πληροφορίες παραμέτρου.

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

    Στιγμιότυπο οθόνης που εμφανίζει τη Δημιουργία για τη δημιουργία μιας άλλης παραμέτρου.

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

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

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

    Στιγμιότυπο οθόνης που εμφανίζει το άνοιγμα του Προηγμένου προγράμματος επεξεργασίας.

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

    Στιγμιότυπο οθόνης που εμφανίζει την αναφορά της παραμέτρου.

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

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

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

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

    Στιγμιότυπο οθόνης που εμφανίζει την επιλογή

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

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

    Στιγμιότυπο οθόνης που εμφανίζει τον πρώτο πίνακα.

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

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

    Στιγμιότυπο οθόνης που εμφανίζει τον δεύτερο πίνακα.

    Σημείωμα

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

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

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

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

    Σημείωμα

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

    Στιγμιότυπο οθόνης που εμφανίζει σύνδεση του πεδίου σε μια παράμετρο.

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

    Στιγμιότυπο οθόνης που εμφανίζει τη σύνδεση της παραμέτρου στο πεδίο.

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

    Στιγμιότυπο οθόνης που εμφανίζει την πολλαπλή επιλογή ορισμένη σε Όχι.

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

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

    Στιγμιότυπο οθόνης που εμφανίζει ένα παράδειγμα πολλών οθονών.

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

    Στιγμιότυπο οθόνης που εμφανίζει τη ρύθμιση παραμέτρων περισσότερων παραμέτρων.

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

Στιγμιότυπο οθόνης που εμφανίζει την αναφορά στα πεδία.

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

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

Στιγμιότυπο οθόνης που εμφανίζει ένα παράδειγμα μιας παραμέτρου M πολλαπλών επιλογών.

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

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

    Στιγμιότυπο οθόνης που εμφανίζει την επιλογή όλων για μια παράμετρο M.

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

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

    Στιγμιότυπο οθόνης που εμφανίζει ένα ερώτημα M.

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

    Στιγμιότυπο οθόνης που εμφανίζει ένα παράδειγμα δυαδικής παράστασης για επιλογή όλων.

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

    Στιγμιότυπο οθόνης που εμφανίζει την επιλογή όλων των δυαδικών δεδομένων που χρησιμοποιούνται στο ερώτημα προέλευσης.

  5. Αφού ενημερώσετε το ερώτημα 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, ανατρέξτε στους παρακάτω πόρους: