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
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.
Power Query Düzenleyicisi, şeritteki Parametreleri Yönet'in altında Yeni Parametreler'i seçin.
Parametreleri Yönet penceresinde, parametre hakkındaki bilgileri doldurun. Daha fazla bilgi için bkz . Parametre oluşturma.
Daha fazla parametre eklemek için Yeni'yi seçin.
Parametre eklemeyi bitirdiğinizde Tamam'ı seçin.
M sorgusundaki parametrelere başvurma
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.
Aşağıdaki görüntüde sarı renkle vurgulandığı gibi M sorgusundaki parametrelere başvurun:
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.
Power BI Desktop şeridindeki Modelleme'nin altında Yeni Tablo'yu seçin.
Parametre değerleri
StartTime
için bir tablo oluşturun, örneğin:StartDateTable = CALENDAR (DATE(2016,1,1), DATE(2016,12,31))
Parametresinin değerleri
EndTime
için ikinci bir tablo oluşturun, örneğin:EndDateTable = CALENDAR (DATE(2016,1,1), DATE(2016,12,31))
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.
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.
Parametreye bağla'nın altındaki açılan listeyi seçin ve alana bağlamak istediğiniz parametreyi seçin:
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:
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
RepoNameParameter
verilmiştir:Diğer parametrelere bağlamak için başka alanlarınız varsa bu adımları yineleyin.
Artık bu alana bir dilimleyicide veya filtre olarak başvurabilirsiniz:
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:
Ülke için Tümünü seç'i etkinleştirmek için:
Ü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.
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.
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.
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
: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ğinfalse
, Seçilen ülke veya bölge adlarına Boole filtreleri uygulanır vetrue
etkin bir şekilde filtre uygulanmaz.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.
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 olarakDateTime.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
İlgili içerik
Power BI Desktop özellikleri hakkında daha fazla bilgi için aşağıdaki kaynaklara göz atın: