Power BI 微课堂 | 第112课:使用 URL 参数筛选报表
今天,我们继续学习:使用 URL 参数筛选报表。了解如何通过在 Power BI 报表 URL 中添加查询字符串参数,对报表数据进行预筛选,包括基本语法、运算符用法、特殊字符编码及日期格式的处理方式。
认识报表 URL 筛选
在 Power BI 服务中打开报表时,报表的每一页都有自己的专属 URL。若要筛选报表页,可以使用报表画布上的“筛选器”窗格,也可以向 URL 添加查询字符串参数来预筛选报表。
你可能有一个要向同事展示的报表,你希望为同事预筛选报表。筛选报表的一种方法是从其默认 URL 开始,将筛选器参数添加到 URL,然后将其通过电子邮件发送给整个新 URL。
本文以“零售分析示例”报告为例进行演示。你可以通过此页面右侧按钮下载此示例报表,以便跟着操作:

查询字符串参数的用途
比如说你正在使用 Power BI Desktop,希望创建一个包含其他 Power BI 报表的链接的报表,但只想显示其他报表中的某些信息。
首先,使用查询字符串参数筛选报表并保存 URL。接下来,使用这些新的报表 URL 在 Desktop 中创建一个表。 然后发布并共享报表。
查询字符串参数的另一个用途是用于创建高级 Power BI 解决方案。他们使用数据分析表达式(DAX)创建报表,该报表根据客户在当前报表中所做的选择动态生成筛选报表 URL。当客户选择 URL 时,只会看到预期信息。
用于筛选的查询字符串参数语法
通过参数,可筛选报表中的一个或多个值,即使这些值包含空格或特殊字符。基本语法相当简单:从报表 URL 开始,然后在查询字符串中添加筛选器语法。
URL 中的查询字符串以问号(?)开头,例如:
URL?filter=Table/Field eq 'value'

表名和字段名称区分大小写,值不区分大小写。
报表视图中隐藏的字段仍可供筛选。
如果筛选器参数不是查询字符串中的第一个参数,则用&连接到上一个参数,例如:
URL?reportId=aaaaaaaa-0000-1111-2222-bbbbbbbbbb&pageName=ReportSection&filter=Table/Field eq 'value'
重要语法规则
构造 URL 筛选器时,请记住以下关键规则:
带空格的字段名称:用于 _x0020_ 表示表或字段名称中的空格。 例如,如果表名为“Sales Data”,请在 Sales_x0020_Data URL 筛选器中使用。
具有特殊字符的字段名称:对于任何非 ASCII 字符、前导数字或特殊字符(如 @、 +、 [或 ])使用 Unicode 转义代码。格式是 _x 后跟四位数的 Unicode 值和一个下划线。
引用字段值:仅将文本字段值与单个撇号括起来。 数值不采用周围字符。文本值: filter=Product/Category eq 'Electronics';数值: filter=Product/Price eq 487
预先存在的筛选器:在传入 URL 筛选器之前,任何预先存在的筛选器都需要未经筛选(或设置为“全部”)。 否则,现有筛选器和新 URL 筛选器将创建一个 AND 关系,该关系可能导致数据集中的零条记录。
请注意,如果 URL 筛选器未按预期工作,请检查表和字段名称中的空格或特殊字符。 这些是筛选器似乎不起作用时的常见问题。
字段类型
字段类型可以是数字、日期/时间或字符串,使用的类型必须与语义模型中设置的类型匹配。例如,如果要在语义模型列中查找设置为日期的日期时间或数值,则指定类型为“string”的表列不起作用。 例如,Table/StringColumn eq 1。
字符串必须用单引号括起来,比如 'manager name'。
“数字”无需特殊格式。
日期和时间
对某字段进行筛选
假设我们的报表 URL 如下:

在上述地图可视化效果中可以看到,北卡罗来纳州有商店。 NC 值在“Store”表的“Territory”字段中表示北卡罗来纳州。因此,为了筛选报表以仅显示“NC”商店的数据,我们将以下字符串附加到 URL 中:
?filter=Store/Territory eq 'NC'

报告现已针对北卡罗来纳州进行了筛选;报告中的所有可视化都只显示北卡罗来纳州的数据。

在字段中筛选多个值
若要在一个字段中筛选多个值,请使用 in 运算符,而不是 and 运算符。 语法为:
URL?filter=Table/Fieldin('value1','value2')
使用同一个示例,若要从报表中筛选出“NC”(北卡罗来纳州)或“TN”(田纳西州)商店的数据,请在 URL 后面追加以下内容:
?filter=Store/Territory in ('NC', 'TN')
有关其他有用运算符的列表,请参阅本文后面的运算符表。
筛选多个字段
还可通过将其他参数添加到 URL 来筛选多个字段。 让我们回到最初的筛选器参数。
?filter=Store/Territory eq 'NC'
若要对其他字段进行筛选,请添加“and”和另一个与上例格式相同的字段。下面是一个示例。
?filter=Store/Territory eq 'NC' and Store/Chain eq 'Fashions Direct'
运算符
除了“and”之外,Power BI 还支持其他许多运算符。 下表列出了这些运算符及其支持的内容类型。

请注意,使用 in 时,in 右侧的值可以是括在括号中的逗号分隔列表,也可以是返回集合的单个表达式。
数值数据类型
Power BI URL 筛选器可包含以下格式的数字。

日期数据类型
Power BI 支持 OData V3 和 V4 的 Date 和 DateTimeOffset 数据类型。 在使用 OData V3 时,需要用单引号括住日期,并在其前加上关键字 datetime。 OData V4 中不需要单引号和“datetime”一词。
日期使用 EDM 格式 (2019-02-12T00:00:00) 表示:将日期指定为 'YYYY-MM-DD' 时,Power BI 将其解释为 'YYYY-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 少于四个字符,需要用零填充。
下面是一些示例:

Table_x0020_Name/Column_x002B_Plus eq 3

Table_x0020_Special/_x005B_Column_x0020_Brackets_x005D_ eq “[C]”

值中的特殊字符
URL 筛选器支持在字段值中使用大多数特殊字符,但某些筛选器还需要转义代码。 例如,要搜索单引号字符,请使用两个单引号 ('')。
?filter=Table/Name eq 'O''Brien' 变为:

?filter=Table/Name eq 'Lee''s Summit' 变为:

in 运算符也支持这种转义:?filter=Table/Name in ('Lee''s Summit', 'O''Brien') 变为:

下面列出了需要在字段值中使用转义代码的一些特殊字符。

标准 URL 转义字符
将 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
浏览器将 Andrew 和 Ma 之间的空格替换为 %20,同样替换了其他空格。它使用 Executives 替换了表名 Executive 和字段名称 %2F 之间的正斜杠,使用 ' 替换了单引号 %27。
此版本的 URL 可能很有用。 例如,可在 Microsoft Teams 中的聊天中粘贴它,它会返回所需的筛选结果。
使用 DAX 来对多个值进行筛选
对多个字段进行筛选的另一方法是创建将两个字段合并成一个值的计算列。 然后,便可以筛选此值。
例如,我们有两个数据字段:“Territory”和“Chain”。 在 Power BI Desktop 中,新建一个计算列(字段),并将其命名为“TerritoryChain”。 请注意,“字段”名称中不能有任何空格。下面是该列的 DAX 公式。
TerritoryChain = [Territory] & “ - ” & [Chain]
将报表发布到 Power BI 服务,然后使用 URL 查询字符串来筛选和显示北卡罗来纳州的 Lindseys 商店的数据。
https://app.powerbi.com/groups/me/reports/8d6e300b-696f-498e-b611-41ae03366851/ReportSection3?filter=Store/TerritoryChain eq 'NC – Lindseys'
将筛选后的报表固定为磁贴
使用查询字符串参数筛选报表后,可以将该报表中的可视化效果固定到仪表板。 仪表板上的磁贴会显示筛选出的数据,选择该仪表板磁贴会打开用于创建磁贴的报表。
不过,使用 URL 进行的筛选不会随报表一起保存。 在你选择仪表板磁贴后,报表以未筛选状态打开。 因此,仪表板磁贴中的数据与报表可视化效果中的数据不一致。
若要查看不同结果(在仪表板中显示筛选后的数据,在报表中显示未筛选的数据),便会发现这一差异很有用。
注意事项和疑难解答
使用查询字符串参数时,需要注意以下几点:
使用 in 运算符时,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 个表达式限制(通过 AND 连接的 10 个筛选器)。
由于 JavaScript 限制,长数据类型限制为 (2^53-1)。
URL 查询字符串限制为 2,000 个字符。 此限制包括特殊字符的转义代码(例如空格、%、+)。
无法筛选以大写字母 INF 开头的表名或列名,例如,以“INFORMATION”开头的表名。 大写 INF 是 OData 中的一个特殊值。 如果您希望表名或列名以“INF”开头,请将其改为小写的“inf”。
表名和字段名称可包含以 Unicode 形式表示的中文字符。 例如,假设你想应用一个筛选器:“表/人 eq '张力' ”(意思是表/人的值等于“张力”)。 筛选器被转化为 _x8868_/_x4eba_ eq '张力'。

某些嵌入场景支持 URL 筛选器,而另一些不支持:
支持在安全门户或网站中嵌入报表。
Power BI Embedded 中支持 URL 筛选器。
查询字符串筛选功能无法与发布到 Web或导出到 PDF一起使用。
在 SharePoint Online 中使用报表 Web 部件进行嵌入不支持 URL 筛选器。
Teams 不允许指定 URL。
以上就是关于「使用 URL 参数筛选报表」的全部内容。感谢您的耐心阅读,更多 Power BI 学习资源,请持续关注优阅达大数据生态。
Tableau
Tableau
Minitab

Alteryx











Neo4j











Talend


















IM
华为云
腾讯云
IT/安全