Sayfalandırılmış raporlarda basamaklı parametreleri kullanma
Bu makale Power BI sayfalandırılmış raporları tasarlayan rapor yazarlarına yöneliktir. Basamaklı parametreler tasarlama senaryoları sağlar. Basamaklı parametreler, bağımlılıkları olan rapor parametreleridir. Rapor kullanıcısı parametre değeri (veya değerleri) seçtiğinde, bu başka bir parametrenin kullanılabilir değerlerini ayarlamak için kullanılır.
Not
Basamaklı parametrelere giriş bilgileri ve bunların nasıl yapılandırılacağı bu makalenin kapsamına alınmamıştır. Basamaklı parametreleri tam olarak bilmiyorsanız, önce Rapora Basamaklı Parametreler Ekleme (Report Builder ve SSRS) makalesini okumanızı öneririz.
Tasarım senaryoları
Basamaklı parametreleri kullanmaya yönelik iki tasarım senaryosu vardır. Bunlar, aşağıdaki işlemleri yapmak için etkili bir şekilde kullanılabilir:
- Büyük öğe kümelerini filtreleme
- Uygun öğeleri gösterme
Örnek veritabanı
Bu makalede gösterilen örneklerde Azure SQL Veritabanı temel alınmıştır. Veritabanında satış işlemleri kaydedilmiştir ve veritabanı bayilerin, ürünlerin ve satış siparişlerinin depolandığı çeşitli tablolar içerir.
Reseller (Bayi) adlı tabloda her bayi için bir kayıt depolanır ve bu tablo binlerce kayıt içerir. Reseller tablosunda şu sütunlar bulunur:
- ResellerCode (tamsayı)
- ResellerName
- Ülke-Bölge
- State-Province
- Şehir
- PostalCode
Sales (Satışlar) adlı da bir tablo vardır. Satış siparişi kayıtlarını depolar ve Reseller Code sütununda Reseller tablosuyla arasında yabancı anahtar ilişkisi bulunur.
Örnek gereksinimi
Reseller Profile (Bayi Profili) raporu geliştirme gereksinimi vardır. Rapor tek bir bayinin bilgilerini görüntüleyecek şekilde tasarlanmalıdır. Rapor kullanıcısının bayi kodunu girmesi uygun bir yöntem değildir çünkü bu koda nadiren ezbere bilirler.
Büyük öğe kümelerini filtreleme
Bayiler gibi büyük miktarlardaki kullanılabilir öğeleri sınırlandırmanıza yardımcı olması için şu üç örneği gözden geçirelim. Bunlar:
- İlgili sütunlara göre filtreleme
- Gruplandırma sütununa göre filtreleme
- Arama düzenine göre filtreleme
İlgili sütunlara göre filtreleme
Bu örnekte rapor kullanıcısı beş rapor parametresiyle etkileşimli çalışır. Country-Region, State-Province, City ve Postal Code değerlerini seçmesi gerekir. Ardından son bir parametre söz konusu coğrafi konumda bulunan bayileri listeler.

Basamaklı parametreleri şu şekilde geliştirebilirsiniz:
Doğru sırada yerleştirilmiş beş rapor parametresi oluşturun.
Aşağıdaki sorgu deyimini kullanarak ayrı ülke-bölge (Country-Region) değerlerini alan CountryRegion veri kümesini oluşturun:
SELECT DISTINCT [Country-Region] FROM [Reseller] ORDER BY [Country-Region]Aşağıdaki sorgu deyimini kullanarak, seçilen ülke-bölge için ayrı eyalet-il (State-Province) değerlerini alan StateProvince veri kümesini oluşturun:
SELECT DISTINCT [State-Province] FROM [Reseller] WHERE [Country-Region] = @CountryRegion ORDER BY [State-Province]Aşağıdaki sorgu deyimini kullanarak, seçilen ülke-bölge ve eyalet-il için ayrı şehir (City) değerlerini alan City veri kümesini oluşturun:
SELECT DISTINCT [City] FROM [Reseller] WHERE [Country-Region] = @CountryRegion AND [State-Province] = @StateProvince ORDER BY [City]Bu düzenle devam ederek PostalCode veri kümesini de oluşturun.
Aşağıdaki sorgu deyimini kullanarak, seçilen coğrafi değerler için tüm bayileri alan Reseller veri kümesini oluşturun:
SELECT [ResellerCode], [ResellerName] FROM [Reseller] WHERE [Country-Region] = @CountryRegion AND [State-Province] = @StateProvince AND [City] = @City AND [PostalCode] = @PostalCode ORDER BY [ResellerName]İlki dışındaki her veri kümesi, sorgu parametrelerini ilgili rapor parametrelerine eşler.
Not
Bu örneklerde gösterilen tüm sorgu parametreleri (önünde @ simgesi bulunan parametreler) SELECT deyimlerinin içine eklenebilir veya saklı yordamlara geçirilebilir.
Genel olarak saklı yordamların kullanılması daha iyi bir tasarım yaklaşımıdır. Çünkü saklı yordamların sorgu planları daha hızlı yürütülmesi için önbelleğe alınmıştır ve gerektiğinde daha ileri düzey bir mantık geliştirmenize olanak tanır. Öte yandan bunlar şu anda ağ geçidi ilişkisel veri kaynaklarında, yani SQL Server, Oracle ve Teradata’da desteklenmemektedir.
Son olarak, her zaman verimli bir veri alma işlemini destekleyecek uygun dizinlerin mevcut olduğundan emin olmalısınız. Aksi takdirde rapor parametreleriniz yavaş doldurulabilir ve veritabanı aşırı yüklenebilir. SQL Server dizini hakkında daha fazla bilgi için bkz. SQL Server Dizin Mimarisi ve Tasarım Kılavuzu.
Gruplandırma sütununa göre filtreleme
Bu örnekte rapor kullanıcısı bayi adının ilk harfini seçmek için bir rapor parametresiyle etkileşimli çalışır. Sonra ikinci bir parametre adı seçili harfle başlayan bayileri listeler.

Basamaklı parametreleri şu şekilde geliştirebilirsiniz:
Doğru sırada yerleştirilmiş ReportGroup ve Reseller rapor parametrelerini oluşturun.
Aşağıdaki sorgu deyimini kullanarak, tüm bayiler tarafından kullanılan ilk harfleri almak için ReportGroup veri kümesini oluşturun:
SELECT DISTINCT LEFT([ResellerName], 1) AS [ReportGroup] FROM [Reseller] ORDER BY [ReportGroup]Aşağıdaki sorgu deyimini kullanarak, adı seçilen harfle başlayan tüm bayileri almak için Reseller veri kümesini oluşturun:
SELECT [ResellerCode], [ResellerName] FROM [Reseller] WHERE LEFT([ResellerName], 1) = @ReportGroup ORDER BY [ResellerName]Reseller veri kümesinin sorgu parametresini buna karşılık gelen rapor parametresiyle eşleyin.
Reseller tablosuna gruplandırma sütununu eklemek daha verimli bir yöntemdir. Kalıcı olduğunda ve dizine alındığında en iyi sonucu verir. Daha fazla bilgi için bkz. Tabloda Hesaplanan Sütunları Belirtme.
ALTER TABLE [Reseller]
ADD [ReportGroup] AS LEFT([ResellerName], 1) PERSISTED
Bu teknik daha da yüksek bir potansiyele sahiptir. Bayileri önceden tanımlanmış harf bantlarına göre filtrelemek için yeni bir gruplandırma sütunu ekleyen aşağıdaki betiğe bakın. Bu betik ayrıca rapor parametrelerine gereken verileri verimli bir şekilde almak için bir dizin oluşturur.
ALTER TABLE [Reseller]
ADD [ReportGroup2] AS CASE
WHEN [ResellerName] LIKE '[A-C]%' THEN 'A-C'
WHEN [ResellerName] LIKE '[D-H]%' THEN 'D-H'
WHEN [ResellerName] LIKE '[I-M]%' THEN 'I-M'
WHEN [ResellerName] LIKE '[N-S]%' THEN 'N-S'
WHEN [ResellerName] LIKE '[T-Z]%' THEN 'T-Z'
ELSE '[Other]'
END PERSISTED
GO
CREATE NONCLUSTERED INDEX [Reseller_ReportGroup2]
ON [Reseller] ([ReportGroup2]) INCLUDE ([ResellerCode], [ResellerName])
GO
Arama düzenine göre filtreleme
Bu örnekte rapor kullanıcısı arama düzeni girmek için bir rapor parametresiyle etkileşimli çalışır. Sonra ikinci bir parametre adı bu düzeni içeren bayileri listeler.

