...
分类 | 计算列 | 计算度量 |
定义 | 在表中新增列,每行值由自定义公式生成 | 在多维数据集(OLAP)中通过 MDX 表达式定义,基于已有度量进行二次计算 |
计算顺序 | 基于表中现有字段列,逐行计算,先于汇总操作 | 基于已有的度量值,先汇总数据,再基于汇总结果计算 |
作用层级 | 表结构层面,新增列成为表的一部分,作用于数据表内每行数据 | 度量层面,基于现有度量进一步运算,属于跨维度聚合数据(如按时间、产品类别汇总后计算) |
创建入口 | 数据模型右侧维度区 “+” 号 或 仪表盘报表开发界面的数据维度区 “+” 号 | 数据模型右侧度量区 “+” 号 或 仪表盘报表开发界面的数据维度区 “+” 号 |
创建方式 | 直接进入编辑界面,手动编写表达式(支持字段选择和函数拖拽) | 两种方式: 1. 向导式(内置时间计算、数学运算等模板,支持拖拽字段快速创建); |
支持函数 | 使用数据库函数或平台内置函数(如数值、文本、日期处理函数) | 除了内置函数(含时间计算、聚合函数、逻辑判断等),还支持调用 MDX 的函数,官方文档:https://mondrian.pentaho.com/documentation/mdx.php |
由于两者创建方式和计算方式略有不同,最终操作步骤和对应得出的结果也会有所差异,详情如下:
新建计算列,字段皆来自于表字段
- 入口:
创建计算列入口:
- 入口:
在数据模型右侧维度区右上方“+”号或仪表盘报表开发界面的数据维度区右上方“+”号入口都可以新建计算列使用,如图:
新建计算列:
- 在这个界面中,有表达式编辑框、字段选择栏以及选择函数使用栏,可以根据实际需求,利用这些功能进行相关定义:
...
- 例如我们创建的销售额计算列就是拖拽对应表的字段进行计算即可,如图:
新建计算度量,字段皆来自度量区内的度量字段
入口:创建计算度量入口:
在数据模型右侧度量区右上方“+”号或仪表盘报表开发界面的数据维度区右上方“+”号入口都可以新建计算度量使用,如下图:
新建计算度量:
- 方式(1)向导方式:
简单选择进行快速计算 : 实现同期、前期、累计值等,此页签界面主要是提供内置的数学运算、时间计算以及其他计算类型,也即可通过简单的拖拽操作快速创建所需的计算度量,如下图:
- 方式(2)函数方式:
使用mdx函数来实现各种复杂场景下的高级计算,可看到右侧边栏很多内置函数,点击函数可看左下方的说明和示例;
例如我们新建销售额计算度量就可以选择函数方式创建,如图:
(3)创建报表,拖拽计算列和计算度量对比结果:
- 拖拽销售额计算列展示,可看到是按行输出销售额计算列结果:
...
同样,查看系统监控——SQL/MDX监控,涉及的区域和销售额计算列都从业务数据源通过SQL查询,并且销售额计算列是在原表直接处理,但与维度区普通销售额计算列不同的是,销售额计算列-对应的度量会进行多一层sum的汇总计算,然后再和其他表字段一并输出:
...
学习计算列和计算度量两者含义、作用、创建方式和对应结算结果差异后,我们继续来看看两者的应用场景有何区别?
常用应用场景对比说明如下表:
说明 | 场景说明 | |
相同之处 | (1)均支持数值计算、逻辑判断、日期处理等基础功能; | |
计算列- | 转换数据格式、转换数据类型、或取整: | |
把数值或者日期转换成字符串,使用TOSTR函数; | ||
将时间戳转换成日期格式,使用UNIXTIMETODATE函数; | ||
将字符串类型数据格式转换成日期格式,使用STRTODATE函数; | ||
对字段取整,使用TOINTEGER函数; | ||
求明细数据对应某个日期前X天/年/月/季或日期时间差值等的日期时间计算: | ||
获取当年第一天,可以通过YEAR函数获取当前年,再用CONCAT函数进行拼接; | ||
返回日期之间的天数差,使用DATEDIFF函数; | ||
对原始数据分类判断使用: | ||
对原始数据分类使用IIF函数判断; | ||
对数据表数据的值进行case when判断再应用,可以使用计算列构造出是否 | ||
计算度量- | 对度量做复杂计算,方差、中位数等: | |
求销售收入的期末值,Tail函数和filter函数结合处理; | ||
求销售额的年方差,使用VAR函数; | ||
查询各个产品类别销售额的中位数,使用Median函数; | ||
查询销售额的4次方根,使用Power函数; | ||
汇总计算: | ||
计算近两个月的销售额,使用AGGREGATE函数和ParallelPerodex函数结合处理; | ||
指定维度进行汇总,使用Fixed函数; | ||
按多个维度进行过滤汇总,aggregate函数和nonemptycrossjoin函数结合处理; | ||
对汇总数据排名、比较、分类处理: | ||
查询各个产品销售额的排名情况,使用rank函数; | ||
计算两个时间段的比值,使用AGGREGATE函数; | ||
对汇总后数据做判断,对度量进行case when判断处理; |
...