request_uri 替换问号后面的一段 url问号后面的参数_url特殊字符转义


在 Power BI 服务中打开报表时,报表的每一页都有自己的专属 URL。 若要筛选报表页,可以使用报表画布上的“筛选器”窗格。 也可以向 URL 添加查询字符串参数来预筛选报表。 你可能有一个要向同事展示的报表,你希望为同事预筛选报表。 一种筛选方法是从报表的默认 URL 入手,向 URL 添加筛选参数,再以电子邮件方式向同事发送完整的新 URL。


request_uri 替换问号后面的一段 url问号后面的参数_字符串_02


用于查询字符串参数

假设使用的是 Power BI Desktop。 你希望创建一个包含其他 Power BI 报表的链接的报表,但只想显示其他报表中的某些信息。 首先,使用查询字符串参数筛选报表并保存 URL。 接下来,使用这些新的报表 URL 在 Desktop 中创建一个表。 然后发布并共享报表。

查询字符串参数的另一个用途是用于创建高级 Power BI 解决方案。 他们使用 DAX 创建一个报表,该报表根据客户在当前报表中所做的选择动态生成已筛选的报表 URL。 当客户选择 URL 时,只会看到预期信息。

用于筛选的查询字符串参数语法

通过参数,可筛选报表中的一个或多个值,即使这些值包含空格或特殊字符。 基本语法相当简单;从报表 URL 入手,然后依次添加问号和筛选语法。

URL?filter=Table/Field eq 'value'


request_uri 替换问号后面的一段 url问号后面的参数_Power_03


  • “表”和“字段”名称区分大小写,“值”不区分大小写 。
  • 报表视图中隐藏的字段仍可供筛选。

应用中的报表

如果要向应用中的报表添加 URL 筛选器,格式会略有不同。 应用中的报表链接有一个添加到 URL 中的查询参数 (ctid)。 使用 & 号分隔查询参数。 保留“?filter=”并将 ctid 参数移动到 URL 的末尾,前面加上 & 号。

如以下示例所示:

http://app.powerbi.com/groups/me/apps/app-id/reports/report-id/ReportSection?filter=Table/Field eq 'value'&ctid=ctid

字段类型

字段类型可以是数字、日期/时间或字符串,使用的类型必须与数据集中设置的类型匹配。 例如,如果要在设置为“日期”的数据集列集中查找日期/时间或数值(如 Table/StringColumn eq 1),无法将表列的类型指定为“字符串”。

  • “字符串”必须用单引号括起来,如 'manager name' 。
  • “数字”无需特殊格式 。 有关详细信息,请参阅本文中的数值数据类型。
  • 日期和时间 请参阅本文中的日期数据类型。

如果仍感到困惑,请继续阅读,我们将分部分讲解。

筛选一个字段

假设我们的报表 URL 如下。


request_uri 替换问号后面的一段 url问号后面的参数_url后面的参数是什么_04


从上文中的地图可视化效果可以看出,我们在北卡罗来纳州有商店。

备注
本示例以“零售分析”示例为依据“。

若要从报表中筛选出“NC”(北卡罗来纳州)商店的数据,请在 URL 后面追加以下内容:

?filter=Store/Territory eq 'NC'


request_uri 替换问号后面的一段 url问号后面的参数_字符串_05


备注
NC 是“Store” 表的“Territory” 字段中存储的值。

我们的报表针对北卡罗来纳州进行了筛选;报表页上的所有可视化效果都只显示北卡罗来纳州的数据。


request_uri 替换问号后面的一段 url问号后面的参数_url后面的参数是什么_06


筛选字段中的多个值

若要在一个字段中筛选多个值,请使用 in 运算符,而不是 and 运算符。 语法为:

URL?filter=Table/Field in ('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 还支持其他许多运算符。 下表列出了这些运算符及其支持的内容类型。

运算符运算符定义字符串数字日期示例and和是是是product/price le 200 and price gt 3.5eq等于是是是Address/City eq 'Redmond'ne不等于是是是Address/City ne 'London'ge大于或等于否是是product/price ge 10gt大于否是是product/price gt 20le小于或等于否是是product/price le 100lt小于否是是product/price lt 20in**包括是是是Student/Age in (27, 29)

** 使用 in 时,in 右侧的值可以是括在括号中的逗号分隔列表,也可以是返回集合的单个表达式。

数值数据类型

Power BI URL 筛选器可包含以下格式的数字。

数值数据类型数字类型示例integer5long5 L 或 5 ldouble5.5、55e-1、0.55e+1、5D、5d、0.5e1D、0.5e1d、5.5D、5.5d、55e-1D 或 55e-1ddecimal5 M 或 5 m 或 5.5 M 或 5.5 mfloat5 F 或 5 f 或 0.5e1 F 或 0.5e-1 d

日期数据类型

Power BI 支持 Date 和 DateTimeOffset 数据类型 OData V3 和 V4 。 对于 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 不支持日期,只支持日期时间。 因此如果使用 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 少于四个字符,需要用零填充。 下面是一些示例。

表名和列名中的特殊字符标识符UnicodePower BI 的编码表名空间是 0x20Table_x0020_NameColumn@Number@ 是 0x40Column_x0040_Number[Column][ is 0x005B ] 是 0x005Dx005B_Column_x005DColumn+Plus+ 是 0x2BColumn_x002B_Plus

Table_x0020_Name/Column_x002B_Plus eq 3


request_uri 替换问号后面的一段 url问号后面的参数_url后面的参数是什么_07


Table_x0020_Special/x005B_Column_x0020_Brackets_x005D eq '[C]'


request_uri 替换问号后面的一段 url问号后面的参数_字符串_08


值中的特殊字符

URL 筛选器已支持字段值中的所有特殊字符,但单引号 (') 除外。 单引号是唯一需要转义的字符。 要搜索单引号字符,请使用两个单引号 ('')。

例如:

  • ?filter=Table/Name eq 'O''Brien' 变为:


request_uri 替换问号后面的一段 url问号后面的参数_字段_09


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


request_uri 替换问号后面的一段 url问号后面的参数_字符串_10


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


request_uri 替换问号后面的一段 url问号后面的参数_字符串_11


使用 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 运算符时,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 筛选器,而另一些不支持。

  • 支持在安全门户或网站中嵌入报表。
  • Power BI Embedded 中支持 URL 筛选器。 有关详细信息,请参阅 Power BI Embedded 高级 URL 筛选功能。
  • 无法结合使用查询字符串筛选和发布到 Web 或导出到 PDF。
  • 使用报表 Web 部件在 SharePoint Online 中嵌入报表不支持 URL 筛选器。
  • Teams 不允许指定 URL。