Basamaklı parametreleri şu şekilde geliştirebilirsiniz:
Doğru sırada yerleştirilmiş Search ve Reseller rapor parametrelerini oluşturun.
Aşağıdaki sorgu deyimini kullanarak, arama metnini içeren tüm bayileri almak için Reseller veri kümesini oluşturun:
SELECT [ResellerCode], [ResellerName] FROM [Reseller] WHERE [ResellerName] LIKE '%' + @Search + '%' ORDER BY [ResellerName]Reseller veri kümesinin sorgu parametresini buna karşılık gelen rapor parametresiyle eşleyin.
İpucu
Bu tasarım üzerinde geliştirmeler yaparak rapor kullanıcılarınıza daha fazla denetim sağlayabilirsiniz. Bu tasarım kendi düzen eşleştirme değerlerini tanımlamalarına izin verir. Örneğin, "red%" arama değeri adları “red” karakterleriyle başlayan bayileri listeler.
Daha fazla bilgi için bkz. LIKE (Transact-SQL).
Rapor kullanıcılarına kendi düzenlerini tanımlama olanağını nasıl sağlayacağınız aşağıda gösterilmiştir.
WHERE
[ResellerName] LIKE @Search
Bununla birlikte veritabanı uzmanı olmayan birçok kullanıcı yüzde (%) joker karakterini bilmez. Bunun yerine yıldız (*) karakterine alışkınlardır. WHERE yan tümcesini değiştirerek bu karakteri kullanmalarını sağlayabilirsiniz.
WHERE
[ResellerName] LIKE SUBSTITUTE(@Search, '%', '*')
Uygun öğeleri gösterme
Bu senaryoda kullanılabilir değerleri sınırlandırmak için olgu verilerini kullanabilirsiniz. Rapor kullanıcılarına etkinliğin kaydedildiği öğeler gösterilir.
Bu örnekte rapor kullanıcısı üç rapor parametresiyle etkileşimli çalışır. İlk ikisi satış siparişi tarihlerinin tarih aralığını ayarlar. Sonra üçüncü parametre, söz konusu tarih aralığında siparişlerin oluşturulmuş olduğu bayileri listeler.

Basamaklı parametreleri şu şekilde geliştirebilirsiniz:
Doğru sırada yerleştirilmiş OrderDateStart, OrderDateEnd ve Reseller rapor parametrelerini oluşturun.
Aşağıdaki sorgu deyimini kullanarak, tarih aralığında sipariş oluşturmuş tüm bayileri alan Reseller veri kümesini oluşturun:
SELECT DISTINCT [r].[ResellerCode], [r].[ResellerName] FROM [Reseller] AS [r] INNER JOIN [Sales] AS [s] ON [s].[ResellerCode] = [r].[ResellerCode] WHERE [s].[OrderDate] >= @OrderDateStart AND [s].[OrderDate] < DATEADD(DAY, 1, @OrderDateEnd) ORDER BY [r].[ResellerName]
Öneriler
Raporlarınızı mümkün olduğunca basamaklı parametrelerle tasarlamanızı öneririz. Çünkü:
- Bunlar rapor kullanıcılarınız için sezgisel ve kullanışlı deneyimler sağlar
- Bunlar kullanılabilir değerlerin daha küçük kümelerini aldıklarından verimlidir
Aşağıdakileri yaparak veri kaynaklarını iyileştirdiğinizden emin olun:
- Mümkün olduğunca saklı yordamları kullanın
- Verileri verimli bir şekilde alabilmek için uygun dizinleri ekleyin
- Pahalı sorgu zamanı değerlendirmelerinden kaçınmak için sütun değerlerini, hatta satırları ortaya çıkarın
Sonraki adımlar
Bu makaleyle ilgili daha fazla bilgi için aşağıdaki kaynaklara bakın: