DataWind 支持通过 URL 参数覆盖嵌入仪表盘或图表的查询条件,实现自定义数据筛选效果。本文为您详细介绍 query 参数的语法规则和使用方法,帮助您灵活控制数据展示内容。
当你需要根据实际场景修改嵌入仪表盘或者嵌入图表的查询条件时,你可以通过在 URL 中传入查询配置以覆盖原有查询条件。
在 iframe 的 url 中传入 query 参数来配置覆盖筛选器。
import React from 'react' import ReactDOM from 'react-dom' import '@aeolus/sdk' class BIComponent extends React.Component { render() { return ( <iframe src={`https://console.volcengine.com/bi/datawind-open/#/external/dashboard/*****?appId=********&inline=true&query=OrderDate between '20210101' and '20210301' and Profit >= 100`} /> ) } } ReactDOM.render(<BIComponent />, document.querySelector('body'))
在 SDK 组件中,可以传入 query 参数来配置覆盖筛选器。
import React from 'react' import ReactDOM from 'react-dom' import '@aeolus/sdk' class BIComponent extends React.Component { render() { return ( <aeolus-dashboard urlPrefix="https://console.volcengine.com/bi/datawind-open" dashboardId="*****" appId="******" query={`OrderDate between '20210101' and '20210301' and Profit >= 100`} /> ) } } ReactDOM.render(<BIComponent />, document.querySelector('body'))
以下面的仪表盘链接为例,可以看到该仪表盘已经配置了 4 个公共筛选器 Category、ShipMode、Region、OrderDate。
https://console.volcengine.com/bi/datawind-open/#/dashboard/******?appId=*******
你或许已经注意到 ShipMode 和 OrderDate 与图表数据集字段并不一致,真实的数据集字段为 Ship Mode 和 Order Date。进行覆盖筛选器配置时,需要使用公共筛选器名称进行覆盖,而不是数据集字段。特别地,公共筛选器中不可以存在空格,否则在进行覆盖时无法识别。
&query=Category = 'Furniture' and Region in ('Central','South')
该配置表示查询 Category 为 Furniture,且 Region 为 Central 或 South 的数据。
&query=Category != 'Furniture' and ShipMode = 'First Class' and ProductName like '%Desktop%'
该配置表示查询 Category 不为 Furniture,且 ShipMode 为 First Class,且 ProductName 包含 Desktop 的数据。
&query=OrderDate between '20210101' and '20210301' and Profit >= 100
该配置表示查询 OrderDate 在 2021-01-01 与 2021-03-01之间,且 Profit 大于 100的数据。
完整的查询配置以&query=开头,由单个或多个查询语句组成。
field op value scope?
每个查询语句的基本语法由field、op、value以及可选的scope构成:
嵌入仪表盘时为公共筛选器名称或查询容器中公共筛选器名称,嵌入图表时为图表上添加的筛选字段名称。
对应下图中,test则为该查询组件的名称:
注意
field名称为纯数字时,如123,需要用方括号将其括起,如:[123]field名称中存在特殊字符时(除去中英文/数字/下划线之外的其他字符,如$test filter包含美元符和空格符),需要用方括号将其括起,如:[$test filter]field名称中存在特殊字符需要用方括号将其括起,并且field名称本身也包含[或]方符号时,需要使用\识别,如名称为test [demo] filter包含方括号和空格符,在语句中则可以这样表示:[test \[demo\] filter]可以根据实际场景使用in、like等操作符,具体操作符清单见后文中的基本查询操作符。
可以为数字或字符串。
如果查询值为字符串,需要使用单引号'*'包裹。如'Shanghai'。
多个值时需要用小括号括起,如('Jiangsu', 'Zhejiang')。
示例如下(当前查询组件名为 test):&query=test in ('北京','上海')
当需要指定查询范围时,可以通过 scope 来指定,例如限制筛选器覆盖指定 sheet 页:field op value scope sheetId = *
当有多个查询语句,需通过and连接符连接,表示配置是且的关系。DataWind 不支持覆盖筛选器之间为或关系。
语法如下:field1 op1 value1 and field2 op2 value2
如果遇到需要判断优先级的情况,可以使用圆括号()括起, 如 (test1 in ('Jiangsu', 'Zhejiang') scope sheetId = 123) and test2 like '%abc%'
op | 适用范围 | 说明 | 示例 |
|---|---|---|---|
| 文本-精确筛选 | 多个值时用括号括起,逗号分隔如: |
|
| 同上 | 同上 |
|
| 文本-条件筛选 | 可以使用通配符 |
|
| 文本-条件筛选 | 同上 |
|
| 文本-条件筛选 | 模糊匹配含有该值的数据项,效果相当于 |
|
| 文本-条件筛选 | 同上 |
|
| 文本-条件筛选 | 模糊匹配开头为该值的数据项,效果相当于 |
|
| 文本-条件筛选 | 模糊匹配结尾为该值的数据项,效果相当于 |
|
| 文本-条件筛选 |
| |
| 文本-条件筛选 |
| |
| 文本-条件筛选 |
| |
| 文本-条件筛选 |
| |
| 条件筛选 | 闭区间 |
|
| 指标数值 |
| |
| 指标数值 |
| |
| 文本-条件筛选 | 等于 |
|
| 文本-条件筛选 | 不等于 |
|
| 文本-条件筛选 | 大于 |
|
| 文本-条件筛选 | 大于等于 |
|
| 文本-条件筛选 | 小于 |
|
| 文本-条件筛选 | 小于等于 |
|
op | 适用范围 | 说明 | 示例 |
|---|---|---|---|
| 日期-单个日期 | 值为日期格式的字符串 |
|
| 日期-固定日期 | 当 value1 和 value2 值均为日期格式的字符串时,则为固定日期; |
|
| 日期-高级日期 | 起始时间为指定时间,终止时间无限制 |
|
| 日期-高级日期 | 起始时间无限制,终止时间为指定时间 |
|
| 日期-特殊日期 |
| |
| 日期-特殊日期 |
|
对于部分日期类型的查询,我们还提供了最近、最近有数、高级时间等函数来描述这类较复杂的场景。
查询函数说明如下:
用于描述动态日期-最近*天(周/月/双月/季度/年)。
latestDate(field, data, options?)
latestDate(field, 1)latestDate(field, 2, {unit: "week", offset: 0, until: "periodEnd" })
-- field: 查询组件名称
-- data: 动态日期取值
-- options: 配置项,非必传参数,不传时以默认值为准,具体信息如下
说明 | 取值列表 | |
|---|---|---|
unit | 单位(默认值"day") |
|
offset | 时间偏移单位(默认值-1) |
|
until | 截止到(默认"yesterday") |
|
用于描述动态日期-最近有数*天(周/月/双月/季度/年),仅支持分区字段。
latestSyncDate(field, data, options?)
latestSyncDate(field, 1)latestSyncDate(field, 2, {unit: "week"})
-- field: 查询组件名称
-- data: 动态日期取值
-- options: 配置项,非必传参数,不传时以默认值为准,具体信息如下:
unit 取值参考 latestDate。
用于用于描述高级日期-动态日期,需要结合 between、>=、<= 等操作符使用。
advancedDate(data, options?)
field between '2022-11-15' and advancedDate(1, {unit: "day", offset: -1})field >= advancedDate(1, {unit: "day", offset: -1})
-- data: 动态日期取值
-- options: 配置项,非必传参数,不传时以默认值为准,具体信息如下:
unit: 单位(默认值"day"), offset: 时间偏移单位(默认值-1)
注意
函数中的options为 json,因此字符串需要用""括起。
unit 取值参考 latestDate。
offset 取值列表:-1(前一天) 、 1(后一天)
数组函数,用于描述数组中包含某些元素。
arrayHas(field, data)
arrayHas(field, ('a', 'b'))
-- field: 查询组件名称
-- data: 数组值
数组函数,用于描述数组中不包含某些元素。
notArrayHas(field, data)
notArrayHas(field, ('a', 'b'))
-- field: 查询组件名称
-- data: 数组值
如需要清空某查询组件,可以通过 clear 函数进行清空,语法如下:clear(field)