计算列
已有的数据中缺少分析所需的数据,需要对数据进行二次加工。
例如:用户想要判断当前的合同金额属于 大订单 还是 小订单,但是现在的数据中并没有该类型的字段。
例如:当前模型中的字段名称不符合业务使用诉求,想修改成其他的名字进行展示。
业务集市的 计算字段 提供了添加计算列的功能,实现对已存在的字段再计算的能力,从而可以得到新的字段,可以方便实现目标字段。支持添加维度计算列和指标计算列。
例如:用户使用计算列增加一个新的维度字段,当 合同金额 大于 1000000 时是大订单。
支持类型
以下来源的业务模型支持新建计算列的能力,支持范围如下:
- 指标分析
- 事件分析
- 标准聚合模式
- 结果表模式
- Session 分析
- 标准聚合模式
- 结果表模式
- 漏斗分析 - 结果表模式
- 留存分析 - 结果表模式
- Session 分析 - 结果表模式
- 自定义查询
- 数据表
添加入口
业务模型计算列入口
业务模型计算列的添加入口如下图所示:
- 业务模型详情页展示 计算字段 入口;
- 此功能受 管理权限 控制,需要有当前模型的协同管理权限,才支持使用此功能。

图表计算列入口
业务模型计算列的添加入口如下图所示,整体制作可视化组件请参考:制作可视化组件

管理计算列
进入计算列的页面后,可对当前的计算列进行管理:
- 搜索:支持对计算列的名称进行搜索,快速定位目标的计算列;
- 新建:支持新建,每个模型有新建的个数限制,如有需要,可联系运维调整个数限制;
- 计算列名称:当前计算列的名称,每个模型中的计算列不可重复
- 类型:该计算列的类型
- 操作 - 编辑:进入该计算列的编辑界面,修改该字段的名称、函数、语句等
操作 - 删除:删除此字段

编辑计算列
进入计算列的编辑界面,界面介绍如下:
- 编辑/修改计算列名称;
- 快捷添加常用的运算符;
- 公式输入区;
- 计算列支持的函数;
- 该模型中的基础字段与计算列;
- 函数或字段解释区,支持解析当前语句是否正确,并展示语句错误原因。

函数组成
函数计算列由 4 个部分组成:
内容 | 说明 |
---|---|
函数 | 用于对字段中的值或内容进行转换的语句 |
字段 | 用户数据表中的维度或指标 |
运算符 | 指明运算的符号 |
文本表达式 | 按照写入内容表示的常量值 |
例如,假设有以下计算列:IF(合同金额>2000,"大订单","小订单"); 对应计算列内容如下所示:
内容 | 说明 |
---|---|
函数 | IF |
字段 | 合同金额 |
运算符 | > |
文本表达式 |
|
函数格式与支持清单
函数在使用的过程中需要满足目标格式,例如下图:
区域 1 是 函数名称,区域 2 是 参数数据类型,隐含返回的数据类型,主要函数说明如下:
函数分类 | 函数名称 | 语法说明(界面名称语法备注区域) | 示例 | 参数数据类型 | 返回数据类型 |
---|---|---|---|---|---|
聚合函数 | SUM | sum(number) 返回表达式中所有值的总和 | sum([sales]) | <数值 Number> | <数值 Number> |
聚合函数 | AVG | avg(number) 返回表达式中所有值的平均值 | avg([sales]) | <数值 Number> | <数值 Number> |
聚合函数 | COUNT | count(exp) 返回表达式中所有值的计数 | count([id]) | <数值 Number>, <字符串 String>, <日期时间 Datetime>, (<布尔 Bool>) | <数值 Number> |
聚合函数 | DISTINCT COUNT | distinctcount(exp) 返回表达式中所有值的去重计数 | distinctcount([userid]) | <数值 Number>, <字符串 String>, <日期时间 Datetime>, (<布尔 Bool>) | <数值 Number> |
聚合函数 | MAX | max(exp) 返回表达式中所有值的最大值 | max([sales]) | <数值 Number> | <数值 Number> |
聚合函数 | MIN | min(exp) 返回表达式中所有值的最小值 | min([sales]) | <数值 Number> | <数值 Number> |
逻辑函数 | CASE | case <expr> when <value1> then <return1> when <value2> then <return2> ... [else <else>] end 执行逻辑测试并返回相应的值。case 函数可评估 expr,并将其与一系列值(value1、 value2 等)比较,然后返回结果。 | case when [City]="上海" then [City] else null end | 根据 exp 而定 | 根据 exp 而定 |
逻辑函数 | WHEN | case <expr> when <value1> then <return1> when <value2> then <return2> ... [else <else>] end 执行逻辑测试并返回相应的值。case 函数可评估 expr,并将其与一系列值(value1、 value2 等)比较,然后返回结果。 | case when [City]="上海" then [City] else null end | 根据 exp 而定 | 根据 exp 而定 |
逻辑函数 | THEN | case <expr> when <value1>极左; then <return1> when <value2> then <return2> ... [else <else>] end 执行逻辑测试并返回相应的值。case 函数可评估 expr,并将其与一系列值(value1、 value2 等)比较,然后返回结果。 | case when [City]="上海" then [City] else null end | 根据 exp 而定 | 根据 exp 而定 |
逻辑函数 | ELSE | case <expr> when <value1> then <return1> when <value2> then <return2> ... [else <else>] end 执行逻辑测试并返回相应的值。case 函数可评估 expr,并将其与一系列值(value1、 value2 等)比较,然后返回结果。 | case when [City]="上海" then [City] else null end | 根据 exp 而定 | 根据 exp 而定 |
逻辑函数 | OR | case when <expr1> or <expr2> then <then1> [else <else>] end 对两个表达式执行或者的条件判断。 | case when ([Sales] < 0 or [Sales] = 0) then "没有盈利" else "盈利良好" end | 根据 exp 而定 | 根据 exp 而定 |
逻辑函数 | AND | case when <expr1> and <expr2> then <then1> [else <else>] end 对两个表达式执行并且的条件判断。 | case when(['Profit'] >100 and ['Profit'] <500) then "一般盈利" else "盈利未知" end | 根据 exp 而定 | 根据 exp 而定 |
逻辑函数 | IIF | iif(condition, true,false) 检查某个条件是否得到满足,如果为 true 则返回一个值,如果为 false 则返回另一个值。 | iif (sales>6,1,0),如果此列销售额的值大于 6 就返回 1,否则返回 0 | <布尔 Bool>, exp1, exp2 | <数值 Number>, <字符串 String>, <日期时间 Datetime>, (<布尔 Bool>) |
逻辑函数 | IFNULL | ifnull(exp1, exp2) 如果 <expr1> 不为 null,则返回该表达式 expr1,否则返回 <expr2>。 | ifnull([Profit], 0) | 根据 exp 而定 | exp1 或 exp2 |
其他 | mod | mod(number1,number2) 用于计算 x 与 y 相除的余数 | MOD(number1, number2) | <数值 Number> | <数值 Number> |
其他 | floor | FLOOR(number) 向下取整数 | FLOOR(3.1415926)=3 | <数值 Number> | <数值 Number> |
其他 | ceil | ceil(number) 向上取整数 | CEIL(10.1)=11 | <数值 Number> | <数值 Number> |
其他 | coalesce | coalesce(expression1, expression2, expressionN) 获取多个表达式中的第一个非 NULL 值,输入参数类型与函数输出类型仅支持 number,string,date,且所有输入参数类型需保持一致 | COALESCE(column1, column2) | 根据 exp 而定 | 根据 exp 而定 |
其他 | round | 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) 减少指定天数 | 执行时间北京时间:2023-02-04 08:46:27;days_sub(now(), 1)=2023-02-03 08:46:27 | <日期时间 Datetime> | <日期时间 Datetime> |
日期 | date_add | DATE_ADD(date/date startdate, int/bigint days) 增加指定天数 | 执行时间北京时间:2023-02-04 08:46:27;days_add(now(), 1)=2023-02-05 08:46:27 | <日期时间 Datetime> | <日期时间 Datetime> |
日期 | minutes_add | MINUTES_ADD(date date, int/bigint minutes) 增加指定分钟 | 执行时间北京时间:2023-02-04 08:46:27;minutes_add(now(),1)=2023-02-04 08:47:27 | <日期时间 Datetime> | <日期时间 Datetime> |
日期 | minutes_sub | MINUTES_SUB(date date, int/bigint minutes) 减少指定分钟 | 执行时间北京时间:2023-02-04 08:46:27;minutes_sub(now(),1)=2023-02-04 08:45:27 | <日期时间 Datetime> | <日期时间 Datetime> |
日期 | hours_add | HOURS_ADD(date date, int/bigint hours) 增加指定小时 | 执行时间北京时间:2023-02-04 08:46:27;hours_add(now(),1)=2023-02-04 09:46:27 | <日期时间 Datetime> | <日期时间 Datetime> |
日期 | hours_sub | HOURS_SUB(date date, int/bigint hours) 减少指定小时 | 执行时间北京时间:2023-02-04 08:46:27;hours_sub(now(),1)=2023-02-04 07:46:27 | <日期时间 Datetime> | <日期时间 Datetime> |
日期 | weeks_add | WEEKS_ADD(date date, int/bigint hours) 增加指定周数 | 执行时间北京时间:2023-02-04 08:46:27;weeks_add(now(), 1)=2023-02-11 08:46:27 | <日期时间 Datetime> | <日期时间 Datetime> |
日期 | weeks_sub | WEEKS_SUB(date date, int/bigint hours) 减少指定周数 | 执行时间北京时间:2023-02-04 08:46:27;weeks_sub(now(), 1)=2023-01-28 08:46:27 | <日期时间 Datetime> | <日期时间 Datetime> |
日期 | years_add | YEARS_ADD 增加指定年数 | 执行时间北京时间:2023-02-04 08:46:27;years_add(now(),1)=2024-02-04 08:46:27 | <日期时间 Datetime> | <日期时间 Datetime> |
日期 | years_sub | YEARS_SUB 增加指定年数 | 执行时间北京时间:2023-02-04 08:46:27;years_sub(now(),1)=2022-02-04 08:46:27 | <日期时间 Datetime> | <日期时间 Datetime> |
使用计算列
完成计算列的创建后,可在详情页界面预览使用,如下图所示:
- 指标类型的计算列在指标 展示项 中设置;
- 维度/分组类型的计算列在维度/分组的 展示项 中设置;
- 确认勾选后,在右侧数据展示区即可预览目标计算列。