<< Click to Display Table of Contents >> 多粒度表达式函数复制链接 |
“多粒度表达式”用于在数据源级别运行涉及许多维度的复杂查询,可以让您更好地控制要计算的粒度级别。它们可以在较高粒度级别(包含维度)、较低粒度级别(排除维度)或完全独立级别(固定维度)执行。
本文介绍可在vividime BI中使用的LOD表达式的类型,以及何时使用这些表达式和如何设置它们的格式。本文还使用示例来演示如何创建一个简单的LOD表达式。
1.创建LOD表达式
步骤如下:
1.1添加可视化组件
进入制作报告页面,添加柱图并绑定数据如下。
1.2创建LOD表达式
如果您想查看每个产品种类下各产品的平均销售额,而不是各产品种类所有销售额总和,则可以使用LOD来完成。
1)点击右侧“销售额”列的【更多】图标,选择“新建计算列”。
2)在编辑器中,修改计算列名称为“产品平均销售额”。并输入LOD表达式:include(col['产品名称']:: sum(col['销售额']))。
3)完成后点击“确定”。
新建的LOD表达式将自动添加到右侧数据列的度量列中。
1.3在柱图中添加LOD表达式列
将计算列“产品平均销售额”拖入到行,并设置汇总方式为平均,标记组混合为“纵向”。
可以看到,每个产品种类的总和以及按产品名称所计算的平均销售额。如图所示,茶的销售额总和为173,773,茶中各产品的平均销售额为57,591。
2.LOD表达式类型
产品支持三种LOD表达式,
•fixed: 固定维度表达式,使用指定的维度进行计算,而不引用视图详细级别,也就是说,不考虑视图中的任何其他维度。可能比视图计算更粗略或者精细,取决于视图上绑定的维度和表达式本身的维度。
对于绑定了维度“ProductType”和“Product”的视图,如果创建仅使用以下维度之一的表达式:fixed(col['ProductType] :: SUM(col['Sales'])},在这种情况下,表达式的详细级别比视图更粗略。表达式的值基于一个维度ProductType,而视图则基于两个维度ProductType和 Product。结果是,在视图中使用详细级别表达式会将导致某些值重复,也就是说,出现多次。如下图:fixed:fixed(col['产品种类']::sum(col['销量']))
对于只绑定了维度“ProductType”的视图,如果创建有两个维度的表达式:fixed(col['ProductType], col['Product'] :: SUM(col['Sales'])},在这种情况下,表达式的详细级别比视图更精细。此表达式绑定到维度上之后,需要对表达式结果进行聚合,直至达到视图级别。如下图,fixed1: fixed(col['产品种类'], col['产品名称']::sum(col['销量'])),fixed1绑定到表格上后,进行了再次聚合:平均,比如茶的结果即为左图三个值求平均的结果,也就是小计求平均的结果:再销量总和的基础上平均。
•include:包含维度表达式,比视图级别的粒度更精细,分组不仅包含组件中绑定的维度,还包含了表达式中指定的维度,因此值将不会重复。
•exclude:排除维度表达式,比视图级别的粒度更粗略,分组时排除了表达式中指定的维度,EXCLUDE 表达式始终会导致视图中出现重复值。
LOD表达式语法参考下表:
函数 |
语法 |
说明 |
举例 |
exclude |
exclude([dim1[,dim2]...]::aggregate-expression]) |
此表达式从组件细节级别中减去维度来计算值 |
例如: exclude(col['procuct']::sum(col['sales']))) |
fixed |
fixed([dim1[,dim2]...]::aggregate-expression]) |
此表达式使用指定的维度计算值,而不引用组件中的任何其他维度 |
例如: fixed(col['procuct']::sum(col['sales'])) |
include |
include([dim1[,dim2]...]::aggregate-expression]) |
此表达式使用指定的维度以及组件中的任何维度来计算值 |
例如: include(col['procuct']::sum(col['sales']))) |
3.示例
3.1fixed
以下fixed详细级别表达式计算每个产品种类的销售额总和:
fixed(col['产品种类']:: sum(col['销售额']))
表格组件上绑定“产品种类”,“产品名称”,“销售额”,由于fixed表达式计算式只考虑引用的维度“产品种类”,所以在表格中可以看到每一个产品种类下的各个产品对应的销售额相同。
3.2include
以下include详细级别表达式计算每个产品种类的销售额总和:
include(col['产品名称']:: sum(col['销售额']))
将改计算列命名为“产品平均销售额”,柱图组件上绑定“产品种类”,“销售额”总和,“产品平均销售额”平均,由于include表达式计算式只考虑引用的维度“产品名称”,所以计算平均值时为每个产品种类下各产品的平均值。
3.3exclude
exclude详细级别表达式对于“占总计百分比”或“与总体平均值的差异”方案非常有用。它们可与诸如“合计”和“目标线”等功能相比。
以下exclude详细级别表达式从“销售额”总和中排除“产品名称”的影响:
exclude(col['产品名称']:: sum(col['销售额']))
将改计算列命名为“排除产品名称”,表格组件上绑定“产品种类”,“产品名称”,“销售额”总和,“排除产品名称”总和。由于exclude表达式计算式排除了维度“产品名称”,所以在表格中可以看到每一个产品种类下的各个产品对应的销售额相同。
4. 多粒度表达式可以是维度或度量
当添加多粒度表达式时,会将其添加到“维度”或“度量”区域。
fixed可能会生成度量或维度,具体情况视聚合表达式中的基础字段而定。因此 min(col['Date']) 将是维度,原因是 Date 是维度,而 fixed(col['Province'] :: sum(col['Sales'])) 将是度量,因为 Sales 是度量。FIXED 如果默认识别为度量,也可以转为维度。
inclue 和 exclude 表达式始终是度量,且不能转为维度。