在編頁報表中使用級聯參數
本文以設計Power BI 編頁報表的報表作者身分為目標。 它提供設計串聯參數的案例。 串聯參數是具有相依性的報表參數。 當報表用戶選取參數值(或值)時,它會用來設定另一個參數的可用值。
注意
本文未涵蓋串連參數的簡介,以及如何設定它們。 如果您不熟悉串聯參數,建議您先閱讀在 Power BI 中將級聯參數新增至報表 報表產生器。
設計案例
使用串聯參數的設計案例有兩種。 它們可以有效地用來:
- 篩選大型專案集
- 呈現 相關 專案
資料庫範例
本文中提供的範例是以 Azure SQL 資料庫 為基礎。 資料庫會記錄銷售作業,並包含儲存轉銷商、產品和銷售訂單的各種數據表。
名為 Reseller 的數據表會為每個轉銷 商儲存一筆記錄,其中包含數千筆記錄。 Reseller 資料表具有下列數據行:
- ResellerCode (整數)
- ResellerName
- Country-Region
- State-Province
- 縣/市
- PostalCode
也有一 個名為 Sales 的數據表。 它會儲存銷售訂單記錄,並在 ResellerCode 數據行上,與 Reseller 數據表有外鍵關聯性。
範例需求
開發轉銷商配置檔報表的需求。 報表必須設計為顯示單一轉銷商的資訊。 讓報表使用者輸入轉銷商程序代碼並不適合,因為它們很少記住它們。
篩選大型專案集
讓我們看看三個範例,協助您限制大型可用專案集,例如轉銷商。 畫面如下:
依相關數據行篩選
在此範例中,報表用戶會與五個報表參數互動。 他們必須選取國家/地區、州/省、市,然後選取郵遞區號。 最後一個參數接著會列出位於該地理位置的轉銷商。
以下說明如何開發串聯參數:
建立五個報表參數,並以正確的順序排序。
使用下列查詢語句,建立擷取不同國家/地區值的 CountryRegion 數據集:
SELECT DISTINCT [Country-Region] FROM [Reseller] ORDER BY [Country-Region]
使用下列查詢語句,建立 StateProvince 數據集,以擷取所選國家/地區的不同州/地區值:
SELECT DISTINCT [State-Province] FROM [Reseller] WHERE [Country-Region] = @CountryRegion ORDER BY [State-Province]
使用下列查詢語句,建立 City 數據集,以擷取所選國家/地區和州/省的相異城市值:
SELECT DISTINCT [City] FROM [Reseller] WHERE [Country-Region] = @CountryRegion AND [State-Province] = @StateProvince ORDER BY [City]
繼續此模式以建立 PostalCode 數據集。
使用下列查詢語句,建立 Reseller 數據集以擷取所選地理值的所有轉銷商:
SELECT [ResellerCode], [ResellerName] FROM [Reseller] WHERE [Country-Region] = @CountryRegion AND [State-Province] = @StateProvince AND [City] = @City AND [PostalCode] = @PostalCode ORDER BY [ResellerName]
除了第一個數據集之外,每個數據集都會將查詢參數對應至對應的報表參數。
注意
這些範例中顯示的所有查詢參數(前面加上 @ 符號)都可以內嵌在 SELECT 語句中,或傳遞至預存程式。
一般而言,預存程式是更好的設計方法。 這是因為其查詢計劃會快取以加快執行速度,並可讓您在需要時開發更複雜的邏輯。 不過,閘道關係型數據源目前不支持它們,這表示 SQL Server、Oracle 和 Teradata。
最後,您應該一律確保適當的索引存在,以支援有效率的數據擷取。 否則,您的報表參數可能會很慢地填入,而且資料庫可能會負擔過重。 如需 SQL Server 索引編製的詳細資訊,請參閱 SQL Server 索引架構與設計指南。
依群組數據行篩選
在此範例中,報表使用者會與報表參數互動,以選取轉銷商的第一個字母。 第二個參數會在名稱以選取的字母開頭時列出轉銷商。
以下說明如何開發串聯參數:
建立 ReportGroup 和 Reseller 報表參數,並以正確的順序排序。
使用 下列查詢語句建立 ReportGroup 數據集,以擷取所有轉銷商所使用的第一個字母:
SELECT DISTINCT LEFT([ResellerName], 1) AS [ReportGroup] FROM [Reseller] ORDER BY [ReportGroup]
使用 下列查詢語句,建立 Reseller 數據集,以擷取以所選字母開頭的所有轉銷 商:
SELECT [ResellerCode], [ResellerName] FROM [Reseller] WHERE LEFT([ResellerName], 1) = @ReportGroup ORDER BY [ResellerName]
將 Reseller 數據集的查詢參數對應至對應的報表參數。
將群組數據行新增至 Reseller 資料表更有效率。 保存並編製索引時,它會提供最佳結果。 如需詳細資訊,請參閱 Specify Computed Columns in a Table。
ALTER TABLE [Reseller]
ADD [ReportGroup] AS LEFT([ResellerName], 1) PERSISTED
這項技術可以提供更大的潛力。 請考慮下列腳本,此腳本會新增群組數據行,以依 預先定義的字母範圍來篩選轉銷商。 它也會建立索引,以有效率地擷取報表參數所需的數據。
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
依搜尋模式篩選
在此範例中,報表使用者會與報表參數互動,以輸入搜尋模式。 第二個參數會在名稱包含模式時列出轉銷商。
以下說明如何開發串聯參數:
建立搜尋和轉銷商報表參數,並以正確的順序排序。
使用 下列查詢語句建立 Reseller 數據集,以擷取包含搜尋文字的所有轉銷 商:
SELECT [ResellerCode], [ResellerName] FROM [Reseller] WHERE [ResellerName] LIKE '%' + @Search + '%' ORDER BY [ResellerName]
將 Reseller 數據集的查詢參數對應至對應的報表參數。
提示
您可以改善此設計,為報表使用者提供更多的控制。 它可讓他們定義自己的模式比對值。 例如,搜尋值 「red%」 會篩選成名稱 開頭 為 「red」 字元的轉銷商。
如需詳細資訊,請參閱 LIKE (Transact-SQL)。
以下說明如何讓報表用戶定義自己的模式。
WHERE
[ResellerName] LIKE @Search
然而,許多非資料庫專業人員不知道百分比 ≤ 通配符。 相反地,他們熟悉星號 \ 字元。 藉由修改 WHERE 子句,您可以讓他們使用這個字元。
WHERE
[ResellerName] LIKE SUBSTITUTE(@Search, '%', '*')
呈現相關專案
在此案例中,您可以使用事實數據來限制可用的值。 報表用戶會顯示已記錄活動的專案。
在此範例中,報表使用者會與三個報表參數互動。 前兩個設定銷售訂單日期的日期範圍。 第三個參數接著會列出在該期間內建立訂單的轉銷商。
以下說明如何開發串聯參數:
建立 OrderDateStart、 OrderDateEnd 和 Reseller 報表參數,並以正確的順序排序。
使用下列查詢語句,建立 Reseller 數據集,以擷取在日期期間內建立訂單的所有轉銷 商:
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]
建議
建議您盡可能使用串聯參數來設計報表。 這是因為它們:
- 為您的報表使用者提供直覺且實用的體驗
- 有效率,因為它們會擷取較小的可用值集
請務必透過:
- 盡可能使用預存程式
- 新增適當的索引以有效率地擷取數據
- 具體化數據行值,甚至是數據列,以避免昂貴的查詢時間評估
相關內容
如需本文的詳細資訊,請參閱下列資源:
- Power BI 報表產生器 中的報表參數
- 將串聯參數新增至報表 (報表產生器)
- 有任何問題嗎? 嘗試在 Power BI 社群提問
- 有任何建議嗎? 貢獻想法來改善 Power BI
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應