Share via


Power BI Desktop'ta Dinamik M sorgu parametreleri

Bu makalede, Power BI Desktop'ta dinamik M sorgusu parametrelerinin nasıl oluşturulacağı ve bunlarla nasıl çalışıldığı açıklanır. Dinamik M sorgu parametreleriyle, model yazarları rapor görüntüleyicilerinin bir M sorgu parametresi için kullanabileceği filtre veya dilimleyici değerlerini yapılandırabilir. Dinamik M sorgu parametreleri, model yazarlarına DirectQuery kaynak sorgularına dahil etmek için filtre seçimleri üzerinde daha fazla denetim sağlar.

Model yazarları filtrelerinin hedeflenen semantiğini anlar ve genellikle veri kaynaklarına yönelik verimli sorgular yazmayı bilir. Dinamik M sorgu parametreleriyle model yazarları, hedeflenen sonuçları en iyi performansla elde etmek için filtre seçimlerinin doğru noktada kaynak sorgulara dahil edilmesini sağlayabilir. Dinamik M sorgu parametreleri özellikle sorgu performansı iyileştirmesi için yararlı olabilir.

Sujata'nın aşağıdaki videoda dinamik M sorgu parametrelerini açıklayıp kullanmasını izleyin ve bunları kendiniz deneyin.

Not

Bu videoda Power BI Desktop'ın önceki sürümleri veya Power BI hizmeti kullanılabilir.

Önkoşullar

Bu yordamları uygulamak için bir veya daha fazla DirectQuery tablosu kullanan geçerli bir M sorgunuz olmalıdır.

Dinamik parametreler oluşturma ve kullanma

Aşağıdaki örnek, bir parametreye dinamik olarak tek bir değer iletir.

Parametreler ekleme

  1. Power Query Düzenleyicisi açmak için Power BI Desktop'ta Giriş>Dönüştürme verileri>Veri dönüştürme'yi seçin.

  2. Power Query Düzenleyicisi, şeritteki Parametreleri Yönet'in altında Yeni Parametreler'i seçin.

    Screenshot that shows the Ribbon menu.

  3. Parametreleri Yönet penceresinde, parametre hakkındaki bilgileri doldurun. Daha fazla bilgi için bkz . Parametre oluşturma.

    Screenshot that shows parameter information.

  4. Daha fazla parametre eklemek için Yeni'yi seçin.

    Screenshot that shows New to create another parameter.

  5. Parametre eklemeyi bitirdiğinizde Tamam'ı seçin.

M sorgusundaki parametrelere başvurma

  1. Parametreleri oluşturduktan sonra M sorgusunda bunlara başvurabilirsiniz. M sorgusunu değiştirmek için, sorgu seçiliyken Gelişmiş düzenleyiciyi açın.

    Screenshot that shows opening the Advanced Editor.

  2. Aşağıdaki görüntüde sarı renkle vurgulandığı gibi M sorgusundaki parametrelere başvurun:

    Screenshot that shows referencing the parameter.

  3. Sorguyu düzenlemeyi bitirdiğinizde Bitti'yi seçin.

Değer tabloları oluşturma

Filtre seçimine göre dinamik olarak ayarlanabilecek olası değerleri sağlayan bir sütuna sahip her parametre için bir tablo oluşturun. Bu örnekte ve EndTime parametrelerinin StartTime dinamik olmasını istiyorsunuz. Bu parametreler bir Date/Time parametre gerektirdiğinden, parametrenin tarihini dinamik olarak ayarlamak için olası girişleri oluşturursunuz.

  1. Power BI Desktop şeridindeki Modelleme'nin altında Yeni Tablo'yu seçin.

    Screenshot that shows selecting New table.

  2. Parametre değerleri StartTime için bir tablo oluşturun, örneğin:

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

    Screenshot that shows the first table.

  3. Parametresinin değerleri EndTime için ikinci bir tablo oluşturun, örneğin:

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

    Screenshot that shows the second table.

    Not

    Gerçek tabloda olmayan bir sütun adı kullanın. Gerçek tablo sütunuyla aynı adı kullanırsanız, seçilen değer sorguda filtre olarak uygulanır.

Alanları parametrelere bağlama

Artık alanları olan tabloları oluşturduğunuza Date göre, her alanı bir parametreye bağlayabilirsiniz. Bir alanı parametreye bağlamak, seçili alan değeri değiştikçe değerin parametreye geçtiği ve parametreye başvuran sorguyu güncelleştirdiği anlamına gelir.

  1. Bir alanı bağlamak için Power BI Desktop Modeli görünümünde yeni oluşturulan alanı seçin ve Özellikler bölmesinde Gelişmiş'i seçin.

    Not

    Sütun veri türü M parametresi veri türüyle eşleşmelidir.

    Screenshot that shows binding the field to a parameter.

  2. Parametreye bağla'nın altındaki açılan listeyi seçin ve alana bağlamak istediğiniz parametreyi seçin:

    Screenshot that shows binding the parameter to the field.

    Bu örnek parametreyi tek bir değere ayarlamaya yönelik olduğundan, Çoklu seçim ayarını varsayılan değer olan Hayır olarak ayarlayın:

    Screenshot that shows multi-select set to No.

    Eşlenen sütunu Çoklu seçim için Hayır olarak ayarlarsanız, dilimleyicide tek bir seçim modu kullanmanız veya filtre kartında tek seçim gerektirmeniz gerekir.

    Kullanım örnekleriniz tek bir parametreye birden çok değer geçirmeyi gerektiriyorsa denetimi Evet olarak ayarlayın ve M sorgunuzun birden çok değeri kabul etmek üzere ayarlandığından emin olun. Aşağıda, birden çok değere izin veren bir örneği RepoNameParameterverilmiştir:

    Screenshot that shows a multivalue example.

  3. Diğer parametrelere bağlamak için başka alanlarınız varsa bu adımları yineleyin.

    Screenshot that shows configuring more parameters.

Artık bu alana bir dilimleyicide veya filtre olarak başvurabilirsiniz:

Screenshot that shows referencing the fields.

Tümünü seç'i etkinleştir

Bu örnekte, Power BI Desktop modelinde Country adlı bir alan vardır ve bu alan countryNameMParameter adlı bir M parametresine bağlı olan ülkelerin/bölgelerin listesidir. Bu parametre Çoklu seçim için etkinleştirilir, ancak Tümünü seç için etkinleştirilmez. Dilimleyici veya filtre kartında Tümünü seç seçeneğini kullanabilmek için aşağıdaki ek adımları izleyin:

Screenshot that shows an example of a multiselect M parameter.

Ülke için Tümünü seç'i etkinleştirmek için:

  1. Ülke için Gelişmiş özellikler bölümünde Tümünü seç iki durumlu düğmesini etkinleştirerek Tümünü seç değeri girişini etkinleştirin. Tümünü seç değerini düzenleyin veya varsayılan değeri not edin.

    Screenshot that shows Select all for an M parameter.

    Tümünü seç değeri, parametreye tanımladığınız değeri içeren bir liste olarak geçer. Bu nedenle, bu değeri tanımlarken veya varsayılan değeri kullandığınızda, değerin benzersiz olduğundan ve parametreye bağlı alanda mevcut olmadığından emin olun.

  2. Power Query Düzenleyicisi başlatın, sorguyu seçin ve ardından Gelişmiş Düzenleyici'ı seçin. Tümünü seç seçeneğine başvurmak için Tümünü seç değerini kullanmak için M sorgusunu düzenleyin.

    Screenshot that shows an M query.

  3. Gelişmiş Düzenleyici, parametresi Multi-select için etkinleştirildiyse değerini true değerlendiren ve Tümünü seç değerini içeren bir Boole ifadesi ekleyin ve aksi takdirde şunu döndürürfalse:

    Screenshot that shows an example Boolean expression for Select all.

  4. Tüm Boole ifadelerini seçin ifadesinin sonucunu kaynak sorguya ekleyin. Örnek, kaynak sorguda önceki adımda yer alan Boole ifadesinin sonucuna ayarlanmış adlı includeAllCountries bir Boole sorgu parametresine sahiptir. Bu parametreyi sorgudaki bir filtre yan tümcesinde kullanabilirsiniz; örneğin false , Seçilen ülke veya bölge adlarına Boole filtreleri uygulanır ve true etkin bir şekilde filtre uygulanmaz.

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

  5. Yeni Tümünü seç değerini hesaba katmak için M sorgunuzu güncelleştirdikten sonra dilimleyicilerde veya filtrelerde Tümünü seç işlevini kullanabilirsiniz.

    Screenshot that shows Select all in a slicer.

Başvuru için, yukarıdaki örneğin tam sorgusunu aşağıda bulabilirsiniz:

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"

Olası güvenlik riski

M sorgu parametrelerinin değerlerini dinamik olarak ayarlayabilen rapor okuyucular, ekleme saldırılarını kullanarak daha fazla veriye erişebilir veya kaynak sistemde değişiklik tetikleyebilir. Bu olasılık, M sorgusundaki parametrelere nasıl başvurabileceğinize ve parametrelere hangi değerleri geçirdiğinize bağlıdır.

Örneğin, aşağıdaki gibi oluşturulan parametreli bir Kusto sorgunuz var:

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

Parametresi için uygun bir değer geçiren kolay kullanıcıyla ilgili herhangi bir sorun yoktur, örneğin: Games

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

Ancak, bir saldırgan daha fazla veriye erişmek için sorguyu değiştiren bir değer geçirebilir, örneğin: 'Games'//

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

Bu örnekte saldırgan, sorgunun bir bölümünü açıklamaya dönüştürerek henüz yayımlanmamış oyunlar hakkındaki bilgilere erişebilir.

Riski azaltma

Güvenlik riskini azaltmak için sorgudaki M parametresi değerlerinin dize birleştirmesini önleyin. Bunun yerine, M altyapısının ve bağlayıcının son sorguyu oluşturması için kaynak sorguya katlanan M işlemlerinde bu parametre değerlerini kullanın.

Veri kaynağı saklı yordamların içeri aktarılmasını destekliyorsa, sorgu mantığınızı orada depolayıp M sorgusunda çağırmayı göz önünde bulundurun. Alternatif olarak, varsa kaynak sorgu dilinde ve bağlayıcılarda yerleşik olarak bulunan bir parametre geçirme mekanizması kullanın. Örneğin, Azure Veri Gezgini ekleme saldırılarına karşı korumak için tasarlanmış yerleşik sorgu parametresi özelliklerine sahiptir.

Bu risk azaltmaların bazı örnekleri aşağıda verilmiştir:

  • M sorgusunun filtreleme işlemlerini kullanan örnek:

    Table.SelectRows(Source, (r) => r[Columns] = Parameter)
    
  • Kaynak sorguda parametresini bildiren veya parametre değerini bir kaynak sorgu işlevine giriş olarak geçiren örnek:

    declare query_parameters (Name of Parameter : Type of Parameter);
    
  • Saklı yordamı doğrudan çağırma örneği:

    let CustomerByProductFn = AzureDataExplorer.Contents("Help", "ContosoSales"){[Name="CustomerByProduct"]}[Data] in
    CustomerByProductFn({1, 3, 5})
    

Dikkat edilecekler ve sınırlamalar

Dinamik M sorgu parametrelerini kullanırken dikkat edilmesi gereken bazı noktalar ve sınırlamalar vardır:

  • Tek bir parametre birden çok alana bağlanamaz veya tersi de olamaz.
  • Dinamik M sorgu parametreleri toplamaları desteklemez.
  • Dinamik M sorgu parametreleri satır düzeyi güvenliği (RLS) desteklemez.
  • Parametre adları Veri Çözümleme İfadeleri (DAX) ayrılmış sözcükleri olamaz veya boşluk içeremez. Bu sınırlamayı önlemeye yardımcı olmak için parametre adının sonuna ekleyebilirsiniz Parameter .
  • Tablo adları boşluk veya özel karakter içeremez.
  • Parametreniz veri türüyse Date/Time , bunu M sorgusunun içinde olarak DateTime.Date(<YourDateParameter>)atamanız gerekir.
  • SQL kaynaklarını kullanıyorsanız, parametre değeri her değiştiğinde bir onay iletişim kutusu alabilirsiniz. Bu iletişim kutusunun nedeni bir güvenlik ayarıdır: Yeni yerel veritabanı sorguları için kullanıcı onayı gerektir. Bu ayarı Power BI Desktop Seçenekleri'nin Güvenlik bölümünde bulabilir ve kapatabilirsiniz.
  • Excel'de bir anlam modeline erişirken Dinamik M sorgu parametreleri çalışmayabilir.
  • Dinamik M sorgu parametreleri Power BI Rapor Sunucusu desteklenmez.

Desteklenmeyen ilk parametre türleri

  • Tümü
  • Duration
  • Doğru/Yanlış
  • İkilik

Desteklenmeyen filtreler

  • Göreli zaman dilimleyicisi veya filtresi
  • Göreli tarih
  • Hiyerarşi dilimleyicisi
  • Çok alanlı ekleme filtresi
  • Filtreleri hariç tutma / Filtre değil
  • Çapraz vurgulama
  • Detaya gitme filtresi
  • Çapraz detaylandırma filtresi
  • İlk N filtresi

Desteklenmeyen işlemler

  • And
  • Contains
  • Küçüktür
  • Büyüktür
  • İle başlar
  • ile başlamıyor
  • Değil
  • İçermez
  • Boş
  • Boş değil

Power BI Desktop özellikleri hakkında daha fazla bilgi için aşağıdaki kaynaklara göz atın: