Dynamische M-queryparameters in Power BI Desktop (preview)Dynamic M query parameters in Power BI Desktop (preview)

Met behulp van dynamische M-queryparameters kunnen modelontwerpers rapportgebruikers filters of slicers laten gebruiken om de waarde(n) in te stellen voor een M-queryparameter, wat zeer nuttig kan zijn voor de optimalisatie van queryprestaties.With Dynamic M Query Parameters, model authors can let report viewers to use filters or slicers to set the value(s) for an M Query Parameter, which can be especially useful for query performance optimizations. Met dynamische M-queryparameters hebben modelontwerpers extra controle over hoe filterselecties worden opgenomen in DirectQuery-bronquery's.With Dynamic M Query Parameters, model authors have additional control over how filter selections get incorporated into DirectQuery source queries.

Als modelontwerpers de beoogde semantiek van hun filters begrijpen, weten ze vaak ook hoe ze efficiënte query's kunnen schrijven voor hun gegevensbron. Die kennis stelt ze in staat om op de juiste plek filterselecties op te nemen in bronquery's om de beoogde resultaten te bereiken met betere prestaties.When model authors understand the intended semantics of their filters, they often know how to write efficient queries against their data source, and can thus ensure filter selections get incorporated into source queries at the right point to achieve their intended results with improved performance.

Dynamische M-queryparameters inschakelenEnabling Dynamic M query parameters

De functie Dynamische M-queryparameters is momenteel in preview en moet expliciet worden ingeschakeld om te kunnen worden gebruikt.Dynamic M Query Parameters are currently in preview, and must be enabled to be used. Selecteer Bestand > Opties en Instellingen > Opties en selecteer vervolgens Preview-functies in het linkerdeelvenster.Select File > Options and settings > Options and then select Preview features from the left pane. Zorg ervoor dat het selectievakje Dynamische M-queryparameters is ingeschakeld.From there, make sure the Dynamic M Query Parameters checkbox is selected. U moet Power BI Desktop opnieuw starten om de functie in te schakelen.You may need to restart Power BI Desktop for the change to be enabled.

De preview-functie inschakelen

Als vereiste voor deze functie moet u een geldige M queryparameter hebben gemaakt en moet hiernaar worden verwezen in een of meer DirectQuery-tabellen.As a prerequisite for this feature, you must have a valid M Query Parameter created and referred in one or more Direct Query tables.

Notitie

Raadpleeg de sectie Overwegingen en beperkingen in dit artikel, omdat niet alle DirectQuery-bronnen worden ondersteund met deze functie.Be sure to check the Considerations and limitations section in this article, since not all DirectQuery sources are supported with this feature.

