Power BI Desktop'taki dinamik M sorgu parametreleri (önizleme)Dynamic M query parameters in Power BI Desktop (preview)

Dinamik M Sorgu Parametreleri sayesinde model yazarları, rapor görüntüleyicilerin filtre veya dilimleyici kullanarak M Sorgu Parametresi değerlerini ayarlamasına izin verebilir. Bu işlev özellikle sorgu performansını iyileştirme açısından yararlı olabilir.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. Model yazarları, Dinamik M Sorgu Parametreleri sayesinde filtre seçimlerinin DirectQuery kaynak sorgularına eklenmesi konusunda ek denetim sahibi olur.With Dynamic M Query Parameters, model authors have additional control over how filter selections get incorporated into DirectQuery source queries.

Filtrelerinin semantiği konusunda anlayış sahibi olan model yazarları genellikle veri kaynağı için etkili sorgular yazma konusunda bilgi sahibidir. Bu doğrultuda istenen sonuçları yüksek performansla elde etmek için filtre seçimlerinin kaynak sorgularına doğru noktada eklenmesini sağlayabilir.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.

Dinamik M sorgu parametrelerini etkinleştirmeEnabling Dynamic M query parameters

Dinamik M Sorgu Parametreleri şu an için önizleme sürümündedir ve kullanabilmek için etkinleştirmeniz gerekir.Dynamic M Query Parameters are currently in preview, and must be enabled to be used. Dosya > Seçenekler ve ayarlar > Seçenekler yolunu izleyip sol taraftaki bölmeden Önizleme özellikleri 'ni seçin.Select File > Options and settings > Options and then select Preview features from the left pane. Burada Dinamik M Sorgu Parametreleri onay kutusunun seçili olduğundan emin olun.From there, make sure the Dynamic M Query Parameters checkbox is selected. Yaptığınız değişikliğin etkili olması için Power BI Desktop'ı yeniden başlatmanız gerekebilir.You may need to restart Power BI Desktop for the change to be enabled.

Önizleme özelliğini etkinleştirme

Bu özelliğin önkoşullarından biri, geçerli bir M Sorgu Parametresi oluşturmuş ve bir veya daha fazla DirectQuery tablosunda başvurmuş olmanız gerekir.As a prerequisite for this feature, you must have a valid M Query Parameter created and referred in one or more Direct Query tables.

Not

Bu özellik tüm DirectQuery kaynakları için desteklenmediğinden bu makalenin Önemli noktalar ve sınırlamalar bölümünü incelemeyi unutmayın.Be sure to check the Considerations and limitations section in this article, since not all DirectQuery sources are supported with this feature.

Şimdi bir parametreye dinamik olarak tek bir değer geçirmeye yönelik örneği inceleyelim:Let's step through an example for passing a single value to a parameter dynamically:

  1. Power BI Desktop'ta Veri sekmesinden Power Query 'yi başlatın ve şeritteki Parametreleri Yönet düğmesinin altından Yeni Parametreler 'i seçin.In Power BI Desktop, launch Power Query from the Data tab, and select New Parameters under the Manage Parameters button in the ribbon.

    Şerit menüsü

  2. Ardından parametre için aşağıdaki bilgileri kullanın.Then fill out the following information about the Parameter.

    Parametre bilgileri

  3. Eklemek istediğiniz başka parametre varsa tekrar Yeni 'ye tıklayın.Click New again if you have more parameters to add.

    Başka bir parametre oluşturma

  4. Parametreleri oluşturduktan sonra bunlara M sorgusunda başvurabilirsiniz.Once you've created the parameters, you can reference them in the M query. M Sorgusunu değiştirmek için ilgili Sorgu seçili durumdayken Gelişmiş Düzenleyici'yi açın:To modify the M Query, open the Advanced editor while you have the Query that you want to modify selected:

    Gelişmiş Düzenleyici'yi açın

  5. Ardından aşağıdaki görüntüde sarı renkle vurgulanmış parametrelere M Sorgusundan başvurun.Next, reference the parameters in the M Query, highlighted in yellow in the following image.

    Parametreye başvurma

  6. Parametreleri oluşturdunuz ve M Sorgusunda bunlara başvurdunuz. Şimdi bu parametre için olası değerlerin yer aldığı bir sütuna sahip olan bir tablo oluşturmanız gerekir.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. Bu tablo, parametrelerin filtre seçimine göre dinamik olarak ayarlanmasını sağlayacak.This will allow it such that the parameters are dynamically set based on filter selection. Bu örnekte StartTime ve EndTime parametrelerinin dinamik olmasını istiyoruz.In this example, we want our StartTime Parameter and EndTime Parameter to be dynamic. Bu parametreler bir Tarih/Saat parametresi gerektirdiğinden parametre için tarihi ayarlamak üzere kullanılabilecek veri girişleri oluşturacağız.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. Öncelikle yeni bir tablo oluşturalım:To start, we create a new table:

    Yeni tablo oluşturma

  7. StartTime parametresinin değerlerini içeren ilk tablo şu şekilde olacak:Here's the first table I created for the values for StartTime Parameter:

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

    Tablo oluşturma

  8. EndTime parametresinin değerlerini içeren ikinci tablo ise şu şekilde olacak:Here's the second table I created for the values for EndTime Parameter:

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

    İkinci tabloyu oluşturma

    Not

    Asıl tabloda yer almayan farklı bir sütun adı kullanmanız önerilir.We recommend using a different column name that is not in an actual table. Adların aynı olması durumunda seçilen değer gerçek sorguya filtre olarak uygulanır.If they are same name, the selected value will be applied as a filter to the actual query.

  9. Tarih alanına sahip tabloları oluşturduğumuza göre her alanı bir parametreye bağlayabiliriz.Now that the tables with the Date field have been created, we can bind each field to a parameter. Alanı bir parametreye bağlamak, alan için seçilen değerin değişmesi durumunda ilgili değerin parametreye geçirilmesi ve parametreye başvurulduğunda sorgunun güncelleştirilmesi anlamına gelir.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. Alanı bağlamak için Modelleme sekmesine gidin, yeni oluşturulan alanı seçin ve Gelişmiş özelliklere gidin:So to bind field, go to the Modeling tab, select the newly created field, and then go to the Advanced properties:

    Not

    Sütun veri türü, M parametre türüyle aynı olmalıdır.Column Data type should match with M parameter type.

    Alanı parametreye bağlama

  10. Parametreye bağla 'nın altındaki açılan menüyü seçip alana bağlamak istediğiniz parametreyi belirleyin:Select the dropdown under Bind to parameter and select the Parameter that you want to bind to the field:

    Parametreyi alana bağlama

    Bu örnekte tek bir değer kullanıldığından (parametreyi tek bir değere ayarlama) Çoklu seçim ayarını Hayır olarak bırakmanız gerekir. Varsayılan değer bu şekildedir: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:

    Çoklu seçim kapalı olarak ayarlanmış

    Kullanım örnekleriniz için çoklu seçime (tek bir parametreye birden çok değer geçirme) ihtiyacınız varsa bu seçeneği Evet olarak ayarlamanız ve M sorgunuzun M sorgusunda birden çok değeri kabul edecek şekilde ayarlandığından emin olmanız gerekir.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. Aşağıda RepoNameParameter için birden çok değere izin veren bir örnek verilmiştir:Here's an example for RepoNameParameter , which allows for multiple values:

    Çoklu değer örneği

  11. Başka parametrelere bağlamak istediğiniz farklı alanlar varsa bu adımları yineleyebilirsiniz:You can repeat these steps if you have other fields to bind to other parameters:

    Ek parametreleri yapılandırma

  12. Son olarak bu alana bir dilimleyicide veya filtre olarak başvurabilirsiniz:Finally, you can reference this field in a slicer or as a filter:

    Alanlara başvurma

Eşlenen sütunda Çoklu seçim ayarı Hayır olarak bırakıldıysa dilimleyicide tekli seçim modunu kullanmanız veya filtre kartında tekli seçim yapılmasını sağlamanız gerekir.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.

Olası güvenlik riskiPotential security risk

Rapor okuyucularının M Sorgu parametreleri için değerleri dinamik olarak ayarlamasına izin verdiğinizde okuyucular, parametrelere M Sorgusunda nasıl başvuru yapıldığına ve parametreye geçirilen değerlere bağlı olarak ekleme saldırılarını kullanarak başka verilere de erişebilirler veya kaynak sistemde değişiklik yapılmasını tetikleyebilirler.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.

Örneğin aşağıdakine benzer bir parametreli Kusto sorgusuna sahip olduğunuzu düşünün: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```

Parametre için makul bir değer (örneğin, Games ) geçiren sıradan bir kullanıcıyla herhangi bir sorun yaşamazsınız: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'

Ancak saldırganlar, daha fazla veriye erişmek için sorguyu değiştiren bir değer (örneğin, 'Games' // ) geçirebilir: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

Bu örnekte saldırgan, sorgunun bir bölümünü açıklama haline getirerek henüz kullanıma sunulmamış olan oyunlarla ilgili bilgilere erişim sağlayabilir.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.

Riski azaltmaHow to mitigate the risk

Güvenlik riskini azaltmak için sorgu içindeki M parametre değerlerinin dize birleştirmesini kullanmaktan kaçınmanız önerilir.To mitigate the security risk, it's best to avoid string concatenation of M parameter values within the query. Bunun yerine bu parametre değerlerini kaynak sorgusunu oluşturan M işlemlerinde kullanarak son sorgunun M altyapısı ve bağlayıcı tarafından oluşturulmasını sağlayın.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. Alternatif olarak mümkünse kaynak sorgu dili ve bağlayıcılarında yerleşik olan parametre geçirme mekanizmasını kullanın.Alternatively, if available, make use of a parameter passing mechanism built-in to the source query language and connectors. Örneğin Azure Veri Gezgini, ekleme saldırılarına karşı koruma sağlayacak şekilde tasarlanmış yerleşik sorgu parametresi özelliklerine sahiptir.For example, Azure Data Explorer has built-in query parameter capabilities that are designed to protect against injection attacks.

İşte bazı örnekler:Here are some examples:

  • M sorgusunun filtreleme işlemlerini kullanma örneği:Example using M query's filtering operations:

    Table.SelectRows(Source, (r) =\> r[Columns] = Parameter)
    
  • Parametreyi kaynak sorgusunda bildirme (veya parametre değerini kaynak sorgusu işlevine giriş olarak geçirme) örneği: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);
    

Önemli noktalar ve sınırlamalarConsiderations and limitations

Dinamik M sorgu parametrelerini kullanırken dikkat etmeniz gereken bazı önemli noktalar ve sınırlamalar vardır:There are some considerations and limitations to consider when using dynamic M query parameters:

  • Tek bir parametre birden fazla alana bağlanamaz ve bunun tersi de yapılamaz.A single parameter cannot be bound to multiple fields nor vice-versa.

  • Bu özellik yalnızca M tabanlı veri kaynakları için desteklenir.The feature is only supported for M based data sources. Aşağıdaki DirectQuery kaynakları desteklenmez:The following DirectQuery sources are not supported:

    • T-SQL tabanlı veri kaynakları: SQL Server, Azure SQL Veritabanı, Synapse SQL havuzları (Azure SQL Veri Ambarı) ve Synapse SQL OnDemand havuzlarıT-SQL based data sources: SQL Server, Azure SQL Database, Synapse SQL pools (aka Azure SQL Data Warehouse), and Synapse SQL OnDemand pools
    • Canlı bağlantı veri kaynakları: Azure Analysis Services, SQL Server Analysis Services, Power BI Veri KümeleriLive connect data sources: Azure Analysis Services, SQL Server Analysis Services, Power BI Datasets
    • Desteklenmeyen diğer veri kaynakları: Oracle, Teradata ve İlişkisel SAP HANAOther unsupported data sources: Oracle, Teradata and Relational SAP Hana
    • XMLA/TOM uç nokta programlamasıyla kısmen desteklenenler: SAP BW ve SAP HANAPartially supported through XMLA / TOM endpoint programmability: SAP BW and SAP Hana
  • Desteklenmeyen hazır parametre türleri şunlardır:Unsupported out-of-box parameter types are the following:

    • Herhangi biriAny
    • SüreDuration
    • True/FalseTrue/False
    • İkiliBinary
  • Desteklenmeyen filtreler:Unsupported filters:

    • Göreli saat dilimleyicisi veya filtresiRelative time slicer or filter
    • Göreli tarihRelative date
    • Hiyerarşi dilimleyicisiHierarchy slicer
    • Çok alanlı dahil etme filtresiMulti-field include filter
    • Hariç tutma filtresi/Değil filtreleriExclude filter / Not filters
    • Çapraz vurgulamaCross-highlighting
    • Detaya gitme filtresiDrill down filter
    • Çapraz detaylandırma filtresiCross drill filter
    • Üst N filtresiTop N filter
  • Desteklenmeyen işlemler:Unsupported operations:

    • AndAnd
    • ContainsContains
    • KüçüktürLess than
    • BüyüktürGreater than
    • İle başlarStarts with
    • Şununla başlamazDoes not start with
    • DeğildirIs not
    • İçermezDoes not contains
    • Tümünü seçSelect all
    • BoşturIs blank
    • Boş değildirIs not blank

Sonraki adımlarNext steps

Power BI Desktop ile her şeyi yapabilirsiniz.You can do all sorts of things with Power BI Desktop. Özellikler hakkında daha fazla bilgi edinmek için aşağıdaki kaynaklara bakın:For more information on its capabilities, check out the following resources: