1 概述
由于现有系统的"计算列"只支持单表不同字段计算,不支持多表不同字段之间的计算,大量跨表的"计算字段"需求难以满足,为了提升数据处理的灵活性与效率,满足企业多样化的数据分析需求,解决在实际业务场景中遇到的问题,我们开发了可以跨表创建计算列的新功能。
该功能允许用户在数据模型和报表层跨表选择字段进行计算,为用户提供更强大的数据处理能力,助力企业更好地进行数据分析与决策。
2 示例说明
2.1 多表字符串拼接示例
以产品自带的“订单模型”为例:
“订单表”中存储的是订单的信息包含:下单日期(订单日期)、下单区域、省份、城市等,而“订单明细表”存储的是订单具体的信息比如:数量、销售额等,“顾客表”存储的是顾客编号、联系方式等信息。
现在用户希望将“订单表”中的区域与“顾客表”中的顾客编号拼接起来,以便更直观地查看“不同区域顾客的销售情况”。
2.2 多表数值四则运算示例
以下是表的信息说明
商品信息维度表(维表):
商品 ID | 商品名称 | 成本价 |
---|---|---|
1001 | 商品 A | 20.0 |
1002 | 商品 B | 30.0 |
1003 | 商品 C | 15.0 |
1004 | 商品 D | 25.0 |
1005 | 商品 E | 18.0 |
商品销售明细表(事实表):
商品 ID | 售价 | 销售数量 |
---|---|---|
1001 | 30.0 | 5 |
1001 | 32.0 | 3 |
1001 | 28.0 | 4 |
1001 | 31.0 | 6 |
1002 | 40.0 | 2 |
1002 | 38.0 | 7 |
1002 | 42.0 | 3 |
1002 | 39.0 | 5 |
1003 | 20.0 | 8 |
1003 | 22.0 | 4 |
1003 | 18.0 | 6 |
1003 | 21.0 | 5 |
1004 | 35.0 | 3 |
1004 | 33.0 | 2 |
1004 | 37.0 | 4 |
1004 | 34.0 | 6 |
1005 | 25.0 | 7 |
1005 | 23.0 | 3 |
1005 | 27.0 | 5 |
1005 | 24.0 | 4 |
具体操作如下:
1、在数据模型中导入数据,并构建关系:
2、保存数据模型并且抽取成功之后,去创建计算列:
从”商品销售明细表“拖入 “售价” 字段,从“商品信息维度表”拖入 “成本价” 字段,在表达式中输入 “售价 - 成本价”,得到单个商品的利润计算列,命名为 “单个商品利润”。
若要计算总利润,可再新建一个计算列,使用 “(售价 - 成本价)* 销售数量” 的表达式,命名为 “总利润”。这样在商品销售明细表中就新增了两个计算列,用于展示商品的利润数据,方便企业进行成本与利润分析,了解销售业务的盈利情况。
2、把”单个商品利润“、“总利润”转换成度量:
3、保存数据模型并且创建 透视分析,分析商品的利润数据,如下图可以清晰的看到各个商品的利润情况:
4 跨表计算列创建原理
以 “核心子图” 为准进行跨表计算列的创建。
什么叫“核心子图”?先要了解子图:子图(也可以理解为扩展表),也可以理解为数据模型中的每个表都可构建一个子图,A表的子图是以A表为中心,根据筛选方向即箭头指向它的,代表能筛选它(比如B-→A,即B可以筛选A)都会把它纳入子图中; 而核心子图,可以理解为以事实表为中心,所有基数关系为”一“都会被纳入到以事实表为中心的子图,简单的理解就是星型模型。
基数为 “一对一” 并且是双向筛选时支持添加跨表计算列;基数关系为 “一对多” 或者 “多对一”,并且是双向筛选时,“一的” 一方仍然不支持创建宽表计算列。这是基于数据一致性和性能的考虑,若在 “一的” 一方随意创建宽表计算列,可能会导致数据冗余和计算效率低下。例如,在商品销售数据模型中,一个商品可能对应多个销售订单(一对多关系),在商品信息维度表(“一的” 一方)不支持创建某些类型的宽表计算列,以保证数据的规范性和系统运行效率。
5 功能限制
5.1 表关系设置限制
在设置表关系时,“跨表计算列字段” 不会显示。这是因为跨表计算列是基于已有的表关系进行数据计算和获取的,其本身不适合作为建立新表关系的依据。例如,在订单表和订单明细表的关系设置中,订单表的 “订单编号” 与订单明细表的 “订单编号” 用于建立关系,而跨表计算列字段不会出现在这个设置界面中,避免用户错误地使用其建立关系,导致数据逻辑混乱。