5.4 图表过滤条件
SaCa DataViz 支持对图表和图册的数据添加过滤条件,起到筛选有效数据、过滤脏数据的作用。图表中的过滤条件与图册有所不同,其具体的区别为:
在图表中设置的过滤条件,将硬性过滤掉所有不满足条件的数据,过滤掉的数据将永远显示不出来,一般用于脏数据的处理。
在图册中设置的过滤条件,会根据条件的变化动态的筛选数据,将新数据重新赋值给图表,并触发图表刷新,一般用于业务的自助式数据分析。
本节将介绍图表中的过滤条件,图册的过滤条件请参考本文档第 6.14 节。
5.4.1 过滤条件的使用方法
以字符型过滤条件做例子,图表当前有若干地区(东北、华东、华中、西北……)的数据,现希望通过过滤条件,仅保留东北、华东两地区的数据,可按照如下步骤实现:
将“地区”字段拖拽到图表上方的过滤条件栏中;
在弹出的条件设置对话框中,勾选“东北”、“华东”两个字段后,点击确定;
过滤条件设置完成,图表上仅保留有“东北”、“华东”两地区的数据。
操作过程如下图所示。
如果希望在条件输入框中输入值后, 根据输入内容进行检索,而不是先查询所有数据,可在 config.js 中设置如下配置项:
//是否根据我的输入进行检索,而不是先查询所有数据
window.searchByInput = true;
5.4.2 三种过滤条件的概念及使用方法
5.4.2.1 时间型过滤条件
时间型过滤条件针对时间类型的字段,包括“年-月-日”、“时-分-秒”以及“年-月-日-时-分-秒”等类型。时间类型需要在数据集页面中设置,设置成功后字段前会有日历图标,如下图所示。
时间类型的过滤条件包括 7 种:下拉列表、相对时间、时间范围、开始时间、结束时间、单个日期、特殊时间。其中,时间范围、开始时间、结束时间、单个日期均较为容易理解和使用,只需按照需求,设定相应的时间上下限或限定值即可。本文档将着重介绍下拉列表、相对时间和特殊时间 3 种稍微复杂一些的功能。。
5.4.2.1.1 下拉列表
下拉列表用于快速选择一些常用的相对时间范围,并且在播放时已下拉列表的方式展示,左侧为目前支持的选项,右侧是播放时下拉列表中显示的项,并且可以在右侧设置条件的默认值。下拉列表的内容支持扩展,详情请参考《时间过滤条件下拉列表扩展》。
以当前时间 2022 年 2 月 21 日 13 点整, 举例说明各个选项代表的时间范围:
- 近3年:2019-02-21 ~ 2022-02-21
- 近2年:2020-02-21 ~ 2022-02-21
- 前年:2020-01-01 ~ 2020-12-31
- 去年:2021-01-01 ~ 2021-12-31
- 今年:2022-01-01 ~ 2022-12-31
- 近12个月:2021-02-21 ~ 2022-02-21
- 近6个月:2021-08-21 ~ 2022-02-21
- 近3个月: 2021-11-21 ~ 2022-02-21
- 上个月:2022-01-01 ~ 2022-01-31
- 本月: 2022-02-01 ~ 2022-02-28
- 近180天:2021-08-25 ~ 2022-02-21
- 近90天:2021-11-23 ~ 2022-02-21
- 近30天:2022-01-22 ~ 2022-02-21
- 近15天:2022-02-06 ~ 2022-02-21
- 近7天:2022-02-14 ~ 2022-02-21
- 近3天:2022-02-18 ~ 2022-02-21
- 前天:2022-02-19
- 昨天:2022-02-20
- 今天:2022-02-21
- 近24小时:2022-02-20 13:00:00 ~ 2022-02-21 13:00:00
5.4.2.1.2 相对时间
相对时间适用于动态的、实时更新的数据。Saca Dataviz 提供了年、季度、月、周、日共计 5 种时间粒度,供用户选择。同样地,在选择时间粒度后,就可以自行定义时间跨度,可自行设定时间跨度的长度。例如可以将下图中的“前 1 月”改为“前 3 月”等。
以当前时间 2020 年 9 月 21 日,时间粒度为月,时间跨度为 1 的情况举例说明:
前 1 月:当前日期的上 1 个月(8 月)的数据,即 2020-08-01~2020-08-31 期间的数据;
当前月:当前日期所在月(9 月)的数据,即 2020-09-01~2020-09-30 期间的数据;
后 1 月:当前日期的下 1 个月(10 月)的数据,即 2020-10-01~2020-10-31 期间的数据;
前 1 月至当前:当前日期的上 1 个月的 1 日至当前日期(9 月 21 日)的数据,即 2020-08-01~2020-09-21 的数据;
当前值后 1 月:当前日期(9 月 21 日)至下 1 个月的 31 日(或 30 日,2 月为 28 日或 29 日)的数据,即 2020-09-21~2020-10-31 的数据;
前 1 月至当前月:当前日期的上 1 个月(8 月)至当前日期所在整月(9 月)的数据,即 2020-08-01~2020-09-30 的数据;
当前月至后 1 月:当前日期所在整月(9 月)至当前日期的下 1 个月(10 月)的数据,即 2020-09-01~2020-10-31 的数据。
随着用户选取的时间粒度和时间跨度的变化,可以在窗口中实时预览当前所选的时间范围,如下图所示。
此外,如果用户勾选了“播放时显示为下拉列表”选项,那么时间的选择将以下拉列表的形式展现,而非日历控件。二者的区别如下图所示,左侧为下拉列表,右侧为日历控件。同时,用户还可以点击“下拉列表”,在弹出的窗口中设置下拉列表的内容。
5.4.2.1.3 特殊时间
特殊时间使用情形较少,适合过滤空数据。“NULL 值”会筛选出空值数据,“非 NULL 值”会筛选出非空值数据,“所有值”会筛选出所有数据,等同于没有过滤。
5.4.2.2 数值型过滤条件
数值型过滤条件针对数值类型的字段(即度量字段)。数值类型的过滤条件包括“双向”、“至多”、“至少”和“特殊值”等 4 类,这些功能均比较容易理解,在此不再赘述,下面着重介绍“聚合前过滤”和“聚合后过滤”。前者是针对原始数据进行过滤,后者是针对数据聚合后的结果进行过滤。为了更好的说明这两项功能,本文档以城市“烟台”的“订单数量”为例进行介绍,如下图所示为本例所使用的数据。
5.4.2.2.1 聚合前过滤
在上图所示的数据集中,共有 7 条“烟台”的数据,对“订单数量”字段使用“聚合前过滤”,将数据范围设置为 20~45,那么在图表中将直接过滤数据集中不满足条件的 2 条数据,剩下的 5 条数据参与聚合,所以在图表中,“烟台”的“订单数量”为 25+21+20+40+36=142。
5.4.2.2.2 聚合后过滤
依旧使用上述的数据集,如果对“订单数量”字段使用“聚合后过滤”,并限定最小值为 300,选择“求和”方法。那么,由于“烟台”的“订单数量”求和值小于 300,所以此时数据集中“烟台”的 7 条数据会全部被过滤掉,图表中也不会出现“烟台”关于“订单数量”的信息。同样被过滤掉的,还有其他“订单数量”求和值大于 300 的城市。
5.4.2.3 字符型过滤条件
字符型过滤条件针对文字类型的字段(即维度字段)。字符类型的过滤条件包括“常规”与“通配符”2 类。“常规”的用法已在第 5.4.1 节中展示过,下面介绍“通配符”的使用方法。
通配符支持在用户选择过滤方式后,根据用户输入的关键字进行数据的过滤。用户可以在“包含”、“开头为”、“结尾为”、“精确匹配”、“为 NULL”共 5 种过滤方式中根据需要进行选择,同时通过勾选“排除”来反转过滤结果。
下面通过一个简单的案例对通配符功能进行说明。在选择“通配符”后,选择“包含”并在“请输入通配符”栏中输入“烟台”,这样的做法将过滤掉所有不包含“烟台”两个字的数据,操作方法和得到的结果如下图所示。
反之,如果选择“排除”功能,将过滤掉所有包含“烟台”两个字的数据。
5.4.3 高级设置
对于过滤条件需求比较复杂的场景,Saca Dataviz 提供了一系列额外的设置项供用户使用。将过滤条件拖拽至图表上方后,或点击已加入图表中的过滤条件,在弹窗中点击“高级设置”,即可看到这些设置项。
5.4.3.1 播放隐藏
过滤条件的交互空间在界面中默认是显示的状态,如果用户想隐藏控件(如采用 URL 传参的,就没有必要在界面中再显示控件),则勾选此选项。
5.4.3.2 自动刷新数据
适用于在设置好过滤条件后,不需要点击“确定”按钮,直接使过滤条件生效的情形。SaCa DataViz 为了兼顾查询性能,默认关闭了此功能。
5.4.3.3 取消选中置顶项
在默认情况下,在选中某过滤条件后,会将该项置顶。勾选该选项后将禁用该功能。
5.4.3.4 设置控件宽度
目前支持字符型过滤条件设置自定义下拉框宽度。
5.4.3.5 预处理与初始联动条件
请参考第 6 章中的相关内容。
5.4.3.6 地址传参
5.4.3.6.1 通过 URL 传参过滤图表中的数据
在第三方平台嵌套集成 SaCa DataViz 产品时,可以在第三方平台生成 URL 参数并拼接到图表或图册的播放链接中,通过这种方式可以实现在 SaCa DataViz 系统外部动态更换数据内容。
5.4.3.6.1.1 参数的获取
在用户编辑好需要的过滤条件后,在“高级设置”栏中点击“地址传参”,弹出对话框中包含有 JSON 格式的参数,就是根据之前交互编辑的过滤条件生成的 JSON 对象。
5.4.3.6.1.2 使用方法及步骤
(1)获取过滤参数并在外层添加方括号构成 json 数组,数组内可添加多个条件,如下;
[
{
"field": {
"name": "省份",
"dataSetId": "42f699f0-559e-4864-83a0-d8d966153869",
"role": "string",
"type": "STRING"
},
"type": "routine",
"values": [
"辽宁"
],
"allIn": false,
"others": 0
}
]
(2)将参数字符串通过 JS 原生方法“encodeURIComponent(URIstring)”转码(介绍链接:http://www.w3school.com.cn/jsref/jsref_encodeURIComponent.asp);
(3)转码得到可使用的 URL 参数字符串,如下;
%5B%7B%22field%22%3A%7B%22name%22%3A%22%E7%9C%81%E4%BB%BD%22%2C%22dataSetId%22%3A%2242f699f0-559e-4864-83a0-d8d966153869%22%2C%22role%22%3A%22string%22%2C%22type%22%3A%22STRING%22%7D%2C%22type%22%3A%22routine%22%2C%22values%22%3A%5B%22%E8%BE%BD%E5%AE%81%22%5D%2C%22allIn%22%3Afalse%2C%22others%22%3A0%7D%5D
(4)将得到的参数字符串拼接到图册和图表的 URL 中,在浏览器中打开拼接后的 URL,即可看到过滤条件生效;
http://localhost:8082/dataviz/src/q.html?b=d78167c9-3d4b-47da-bb91-e646799162e6&conditions=%5B%7B%22field%22%3A%7B%22name%22%3A%22%E7%9C%81%E4%BB%BD%22%2C%22dataSetId%22%3A%2242f699f0-559e-4864-83a0-d8d966153869%22%2C%22role%22%3A%22string%22%2C%22type%22%3A%22STRING%22%7D%2C%22type%22%3A%22routine%22%2C%22values%22%3A%5B%22%E8%BE%BD%E5%AE%81%22%5D%2C%22allIn%22%3Afalse%2C%22others%22%3A0%7D%5D
(5)示例代码
以下代码实现 html 页面内嵌 DataViz 图册,外层控件刷新图册条件。
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<button onclick="updateCondition()">刷新过滤条件</button>
<script>
var data =
[
{"field":{"name":"品牌描述","dataSetId":"ca8bbf66-0abd-4fe6-956f-95e6cf127a3a","role":"string","type":"STRING"},"type":"routine","values":["PAW IN PAW","汇总"],"allIn":false,"others":0,"hidden":true}
];
var src="http://localhost:8082/dataviz/src/q.html?b=5d825bfd-dc86-4387-a37b-167efa2e0c87";//图册播放地址
function updateCondition(){
document.getElementById("dvbook").src=src + "&conditions=" + encodeURIComponent(JSON.stringify(data));
};
</script>
<iframe id="dvbook" style="width:100%; height:90%;border-width:0px;" src="http://localhost:8082/dataviz/src/q.html?b=5d825bfd-dc86-4387-a37b-167efa2e0c87"></iframe>
</body>
</html>
5.4.3.6.1.3 参数的规则介绍
不同过滤条件的参数规则并不相同,过滤参数仅支持用户进行内容的修改,不支持用户自定义规则。
5.4.3.6.1.3.1 字符类型
(1)常规模式:
field:字段信息;其中包含字段名称,数据集ID,字段角色和数据类型。
type:模式信息,此处表示为常规模式。
values:过滤内容,数组,字段实际值的子集。
others:是否为排除,1:排除,0不排除。
(2)通配符模式:
field:字段信息;其中包含字段名称,数据集ID,字段角色和数据类型。
type:模式信息,此处表示为通配符模式。
value:过滤匹配值,根据实际设置的匹配值不同而变化。
matchType:匹配方式。可选值:contains、startWith、endWith、equals和isEmpty。当匹配方式为isEmpty时,value不起作用。
others:是否为排除,1:排除,0不排除。
5.4.3.6.1.3.2 时间类型
(1)相对时间
field:字段信息;其中包含字段名称,数据集ID,字段角色和数据类型。
type:模式信息,此处表示为相对时间模式。
relativeUnit:相对时间单位。
relativeValue:相对时间,整数,为正数时表示后XX时间单位,为0时表示为当前时间单位,为负数时表示前XX时间单位。
(2)时间范围
field:字段信息;其中包含字段名称,数据集ID,字段角色和数据类型。
type:模式信息,此处表示为时间范围模式。
start:开始时间,不能大于结束时间。时间格式固定为yyyy-MM-dd或yyyy-MM-dd HH:mm:ss。
end:结束时间,不能小于开始时间,时间格式固定为yyyy-MM-dd或yyyy-MM-dd HH:mm:ss。
(3)开始时间
field:字段信息;其中包含字段名称,数据集ID,字段角色和数据类型。
type:模式信息,此处表示为开始时间模式。
start:开始时间,时间格式固定为yyyy-MM-dd或yyyy-MM-dd HH:mm:ss。
(4)结束时间
field:字段信息;其中包含字段名称,数据集ID,字段角色和数据类型。
type:模式信息,此处表示为结束时间模式。
end:结束时间,时间格式固定为yyyy-MM-dd或yyyy-MM-dd HH:mm:ss。
(5)特殊值
field:字段信息;其中包含字段名称,数据集ID,字段角色和数据类型。
type:模式信息,此处表示为特殊值模式。
specialValue:特殊值,可选值:isNull、isNotNull和all。
5.4.3.6.1.3.3 数值类型
(1)双向
field:字段信息;其中包含字段名称,数据集ID,字段角色和数据类型。
type:模式信息,此处表示为双向模式。
min:最小值。
max:最大值。
includeMin:是否包含最小值,1:包含,0:不包含。
includeMax:是否包含最大值,1:包含,0:不包含。
aggregateFilter:是否聚合前过滤,1:是,0:否。
aggregation:聚合方式,可选值:sum、max、min、avg、count和count_distinct。
(2)至多
field:字段信息;其中包含字段名称,数据集ID,字段角色和数据类型。
type:模式信息,此处表示为至多模式。
max:最大值。
includeMax:是否包含最大值,1:包含,0:不包含。
aggregateFilter:是否聚合前过滤,1:是,0:否。
aggregation:聚合方式,可选值:sum、max、min、avg、count和count_distinct。
(3)至少
field:字段信息;其中包含字段名称,数据集ID,字段角色和数据类型。
type:模式信息,此处表示为至少模式。
min:最小值。
includeMin:是否包含最小值,1:包含,0:不包含。
aggregateFilter:是否聚合前过滤,1:是,0:否。
aggregation:聚合方式,可选值:sum、max、min、avg、count和count_distinct。
(4)特殊值
field:字段信息;其中包含字段名称,数据集ID,字段角色和数据类型。
type:模式信息,此处表示为特殊值模式。
specialValue:特殊值,可选值:isNull、isNotNull和all。
aggregateFilter:是否聚合前过滤,1:是,0:否。
aggregation:聚合方式,可选值:sum、max、min、avg、count和count_distinct。
5.4.3.6.2 图册内资源传参过滤
在 SaCa DataViz 中,用户可以通过网页资源把已存在的网页嵌入到图册中。本文主要介绍外部页面如何实现对图册内图表的过滤。
5.4.3.6.2.1 参数的获取
请参考第 5.4.3.6.1.1 节。
5.4.3.6.2.2 使用方法
(1)获取过滤参数
{
"field":{
"name":"省份",
"dataSetId":"f8b8eb5f-484b-4e15-a82f-28170e081e09",
"role":"string",
"type":"STRING"
},
"type":"routine",
"values":["上海","北京","云南"],
"allIn":false,
"others":0
}
(2)将所获取参数构建到新的结构中
data = {
action: "confirm",
conditions: [
{
"id":"自定义的唯一ID"
"field":{
"name":"省份",
"dataSetId":"f8b8eb5f-484b-4e15-a82f-28170e081e09",
"role":"string",
"type":"STRING"
},
"type":"routine",
"values":["上海","北京","云南"],
"allIn":false,
"others":0
}
]
}
conditions 内是过滤参数的原始结构。注意这里添加了"id"属性,id 要唯一这是后续更新条件的基础。
如果在图册中配置“全局传参过滤”做图册全局过滤,图表依赖的数据集字段名相同即可响应过滤。否则给条件中的 dataSetId 赋值,那么可以指定数据集所关联的图表响应过滤。
(3)将代码写入一个页面,比如 innerfilter.html,使用 window.postMessage 方法发送条件。
示例代码:
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<button onclick="postCondition()">发送过滤条件</button>
<script>
var data ={
action: "confirm",
conditions: [
{"id":"111","field":{"name":"省份","dataSetId":"f8b8eb5f-484b-4e15-a82f-28170e081e09","role":"string","type":"STRING"},"type":"routine","values":["上海","北京","云南"],"allIn":false,"others":0}
]
};
function postCondition(){
window.parent.postMessage(data, '*');
}
</script>
</body>
</html>
(4)可将 html 页面放入 dataviz 前端路径,比如 dataviz-web/tmp/innerfilter.html。
(5)在图册中引入这个页面
这样就实现了自定义的图册页过滤控件。
【注意】因为图册网页控件用的是 iframe,如果有自定义的下拉框样式会被 iframe 边缘遮挡,H5 原生标签无遮挡问题。
5.4.3.6.2.3 参数的规则介绍
请参考第 5.4.3.6.1.3 节。
5.4.3.7 设置列表数据
Saca Dataviz 支持自定义字符型过滤条件的中内容,并以多选下拉列表的形式进行交互。下拉列表中的内容有 4 种指定方式:数据集、自定义数据、系统变量、树形列表,下面将介绍这几种列表数据的应用情形和使用方法。
SaCa DataViz 支持自定义字符型过滤条件的中内容,并以多选下拉列表的形式进行交互。下拉列表中的内容有 4 种指定方式:“其他数据集”、“自定义”、“系统用户或组织”、“组织结构树”,下面将介绍这几种列表数据的应用情形和使用方法。
5.4.3.7.1 数据集
有的应用场景需要用其他数据集的字段组成过滤条件,来过滤当前数据集中的数据。设置的方法如下图所示。
5.4.3.7.2 自定义数据
适用于自定义下拉列表中的内容,设置的方法如下图所示。
5.4.3.7.3 系统变量
适用于将下拉列表中的内容定义为系统的组织列表、角色列表或用户列表,关于系统组织、列表和用户的设置请参考权限管理章节。在设置上述信息后,即可在此进行关联。
5.4.3.7.4 树形列表
组织的从属关系可以用树形结构表达,在这里支持以树形的结构进行筛选,设置方法与系统变量相似。
5.4.3.8 设置级联影响条件
Saca Dataviz 支持将存在关联的条件进行级联。举例而言,数据集中存在“省份”和“城市”两个字段,现希望将这两个字段作为图表的过滤条件,如将“城市”设置为“省份”的级联条件,则可以在选择“省份”(如辽宁)后,将“城市”的可选项缩小到属于该省份的范围(在省份选择“辽宁”后,城市仅保留了“大连”)。操作的方法如下图所示。
5.4.3.9 下拉列表选项平铺
时间下拉列表平铺仅支持下拉列表与相对时间,使用相对时间进行下拉列表项平铺的前提需要设置为下拉列表,才可以使用。点击下拉列表选项平铺按钮,如下图。
点击完下拉列表选项平铺按钮后,弹出页面进行相关设置,保存。
播放页展示。
5.4.3.10 设置排序
点击设置排序按钮,弹出设置排序页面。如下图,排序分为字母/拼音排序、其他字段排序、手动排序。
5.4.3.10.1 字母/拼音排序
字母/拼音排序把字符串转换成为字母或者拼音,按照 abcd...顺序进行排列,字母/拼音分为升序与降序两种。 当选择升序的时候,在播放页面的下拉列表为升序排列。 当选择降序的时候,在播放页面的下拉列表为降序排列。
5.4.3.10.2 其他字段排序
自定义排序支持排序字段的选择,当某基础表中存储排序字段的时候,用户想要通过某基础表中的排序字段进行下拉列表的排序。 自定义排序分为升序与降序 当选择升序的时候,在播放页面的下拉列表为升序排列。 当选择降序的时候,在播放页面的下拉列表为降序排列。
5.4.3.10.3 手动排序
手动排序是通过鼠标拖拽下拉列表需要显示的数据,根据拖拽的位置呈现出来的数据顺序进行排序
5.4.3.10.4 下拉列表的排序与非排序优先级关系
在设置排序页面选择时候开启排序,如果开启排序的优先级高,不开启即使设置了排序也不作用
5.4.3.10.5 注意事项
在选择字符排序高级设置中的设置列表数据功能中只支持数据集类型、自定义数据类型、系统变量类型(仅限普通下拉列表,不支持级联下拉与树形下拉列表)
5.4.3.11 控件样式设置
点击“控件样式设置”可自定义控件的具体样式,样式由名称、输入框、请求状态按钮、下拉栏四部分组成,四部分样式可以分别设置,页面下方有样式定义后的预览区。(5.6.08以上版本包含该功能)