在編頁報表中使用級聯參數

本文以設計Power BI 編頁報表的報表作者身分為目標。 它提供設計串聯參數的案例。 串聯參數是具有相依性的報表參數。 當報表用戶選取參數值(或值)時,它會用來設定另一個參數的可用值。

注意

本文未涵蓋串連參數的簡介,以及如何設定它們。 如果您不熟悉串聯參數,建議您先閱讀在 Power BI 中將級聯參數新增至報表 報表產生器

設計案例

使用串聯參數的設計案例有兩種。 它們可以有效地用來:

  • 篩選大型專案集
  • 呈現 相關 專案

資料庫範例

本文中提供的範例是以 Azure SQL 資料庫 為基礎。 資料庫會記錄銷售作業,並包含儲存轉銷商、產品和銷售訂單的各種數據表。

名為 Reseller 的數據表會為每個轉銷 商儲存一筆記錄,其中包含數千筆記錄。 Reseller 資料表具有下列數據行:

  • ResellerCode (整數)
  • ResellerName
  • Country-Region
  • State-Province
  • 縣/市
  • PostalCode

也有一 個名為 Sales 的數據表。 它會儲存銷售訂單記錄,並在 ResellerCode 數據行上,與 Reseller 數據表有外鍵關聯性。

範例需求

開發轉銷商配置檔報表的需求。 報表必須設計為顯示單一轉銷商的資訊。 讓報表使用者輸入轉銷商程序代碼並不適合,因為它們很少記住它們。

篩選大型專案集

讓我們看看三個範例,協助您限制大型可用專案集,例如轉銷商。 畫面如下:

在此範例中,報表用戶會與五個報表參數互動。 他們必須選取國家/地區、州/省、市,然後選取郵遞區號。 最後一個參數接著會列出位於該地理位置的轉銷商。

Screenshot of Power BI paginated report parameters showing filter by related columns.

以下說明如何開發串聯參數:

  1. 建立五個報表參數,並以正確的順序排序。

  2. 使用下列查詢語句,建立擷取不同國家/地區值的 CountryRegion 數據集:

    SELECT DISTINCT
      [Country-Region]
    FROM
      [Reseller]
    ORDER BY
      [Country-Region]
    
  3. 使用下列查詢語句,建立 StateProvince 數據集,以擷取所選國家/地區的不同州/地區值:

    SELECT DISTINCT
      [State-Province]
    FROM
      [Reseller]
    WHERE
      [Country-Region] = @CountryRegion
    ORDER BY
      [State-Province]
    
  4. 使用下列查詢語句,建立 City 數據集,以擷取所選國家/地區和州/省的相異城市值:

    SELECT DISTINCT
      [City]
    FROM
      [Reseller]
    WHERE
      [Country-Region] = @CountryRegion
      AND [State-Province] = @StateProvince
    ORDER BY
      [City]
    
  5. 繼續此模式以建立 PostalCode 數據集。

  6. 使用下列查詢語句,建立 Reseller 數據集以擷取所選地理值的所有轉銷商:

    SELECT
      [ResellerCode],
      [ResellerName]
    FROM
      [Reseller]
    WHERE
      [Country-Region] = @CountryRegion
      AND [State-Province] = @StateProvince
      AND [City] = @City
      AND [PostalCode] = @PostalCode
    ORDER BY
      [ResellerName]
    
  7. 除了第一個數據集之外,每個數據集都會將查詢參數對應至對應的報表參數。

注意

這些範例中顯示的所有查詢參數(前面加上 @ 符號)都可以內嵌在 SELECT 語句中,或傳遞至預存程式。

一般而言,預存程式是更好的設計方法。 這是因為其查詢計劃會快取以加快執行速度,並可讓您在需要時開發更複雜的邏輯。 不過,閘道關係型數據源目前不支持它們,這表示 SQL Server、Oracle 和 Teradata。

最後,您應該一律確保適當的索引存在,以支援有效率的數據擷取。 否則,您的報表參數可能會很慢地填入,而且資料庫可能會負擔過重。 如需 SQL Server 索引編製的詳細資訊,請參閱 SQL Server 索引架構與設計指南

依群組數據行篩選

在此範例中,報表使用者會與報表參數互動,以選取轉銷商的第一個字母。 第二個參數會在名稱以選取的字母開頭時列出轉銷商。

Screenshot of Power BI paginated report parameters showing filter by a grouping column.

以下說明如何開發串聯參數:

  1. 建立 ReportGroupReseller 報表參數,並以正確的順序排序。

  2. 使用 下列查詢語句建立 ReportGroup 數據集,以擷取所有轉銷商所使用的第一個字母:

    SELECT DISTINCT
      LEFT([ResellerName], 1) AS [ReportGroup]
    FROM
      [Reseller]
    ORDER BY
      [ReportGroup]
    
  3. 使用 下列查詢語句,建立 Reseller 數據集,以擷取以所選字母開頭的所有轉銷 商:

    SELECT
      [ResellerCode],
      [ResellerName]
    FROM
      [Reseller]
    WHERE
      LEFT([ResellerName], 1) = @ReportGroup
    ORDER BY
      [ResellerName]
    
  4. 將 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

依搜尋模式篩選

在此範例中,報表使用者會與報表參數互動,以輸入搜尋模式。 第二個參數會在名稱包含模式時列出轉銷商。

Screenshot of Power BI paginated report parameters showing filter by search pattern.

以下說明如何開發串聯參數:

  1. 建立搜尋轉銷商報表參數,並以正確的順序排序。

  2. 使用 下列查詢語句建立 Reseller 數據集,以擷取包含搜尋文字的所有轉銷 商:

    SELECT
      [ResellerCode],
      [ResellerName]
    FROM
      [Reseller]
    WHERE
      [ResellerName] LIKE '%' + @Search + '%'
    ORDER BY
      [ResellerName]
    
  3. 將 Reseller 數據集的查詢參數對應至對應的報表參數。

提示

您可以改善此設計,為報表使用者提供更多的控制。 它可讓他們定義自己的模式比對值。 例如,搜尋值 「red%」 會篩選成名稱 開頭 為 「red」 字元的轉銷商。

如需詳細資訊,請參閱 LIKE (Transact-SQL)

以下說明如何讓報表用戶定義自己的模式。

WHERE
  [ResellerName] LIKE @Search

然而,許多非資料庫專業人員不知道百分比 ≤ 通配符。 相反地,他們熟悉星號 \ 字元。 藉由修改 WHERE 子句,您可以讓他們使用這個字元。

WHERE
  [ResellerName] LIKE SUBSTITUTE(@Search, '%', '*')

呈現相關專案

在此案例中,您可以使用事實數據來限制可用的值。 報表用戶會顯示已記錄活動的專案。

在此範例中,報表使用者會與三個報表參數互動。 前兩個設定銷售訂單日期的日期範圍。 第三個參數接著會列出在該期間內建立訂單的轉銷商。

Screenshot of Power BI paginated report parameters showing three report parameters: Start Order Date, End Order Date, and Reseller.

以下說明如何開發串聯參數:

  1. 建立 OrderDateStartOrderDateEndReseller 報表參數,並以正確的順序排序。

  2. 使用下列查詢語句,建立 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]
    

建議

建議您盡可能使用串聯參數來設計報表。 這是因為它們:

  • 為您的報表使用者提供直覺且實用的體驗
  • 有效率,因為它們會擷取較小的可用值集

請務必透過:

  • 盡可能使用預存程式
  • 新增適當的索引以有效率地擷取數據
  • 具體化數據行值,甚至是數據列,以避免昂貴的查詢時間評估

如需本文的詳細資訊,請參閱下列資源: