在 URL 中使用查詢字串參數篩選報表

當您在 Power BI 服務 中開啟報表時,報表的每個頁面都有自己的唯一 URL。 若要篩選該報表頁面,您可以使用報表畫布上的 [篩選] 窗格。 或者,您可以將查詢字串參數新增至 URL,以預先篩選報表。 也許您有想要顯示同事的報表,而您想要為其預先篩選。 其中一個篩選方法是從報表的預設 URL 開始,將篩選參數新增至 URL,然後傳送電子郵件給他們整個新的 URL。

本文使用零售分析範例報告。 如果您想要跟著做,可以 下載範例報表

Screenshot of Power BI report in the service.

用於查詢字串參數

假設您正在使用Power BI Desktop。 您想要建立具有其他 Power BI 報表連結的報表,但您想要只顯示其他報表中的部分資訊。 首先,使用查詢字串參數來篩選報告,並儲存URL。 接下來,使用這些新的報表 URL 在 Desktop 中建立數據表。 然後發佈並共享報表。

查詢字串參數的另一個用途是建立進階 Power BI 解決方案的人員。 在 DAX 中,他們會建立報表,根據客戶在目前報表中所做的選取,動態產生篩選的報表 URL。 當客戶選取 URL 時,他們只會看到預期的資訊。

用於篩選的查詢字串參數語法

使用參數時,即使這些值包含空格或特殊字元,您還是可以篩選報表中的一或多個值。 基本語法相當簡單;從報表 URL 開始,新增問號,然後新增篩選語法。

URL?filter=Table/Field eq 'value'

Screenshot of U R L with filter.

  • 資料表網域名稱 會區分大小寫; 不是。
  • 仍可篩選從報表檢視隱藏的欄位。

欄位類型

欄位類型可以是數位、日期時間或字串,而且所使用的類型必須符合語意模型中設定的類型。 例如,如果您要在語意模型數據行中尋找日期時間或數值,例如 Table/StringColumn eq 1,指定 “string” 類型的數據表數據行將無法運作。

如果仍然令人困惑,請繼續閱讀,我們會將其分解。

篩選欄位

假設報表的 URL 如下。

Screenshot of starting URL.

我們在先前的地圖視覺效果中看到我們在北卡羅來納州的商店。 NC 是代表 Store 數據表之 Territory 字段中北卡羅來納州的值。 因此,若要篩選報表,只顯示 「NC」 中存放區的數據,我們會將此字串附加至 URL:

?filter=Store/Territory eq 'NC'

Screenshot of U R L with filter for North Carolina.

我們的報告現在已篩選為北卡羅來納州:報表中的所有視覺效果只會顯示北卡羅來納州的數據。

Screenshot of Report filtered for North Carolina.

篩選欄位中的多個值

若要篩選單一欄位中的多個值,您可以使用 in 運算元,而不是 運算子。 語法為:

URL?filter=Table/Fieldin ('value1', 'value2')

使用相同的範例,篩選報表,只顯示 「NC」 (北卡羅來納州) 或 「TN」 (田納西州) 中商店的數據,並附加下列 URL:

?filter=Store/Territory in ('NC', 'TN')

如需其他實用運算符的清單,請參閱本文稍後的 Operators 數據表。

篩選多個字段

您也可以將更多參數新增至 URL,以篩選多個字段。 讓我們回到原始篩選參數。

?filter=Store/Territory eq 'NC'

若要篩選更多欄位,請以與上一個範例相同的格式新增 'and' 和另一個字段。 以下是範例。

?filter=Store/Territory eq 'NC' and Store/Chain eq 'Fashions Direct'

操作員

除了 『and』 之外,Power BI 還支援許多運算符。 下表列出這些運算符以及其支援的內容類型。

運算子 定義 String Number Date 範例
and product/price le 200 and price gt 3.5
eq 等於 位址/城市 eq 'Redmond'
ne 不等於 位址/城市 ne 'London'
通用電氣 大於或等於 product/price ge 10
燃氣輪機 大於 product/price gt 20
小於或等於 product/price le 100
lt 小於 product/price lt 20
in* 包括 學生/年齡在 (27, 29)

* 當您在 中使用 時,中的可以是以逗號分隔的清單,以括弧括住,或是傳回集合的單一表達式。 如需範例, 請參閱 IN 運算元一文

數值資料類型

Power BI URL 篩選可以包含下列格式的數位。

數字類型 範例
integer 5
long 5 L 或 5 l
double 5.5 或 55e-1 或 0.55e+1 或 5D 或 5d 或 0.5e1D 或 0.5e1d 或 5.5D 或 5.5d 或 55e-1D 或 55e-1d
decimal 5 M 或 5 m 或 5.5 M 或 5.5 m
float 5 F 或 5 f 或 0.5e1 F 或 0.5e-1 d

日期資料類型

Power BI 支援 Date 和 DateTimeOffset 數據類型的 OData V3 和 V4。 針對 OData V3,您必須以單引弧括住日期,並在日期時間一詞前面加上日期。 您不需要單引號和 OData V4 中的日期時間字。

日期是使用 EDM 格式來表示(2019-02-12T00:00:00):當您將日期指定為 'YYYY-MM-DD'時,Power BI 會將它解譯為 'YYYYY-MM-DDT00:00:00'。 請確定月份和日是兩位數,MM 和 DD。

為什麼這種區別很重要? 假設您建立查詢字串參數 Table/Date gt '2018-08-03'。 結果會包含 2018 年 8 月 3 日,還是從 2018 年 8 月 4 日開始? Power BI 會將查詢轉譯為 Table/Date gt '2018-08-03T00:00:00'。 因此,您的結果包含具有非零時間部分的任何日期,因為這些日期會大於 『2018-08-03T00:00:00』

V3 和 V4 之間還有其他差異。 OData V3 不支援 Date,僅支援 DateTime。 因此,如果您使用 V3 格式,則必須將它限定為完整日期時間。 V3 表示法不支援日期常值,例如 “datetime'2019-05-20'”。 但是,您可以在 V4 表示法中將其撰寫為 “2019-05-20”。 以下是 V3 和 V4 中的兩個對等篩選查詢:

  • OData V4 格式:filter=Table/Date gt 2019-05-20
  • OData V3 格式:filter=Table/Date gt datetime'2019-05-20T00:00:00'

URL 篩選條件中的特殊字元

數據表和數據行名稱中的特殊字元

表格和數據行名稱中的特殊字元、空格和前置數位需要更多格式設定。 當您的查詢包含空格、破折號、前置數位或其他非 ASCII 字元時,請以逸出碼開頭為底線和 X(_x),然後為四位數 Unicode,再加上另一個底線的特殊字元。 如果 Unicode 少於四個字元,您需要以零填補它。 以下列出一些範例。

識別碼 Unicode Power BI 程式代碼撰寫
資料表名稱 空間為 00x20 Table_x0020_Name
@ @ 是 00x40 Column_x0040_Number
[數據行] [ is 0x005B ] is is 0x005D _x005B_Column_x005D_
Column+Plus + 是0x2B Column_x002B_Plus
2TableName 2 為 x0032 _x0032_TableName_

Table_x0020_Name/Column_x002B_Plus eq 3 Screenshot of table visual rendering special characters for Unicode.

Table_x0020_Special/_x005B_Column_x0020_Brackets_x005D_ eq '[C]' Screenshot of table visual rendering special characters for coding for Power B I.

值中的特殊字元

URL 篩選條件在域值中支援大多數特殊字元,但有些也需要 逸出碼。 例如,若要搜尋單引號字元,請使用兩個單引號 ('')。

  • ?filter=Table/Name eq 'O''Brien' 成為:

    Name is O'Brien

  • ?filter=Table/Name eq 'Lee''s Summit' 成為:

    Lee's Summit

  • 運算子in也支援此逸出:變成: ?filter=Table/Name in ('Lee''s Summit', 'O''Brien')

    Lee's Summit or O'Brien

以下是一些需要在域值中逸出代碼的特殊字元清單。

字元 逸出程序代碼
(一個空間) 20%
' ''
% 25%
+ %2B
/ %2F
? %3F
# %23
26%

標準 URL 逸出字元

