计算列
已有的数据中缺少分析所需的数据,需要对数据进行二次加工;
例如:用户想要判断当前的合同金额属于「大订单」还是「小订单」,但是现在的数据中并没有该类型的字段。
例如:当前模型中的字段名称不符合业务使用诉求,想修改成其他的名字进行展示。
业务集市的「计算字段」提供了添加计算列的功能,实现对已存在的字段再计算的能力,从而可以得到新的字段,可以方便实现目标字段。支持添加维度计算列和指标计算列。
例如:用户使用计算列增加一个新的维度字段,当「合同金额」大于1000000 时是大订单。
支持类型
以下来源的业务模型支持新建计算列的能力,支持范围如下:
- 指标分析
- 事件分析
- 标准聚合模式
- 结果表模式
- session分析
- 标准聚合模式
- 结果表模式
- 漏斗分析-结果表模式
- 留存分析-结果表模式
- session分析-结果表模式
- 自定义查询
- 数据表
添加入口
业务模型计算列入口
业务模型计算列的添加入口如下图所示:
- 业务模型详情页展示「计算字段」入口;
- 此功能受「管理权限」控制,需要有当前模型的协同管理权限,才支持使用此功能。
图表计算列入口
业务模型计算列的添加入口如下图所示,整体制作可视化组件请参考:制作可视化组件
管理计算列
进入计算列的页面后,可对当前的计算列进行管理:
- 搜索:支持对计算列的名称进行搜索,快速定位目标的计算列;
- 新建:支持新建,每个模型有新建的个数限制,如有需要,可联系运维调整个数限制;
- 计算列名称:当前计算列的名称,每个模型中的计算列不可重复
- 类型:该计算列的类型
- 操作-编辑:进入该计算列的编辑界面,修改该字段的名称、函数、语句等
操作-删除:删除此字段
编辑计算列
进入计算列的编辑界面,界面介绍如下:
- 编辑/修改计算列名称;
- 快捷添加常用的运算符;
- 公式输入区;
- 计算列支持的函数;
- 该模型中的基础字段与计算列;
- 函数或字段解释区,支持解析当前语句是否正确,并展示语句错误原因。
函数组成
函数计算列由4个部分组成:
内容 | 说明 | |
---|---|---|
1 | 函数 | 用于对字段中的值或内容进行转换的语句 |
2 | 字段 | 用户数据表中的维度或指标 |
3 | 运算符 | 指明运算的符号 |
4 | 文本表达式 | 按照写入内容表示的常量值 |
例如,假设有以下计算列:IF(合同金额>2000,"大订单","小订单");对应计算列内容如下所示:
内容 | 说明 | |
---|---|---|
1 | 函数 | IF |
2 | 字段 | 合同金额 |
3 | 运算符 | > |
4 | 文本表达式 |
|
函数格式与支持清单
函数在使用的过程中需要满足目标格式,例如下图:
区域1 是函数名称,区域2是参数数据类型,隐含返回的数据类型,主要函数说明如下:
函数分类 | 函数名称 | 语法说明(界面名称语法备注区域) | 示例 | 参数数据类型 | 返回数据类型 |
---|---|---|---|---|---|
聚合函数 | SUM | sum(number) | 示例: | number | number |
聚合函数 | AVG | avg(number) | 示例: | number | number |
聚合函数 | COUNT | count(exp) | 示例: | number; string; datetime; (bool) | number |
聚合函数 | DISTINCT COUNT | distinctcount(exp) | 示例: | number; string; datetime; (bool) | number |
聚合函数 | MAX | max(exp) | 示例: | number | number |
聚合函数 | MIN | min(exp) | 示例: | number | number |
逻辑函数 | CASE | case case when | 示例: case when [City]="上海" then [City] else null end
| 根据exp而定 | 根据exp而定 |
逻辑函数 | WHEN | case case when | 示例: case when [City]="上海" then [City] else null end
| 根据exp而定 | 根据exp而定 |
逻辑函数 | THEN | case case when | 示例: case when [City]="上海" then [City] else null end
| 根据exp而定 | 根据exp而定 |
逻辑函数 | ELSE | case case when | 示例: case when [City]="上海" then [City] else null end
| 根据exp而定 | 根据exp而定 |
逻辑函数 | OR | case when | 示例: case when ([Sales] < 0 or [Sales] = 0) then "没有盈利"
| 根据exp而定 | 根据exp而定 |
逻辑函数 | AND | case when | 示例: case when(['Profit'] >100 and ['Profit'] <500) then "一般盈利"
| 根据exp而定 | 根据exp而定 |
逻辑函数 | IIF | iif(condition, true,false) | 示例: | bool,exp1,exp2 | number string datetime (bool) |
逻辑函数 | IFNULL | ifnull(exp1, exp2) | 示例: | 根据exp而定 | exp1或exp2 |
其他 | mod | mod(number1,number2) | 示例: | number | number |
其他 | floor | FLOOR(number) | 示例: | number | number |
其他 | ceil | ceil(number) 向上取整数 | 示例: | number | number |
其他 | coalesce | coalesce(expression1, expression2, expressionN) | 示例: | 根据exp而定 | 根据exp而定 |
其他 | round | round(double a, int d) round(double a, int d) 返回指定精度 d 的 double 类型,维度最大保留 d 位,数值最大保留 4 位 | 示例: round(6.66667,4)=6.6667, round(6.123)=6.0 | number | number |
日期 | date_sub | date_sub(date/date startdate, int/bigint days) | 示例: | date | date |
日期 | date_add | DATE_ADD(date/date startdate, int/bigint days) | 示例: | date | date |
日期 | minutes_add | MINUTES_ADD(date date, int/bigint minutes) | 示例: | date | date |
日期 | minutes_sub | MINUTES_SUB(date date, int/bigint minutes) | 示例: | date | date |
日期 | hours_add | HOURS_ADD(date date, int/bigint hours) | 示例: | date | date |
日期 | hours_sub | HOURS_SUB(date date, int/bigint hours) | 示例: | date | date |
日期 | weeks_add | WEEKS_ADD(date date, int/bigint hours) | 示例: | date | date |
日期 | weeks_sub | WEEKS_SUB(date date, int/bigint hours) | 示例: | date | date |
日期 | years_add | YEARS_ADD | 示例: | date | date |
日期 | years_sub | YEARS_SUB | 示例: | date | date |
使用计算列
完成计算列的创建后,可在详情页界面预览使用,如下图所示:
- 指标类型的计算列在指标「展示项」中设置;
- 维度/分组类型的计算列在维度/分组的「展示项」中设置;
- 确认勾选后,在右侧数据展示区即可预览目标计算列。