Laten we stapsgewijs een voorbeeld doornemen om een enkele waarde dynamisch door te geven aan een parameter:Let's step through an example for passing a single value to a parameter dynamically:

  1. Start in Power BI Desktop Power Query vanaf het tabblad Gegevens en selecteer Nieuwe parameter via de knop Parameters beheren op het lint.In Power BI Desktop, launch Power Query from the Data tab, and select New Parameters under the Manage Parameters button in the ribbon.

    Lintmenu

  2. Vul vervolgens de volgende gegevens in voor de parameter.Then fill out the following information about the Parameter.

    Parametergegevens

  3. Klik op Nieuw als u nog meer parameters wilt toevoegen.Click New again if you have more parameters to add.

    Nog een parameter maken

  4. Als u de parameters hebt gemaakt, kunt u ernaar verwijzen in de M-query.Once you've created the parameters, you can reference them in the M query. Als u de M-query wilt wijzigen, opent u de geavanceerd editor terwijl de query is geselecteerd die u wilt wijzigen:To modify the M Query, open the Advanced editor while you have the Query that you want to modify selected:

    Geavanceerde editor openen

  5. Verwijs vervolgens naar de parameters in de M-query, die hieronder geel zijn gemarkeerd.Next, reference the parameters in the M Query, highlighted in yellow in the following image.

    Naar de parameters verwijzen

  6. De parameters zijn gemaakt en u hebt ernaar verwezen in de M-query. De volgende stap is het maken van een tabel met een kolom die de mogelijke waarden bevat die beschikbaar zijn voor die parameter.Now that you have created the parameters and referenced them in the M Query, next, you will need to create a table with a column that provides the possible values available for that parameter. Hierdoor kunnen de parameters dynamisch worden ingesteld op basis van filterselectie.This will allow it such that the parameters are dynamically set based on filter selection. In dit voorbeeld willen we dat de parameters StartTime en EndTime dynamisch zijn.In this example, we want our StartTime Parameter and EndTime Parameter to be dynamic. Aangezien deze parameters een Date/Time-parameter vereisen, moeten we datuminvoer genereren die kan worden gebruikt voor het instellen van de datum voor de parameter.Since these parameters are requiring a Date/Time parameter, I want to generate date inputs that can be used to set the date for the parameter. Hiervoor gaan we eerst een nieuwe tabel maken:To start, we create a new table:

    Een nieuwe tabel maken

  7. Dit is de eerste tabel die is gemaakt voor de parameter StartTime:Here's the first table I created for the values for StartTime Parameter:

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

    Een tabel maken

  8. Dit is de tweede tabel die is gemaakt voor de waarden voor de parameter EndTime:Here's the second table I created for the values for EndTime Parameter:

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

    De tweede tabel maken

    Notitie

    Het is raadzaam om een kolomnaam te gebruiken die niet wordt gebruikt in een andere tabel.We recommend using a different column name that is not in an actual table. Als kolommen dezelfde naam hebben, wordt de geselecteerde waarde als een filter toegepast op de daadwerkelijke query.If they are same name, the selected value will be applied as a filter to the actual query.

  9. De tabellen met het veld Date zijn nu gemaakt en dus kunnen we elk veld aan een parameter binden.Now that the tables with the Date field have been created, we can bind each field to a parameter. Het binden van een veld aan een parameter betekent in feite dat de geselecteerde waarde voor het veld verandert, dat de waarde wordt doorgegeven aan de parameter en dat de query wordt bijgewerkt op de positie waar naar de parameter wordt verwezen.Binding the field to a parameter essentially means that as the selected value for the field changes, the value will get passed to the parameter and update the query where the parameter is referenced. Om het veld te binden, gaat u naar het tabblad Model maken, selecteert u het zojuist gemaakte veld en Geavanceerd om de bijbehorende eigenschappen weer te geven:So to bind field, go to the Modeling tab, select the newly created field, and then go to the Advanced properties:

    Notitie

    Het gegevenstype van de kolom moet overeenkomen met het type M-parameter.Column Data type should match with M parameter type.

    Het veld binden aan een parameter

  10. Selecteer de vervolgkeuzelijst onder Binden aan parameter en selecteer de parameter die u aan het veld wilt binden:Select the dropdown under Bind to parameter and select the Parameter that you want to bind to the field:

    De parameter aan het veld binden

    Aangezien dit een voorbeeld is voor een enkele waarde (de parameter wordt ingesteld op één waarde), moet u Meervoudige selectie op Nee laten staan, wat de standaardinstelling is:Since this example is for a single-select value (setting the parameter to a single value), you'll want to keep Multi-select set to No, which is the default:

    Meervoudige selectie uitgeschakeld

    Als voor uw gebruiksscenario meervoudige selectie vereist is (meerdere waarden doorgeven aan één parameter), moet u de schakeloptie op Ja zetten en ervoor zorgen dat de M-query is ingesteld voor het accepteren van meerdere waarden in de M-query.If your use cases require multi-selection (passing multi-values to a single parameter), you must toggle the switch to Yes and ensure that your M query is set up properly to accept multiple values in the M query. Hier ziet u een voorbeeld van RepoNameParameter, waarvoor meerdere waarden zijn toegestaan:Here's an example for RepoNameParameter, which allows for multiple values:

    Voorbeeld met meerdere waarden

  11. U kunt deze stappen herhalen als u andere velden wilt binden aan andere parameters:You can repeat these steps if you have other fields to bind to other parameters:

    Aanvullende parameters configureren

  12. Ten slotte kunt u naar dit veld verwijzen in een slicer of als een filter:Finally, you can reference this field in a slicer or as a filter:

    Verwijzen naar de velden

Als Meervoudige selectie is ingesteld op Nee voor de toegewezen kolom, moet u de modus Eén selecteren gebruiken in de slicer of Eén selecteren vereisen in de filterkaart.If the mapped column is set to No for Multi-select, you must use either a single select mode in the slicer, or require single select in the filter card.

Potentieel beveiligingsrisicoPotential security risk

Wanneer u rapportlezers toestaat om de waarden voor de M-queryparameters dynamisch in te stellen, hebben ze mogelijk toegang tot aanvullende gegevens of kunnen ze wijzigingen van het bronsysteem initiëren via injectieaanvallen, afhankelijk van de manier waarop naar de parameters wordt verwezen in de M-query en welke waarden er worden doorgegeven aan die parameter.When you allow report readers to dynamically set the values for the M Query parameters, they may be able to access additional data or trigger modifications to the source system using injection attacks, depending how the parameters are referenced in the M Query and what values are passed to that parameter.

Stel dat u een geparametriseerde Kusto-query hebt gemaakt, zoals in het volgende voorbeeld:For example, let's say you have a parameterized Kusto query constructed like the following:

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

U vindt het misschien prima dat een goedwillende gebruiker een geschikte waarde voor de parameter opgeeft, bijvoorbeeld Games:You may have no issues with a friendly user who passes an appropriate value for the parameter, for example, Games:

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

Een aanvaller kan echter een waarde doorgeven waarmee de query wordt gewijzigd om zo toegang te krijgen tot meer gegevens, bijvoorbeeld 'Games'// :However, an attacker may be able to pass a value that modifies the query to get access to more data, for example, 'Games' //:

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