當您使用 URL 搭配空格和其他特殊字元時,瀏覽器可能會以標準逸出字元自動取代它們。 假設您建立此網址查詢字串:

https://app.powerbi.com/groups/me/reports/b7dea1d4-d9f0-47aa-a88d-xxxxxxxxxxxx/ReportSection2?filter=Executives/Executive eq 'Andrew Ma'

它會開啟客戶獲利率範例,並篩選為 Andrew Ma。 但是,如果您查看 URL,它現在看起來可能像這樣:

https://app.powerbi.com/groups/me/reports/b7dea1d4-d9f0-47aa-a88d-xxxxxxxxxxxx/ReportSection2?filter=Executives%2FExecutive%20eq%20%27Andrew%20Ma%27

瀏覽器已將和 Ma 之間的Andrew空間取代為 %20,否則為其他空格。 它會將數據表名稱和Executives功能變數名稱之間的正斜線取代為 %2F,並以取代單引號'%27Executive

此版本的 URL 可能很有用。 例如,您可以將它貼到 Microsoft Teams 中的聊天中,並傳回所需的篩選結果。

使用 DAX 篩選多個值

篩選多個字段的另一種方式是建立將兩個字段串連至單一值的匯出數據行。 然後,您可以篩選該值。

例如,我們有兩個字段:Territory 和 Chain。 在 Power BI Desktop 中, 建立名為 TerritoryChain 的新導出數據行 (字段)。 請記住, 功能變數名稱 不能有任何空格。 以下是該數據行的 DAX 公式。

TerritoryChain = [Territory] & “ - ” & [Chain]

將報表發佈至 Power BI 服務,然後使用URL查詢字串來篩選和顯示NC中僅Lindseys存放區的數據。

https://app.powerbi.com/groups/me/reports/8d6e300b-696f-498e-b611-41ae03366851/ReportSection3?filter=Store/TerritoryChain eq 'NC – Lindseys'

從篩選的報表釘選磚

使用查詢字串參數篩選報表之後,您就可以將視覺效果從該報表釘選到儀錶板。 儀錶板上的圖格會顯示篩選的數據,然後選取該儀錶板磚會開啟用來建立報表的報表。 不過,您使用 URL 的篩選不會與報表一起儲存。 當您選取儀錶板磚時,報表會以未篩選的狀態開啟。 因此,儀錶板磚中顯示的數據與報表視覺效果中顯示的數據不符。

當您想要看到不同的結果時,這項差異很有説明;篩選在儀錶板上,且報表中未篩選。

考慮和疑難解答

使用查詢字串參數時,有幾個事項需要注意。

  • 當您使用 in 運算符時,中的必須是以逗號分隔的清單,以括弧括住。

  • Power BI 報表伺服器 也支援使用 「filter」 URL 參數指定多個篩選的功能。 以下是 URL 在 Power BI 報表伺服器 中看起來可能的樣子範例:https://reportserver/reports/powerbi/Store Sales?rs:Embed=true&filter= Store/Territory eq 'NC' and Store/Chain eq 'Fashions Direct'

  • 報表 URL 篩選條件有 10 個表達式的限制(10 個由 AND 連接的篩選條件)。

  • 由於 JavaScript 限制,long 數據類型為 (2^53-1)。

  • URL 查詢字串限制為 2000 個字元。 此限制包括特殊字元的逸出碼(例如空格、%+)。

  • 您無法篩選以大寫字母 INF 開頭的數據表或數據行名稱,例如,以 「INFORMATION」 開頭的數據表名稱。 大寫 INF 是 OData 中的特殊值。 如果您想要以 「INF」 啟動資料表或數據行名稱,請改為將它設為小寫 「inf」。

  • 數據表和功能變數名稱可以包含以 Unicode 格式表示的文字元。 例如,假設您想要套用一個篩選條件,該篩選表/人 eq '功能' (這表示 Table/Person eq '條件')。 篩選條件會轉換成 _x8868_/_x4eba_ eq '條件'。

    Screenshot of Chinese characters converted to Unicode format in a search string.

內嵌案例

某些內嵌案例不支援 URL 篩選條件,而不支援其他案例。

更多問題嗎? 嘗試在 Power BI 社群提問