# 组件数据集
组件数据集描述组件如何发起数据查询。
通常,只有查询类组件才需要配置组件数据集,如柱形图、列表等,下拉框、按钮、文本等则无需配置组件数据集。一个组件通常只有一个数据集。
和页面的查询数据集类似,组件数据集可以定义单行或多行数据集,查询明细或分组统计。一个数据集的查询结果对应一个DataView
,IVisualComponent
使用DataView
渲染组件数据。
组件配置properties
中定义的属性默认在全局单行数据集或上级多行数据集中查询和计算。例如:
- 画布中的按钮,标题属性在全局单行数据集计算。
- 浮动面板中的按钮,标题属性在浮动面板的多行数据集中计算,因为每一行的按钮标题计算结果可能不同。
组件也可以在datasets
中配置自己的数据集,并定义组件中的哪些属性在数据集中查询和计算。以柱形图为例:
- 柱形图按数据区的
x
分组,按y
选择数据。 - 柱形图的
标题
和显示
属性作为图形属性在上级数据集中计算。
组件数据集支持多种配置,一个组件可以配置多个数据集。组件数据集包含如下配置:
conditions
,查询条件single
,单行统计查询table
,列表查询group
,分组查询matrix
,交叉表查询query
,自定义查询queryTotal
,是否查询合计行paging
,是否分页pageSize
,分页大小expand
,分组属性是否可按层次展开queryTotalRowCount
,是否查询总行数
{
"datasets": [{
"conditions": [...],
"single": {...},
"table": {...},
"group": {...},
"matrix": {...},
"queryTotal": false,
"paging": false,
"pageSize": 10,
"expand": false,
"queryTotalRowCount": false,
"query": {...}
}],
"dataDefinitions": {...},
"marks": [...]
}
安全提示
组件数据集约束了组件能够发起的查询,在查看界面中,用户无法越过组件配置和页面设计。以柱形图为例,当用户拖入销售单位
到X
,销售数量
字段到Y
,那么查看界面中柱形图就只会发起按销售单位
分组,选择销售数量
的查询,无法通过修改ajax参数等方式越过该限制。
# dataset
# conditions
conditions
用于确定查询发起的条件。可以定义多组条件,当尝试拖入属性栏数据区的字段满足conditions
中定义的条件时,字段才被允许放入。
在条件中,针对一个数据区可以指定允许放入字段的最大和最小数量,如果没有指定,则可以放入任意数量的字段。当所有条件都不满足时,不发起查询。
{
"conditions": [{
"x": {
"min": 1,
"max": 1
},
"y": {
"min": 1
}
}, {
"x": {
"min": 2,
"max": 2
},
"y": {
"min": 1,
"max": 1
}
}]
}
max
,允许放入字段的最大个数。如果未指定则可以放入任意个数的字段。min
,允许放入字段的最小个数。如果未指定则不放入字段也可以发起查询。
# single
单行统计查询。拖入维度时会被转换为度量。通常用于KPI等指标查看类型的组件。
示例
{
"dataDefinitions": {
"measures": {
"kind": "measure",
"preferredTypes": ["number"]
}
},
"datasets": [{
//至多拖入2个字段
"conditions": [{
"measures": {
"max": 2
}
}],
"single": "measures"
}]
}
# table
列表查询。拖入的字段查询明细数据。通常用于列表等明细查询组件。
示例
{
"dataDefinitions": {
"columns": {}
},
"datasets": [{
//至少拖入一个字段
"conditions": [{
"columns": {
"min": 1
}
}],
"table": {
"name": "columns"
}
}]
}
# group
分组查询。
group
,分组的字段。select
,选择的字段。
示例
{
"dataDefinitions": {
"dimensions": {
"kind": "dimension"
},
"measures": {
"kind": "measure"
}
},
"datasets": [{
//至少拖入一个至多拖入两个维度,至少拖入一个度量
"conditions": [{
"dimensions": {
"min": 1,
"max": 2
},
"measures": {
"min": 1
}
}],
"group": {
"group": ["dimensions"],
"select": ["measures"]
}
}]
}
# matrix
交叉表查询。
rowGroup
,行分组的字段。colGroup
,列分组的字段。select
,选择的字段。
示例
{
"dataDefinitions": {
"row": {
"kind": "dimension"
},
"col": {
"kind": "dimension"
},
"measures": {
"kind": "measure"
}
},
"datasets": [{
"conditions": [{
"row": {
"min": 1
},
"col": {
"min": 1
},
"measures": {
"min": 1
}
}],
"matrix": {
"rowGroup": ["row"],
"colGroup": ["col"],
"select": ["measures"]
}
}]
}
# queryTotal
是否查询合计行,默认为false
,可以指定一个属性控制是否查询合计的值。如果有多个分组字段,则每一级都查询合计。
示例
{
"datasets": [{
// 需要查询合计行
"queryTotal": true
}]
}
{
"datasets": [{
// 表示是否需要查询合计行由`queryTotalEnable`属性控制
"queryTotal": "queryTotalEnable"
}]
}
# paging
是否分页,默认为false
,可以指定哪一个属性控制paging
的值。
示例
{
"datasets": [{
// 需要分页
"paging": true
}]
}
{
"datasets": [{
// 表示是否需要分页由`pagingEnable`属性控制
"paging": "pagingEnable"
}]
}
# pageSize
分页大小,默认为10
,可以指定哪一个属性控制pageSize
的值。
示例
{
"datasets": [{
// 分页大小为100
"pageSize": 100
}]
}
{
"datasets": [{
// 表示分页大小由`pageSize`属性控制
"pageSize": "pageSize"
}]
}
# expand
分组属性是否可按层次展开,默认为false
,可以指定哪一个属性控制expand
的值。
示例
{
"datasets": [{
// 分组属性需要按层次展开
"expand": true
}]
}
{
"datasets": [{
// 表示是否需要按层次展开由`expandEnable`属性控制
"expand": "expandEnable"
}]
}
# queryTotalRowCount
是否查询总行数,默认为false,可以指定哪一个属性控制queryTotalRowCount
的值。
示例
{
"datasets": [{
// 需要查询总行数
"queryTotalRowCount": true
}]
}
{
"datasets": [{
// 表示是否查询总行数由`queryTotalRowCountEnable`属性控制
"queryTotalRowCount": "queryTotalRowCountEnable"
}]
}
# query
自定义查询。当组件需要自己构造查询,但又不希望使用数据区的属性面板时,可以采用自定义查询的方式定义如何发起查询。
例如SuperPage中的地图图层、列表、浮动面板等,这些组件采用了和仪表板数据区不同的数据集定义方式,无法使用数据区
的配置方式,需要配置自定义查询。
配置
datasetProperty
,指定查询要查询的数据集属性名,通常是dataset
属性。atomicQuery
,是否明细查询,默认为true
。设置为false
时表示分组查询,可以指定一个条件表达式,用于动态控制。groupProperty
,分组属性设置,可以指定单个或多个分组属性。设置groupProperty
时atomicQuery
会被默认设置为false
。dimOption
,补全维项设置。properties
,当前查询包含的属性,没有指定的属性会默认放到当前组件的上级组件构造的查询中。
系统中配置自定义查询的组件通常有两类:
- 组件上配置了数据集和相关查询属性,查询属性在组件数据集中发起查询,其它属性加入到上级数据集中。大部分组件都属于这一类,如下拉框、图层等。
- 组件上配置了数据集,组件有下级子组件,子组件上配置了查询属性,查询属性在组件数据集中发起查询,其它属性加入到上级数据集中。如列表、浮动面板等。
# 配置数据集和查询字段
以系统内置的区块图层为例:
- 区块图层自己发起查询,配置了位置属性,按该属性分组,查询
提示信息
属性和交互
。
{
"datasets": [
{
"query": {
"groupProperty": ["locationField"],
"actions": true,// 指定组件上的交互在customQuery中计算
"properties": {
"basic": ["@tooltip"]
}
}
}
]
}
# 配置数据集和子组件
配置数据集和子组件时,组件上的属性默认会加入到上级数据集,子组件中查询属性默认加入到上级组件构造的数据集,如果不需要加入到上级组件构造的数据集,需要配置excludeProperties
。
以系统内置的列表组件为例:
- 列表组件以
dataset
属性作为数据集,设置了hierarchy
时按hierarchy
选择的层次展开数据,列表自身的属性默认加入到上级数据集。 - 列表子组件中查询属性默认加入到列表构造的数据集中,列的
visibleCondition
属性需要加到列表的上级数据集,需要配置excludeProperties
。
{
"list":{
"datasets": [{
"query": {
"datasetProperty": "dataset",
"atomicQuery": "hierarchy != null",
"groupProperty": "hierarchy",
"queryTotalRowCountProperty": "totalCountVisible"
}
}]
}
}
列上的属性默认是加在列表的组件数据集中查询的,但是列的visibleCondition
属性不能在列表构造的数据集中查询,此时需要配置excludeProperties
,配置后此属性会放到列表的上级组件构造的数据集中计算。
{
"column": {
"parentDataset": {
"actions": true, // 指定列上的交互在列表的数据集中查询和计算
"excludeProperties": {
"basic": ["visibleCondition"]
}
}
}
}
# dataDefinitions
dataDefinitions
用于定义数据区属性。每一个数据区都可以拖入字段或输入表达式。当使用group
、table
和single
时,需要结合dataDefinitions
配置。
设计器属性面板中配置的数据区属性dataDefinition会使用该配置生成界面。
dataDefinitions
支持的配置属性如下:
name
,名称kind
,允许拖入字段的类别,不指定时默认为dimensionOrMeasure
dimension
,维度measure
,度量dimensionOrMeasure
,维度或度量
preferredTypes
,支持的字段数据类型数组string
,字符型date
,日期型number
,数值型geoType
,地理角色
markable
,是否支持标记,有且只能有1个数据区配置为true
以系统内置的柱形图为例,数据区x
可以拖入维度;数据区y
可以拖入指标且可以被标记,配置如下:
{
"dataDefinitions": {
"x": {
"kind": "dimension"
},
"y": {
"kind": "measure",
"markable": true
}
}
}
# marks
支持的标记类型。在数据区配置markable
为true表示标记该数据区中的字段;否则表示对组件进行标记。
支持的标记类型:
color
,颜色标记shape
,形状标记size
,大小标记label
,标签tooltip
,提示信息lob
,其它
以系统内置的柱形图配置为例:
{
"marks": ["color", "shape", "size", "label", "tooltip", "lob"]
}
标记支持配置:
kind
,允许拖入字段的类别,不指定时默认为dimensionOrMeasure
dimension
,维度measure
,度量dimensionOrMeasure
,维度或度量
preferredTypes
,支持的字段数据类型数组string
,字符型date
,日期型number
,数值型geoType
,地理角色
properties
,自定义的属性栏配置