In dit voorbeeld kan de aanvaller toegang krijgen tot informatie over spellen die nog niet zijn vrijgegeven door een deel van de query te veranderen in een opmerking.In this example, the attacker can get access to information on games that have not been released yet by changing part of the query into a comment.

Het risico beperkenHow to mitigate the risk

Om het beveiligingsrisico te beperken, wordt aangeraden om het samenvoegen van waarden voor M-parameters te verbieden in de query.To mitigate the security risk, it's best to avoid string concatenation of M parameter values within the query. In plaats daarvan gebruikt u die parameterwaarden in M-bewerkingen die naar de bronquery vouwen, zodat de M-engine en connector de uiteindelijke query bouwen.Instead, consume those parameter values in M operations that fold to the source query, so that the M engine and connector construct the final query. U kunt ook, indien beschikbaar, gebruikmaken van een mechanisme voor het doorgeven van parameters die is ingebouwd in de bronquerytaal en -connectors.Alternatively, if available, make use of a parameter passing mechanism built-in to the source query language and connectors. Azure Data Explorer beschikt bijvoorbeeld over ingebouwde queryparameterfuncties die zijn ontworpen om bescherming te bieden tegen injectieaanvallen.For example, Azure Data Explorer has built-in query parameter capabilities that are designed to protect against injection attacks.

Enkele voorbeelden:Here are some examples:

  • Voorbeeld met filterbewerkingen van M-query:Example using M query's filtering operations:

    Table.SelectRows(Source, (r) =\> r[Columns] = Parameter)
    
  • Voorbeeld waarbij de parameter wordt gedeclareerd in de bronquery (of waarbij de parameterwaarde als invoer wordt doorgegeven aan een bronqueryfunctie):Example declaring the parameter in the source query (or passing the parameter value as an input to a source query function):

    declare query\_parameters (Name of Parameter : Type of Parameter);
    

Overwegingen en beperkingenConsiderations and limitations

Er zijn enkele overwegingen en beperkingen waarmee u rekening moet houden wanneer u dynamische M-queryparameters gebruikt:There are some considerations and limitations to consider when using dynamic M query parameters:

  • Een bepaalde parameter kan niet worden gebonden aan meerdere velden en omgekeerd.A single parameter cannot be bound to multiple fields nor vice-versa.

  • De functie wordt alleen ondersteund voor gegevensbronnen op basis van M.The feature is only supported for M based data sources. De volgende DirectQuery-bronnen worden niet ondersteund:The following DirectQuery sources are not supported:

    • Op T-SQL gebaseerde gegevensbronnen: SQL Server, Azure SQL Database, Synapse SQL-pools (oftewel Azure SQL Data Warehouse) en Synapse SQL OnDemand-poolsT-SQL based data sources: SQL Server, Azure SQL Database, Synapse SQL pools (aka Azure SQL Data Warehouse), and Synapse SQL OnDemand pools
    • Live Connect-gegevensbronnen: Azure Analysis Services, SQL Server Analysis Services, Power BI-gegevenssetsLive connect data sources: Azure Analysis Services, SQL Server Analysis Services, Power BI Datasets
    • Andere niet-ondersteunde gegevensbronnen: Oracle, Teradata en relationele SAP HanaOther unsupported data sources: Oracle, Teradata and Relational SAP Hana
    • Gedeeltelijk ondersteund door eindpuntprogrammeerheid XMLA/TOM: SAP BW en SAP HanaPartially supported through XMLA / TOM endpoint programmability: SAP BW and SAP Hana
  • De volgende out-of-the-box parametertypen worden niet ondersteund:Unsupported out-of-box parameter types are the following:

    • AlleAny
    • DuurDuration
    • Waar/onwaarTrue/False
    • BinairBinary
  • Niet-ondersteunde filters:Unsupported filters:

    • Relatieve tijdslicer of -filterRelative time slicer or filter
    • Relatieve datumRelative date
    • HiërarchieslicerHierarchy slicer
    • include voor meerdere veldenMulti-field include filter
    • exclude- en not-filtersExclude filter / Not filters
    • Kruislings markerenCross-highlighting
    • InzoomfilterDrill down filter
    • KruisfilterCross drill filter
    • Top N-filterTop N filter
  • Niet-ondersteunde bewerkingen:Unsupported operations:

    • EnAnd
    • ContainsContains
    • Kleiner danLess than
    • Groter danGreater than
    • Begint metStarts with
    • Begint niet metDoes not start with
    • Is nietIs not
    • Bevat nietDoes not contains
    • Alles selecterenSelect all
    • Is leegIs blank
    • Is niet leegIs not blank

Volgende stappenNext steps

U kunt allerlei handelingen uitvoeren met Power BI Desktop.You can do all sorts of things with Power BI Desktop. Bekijk de volgende bronnen voor meer informatie over de vele mogelijkheden:For more information on its capabilities, check out the following resources: