适用版本:finbi6.0.13及更高版本(截止目前)
一、函数介绍
1.DEF函数
语法:DEF(指标,【分组维度1,分组维度2】,【条件1,条件2】),其中指标为聚合函数。
例子:
DEF(SUM_AGG(购买数量),【产品类别】,【是否会员 = "是"】),求会员在产品类别分组下的购买数量。
类比到SQL语句为:
select sum(购买数量) 购买数量 from table
group by 产品类别
where 是否会员 = "是"
2.DEF_ADD及DEF_SUB函数
语法:DEF_ADD(指标,【新增分组维度1】),其中指标为聚合函数。
例子:DEF_ADD(SUM_AGG(购买数量),【省份】),除了原来表格拖动的维度,新增省份维度限制。
DEF_SUB是相反的意思,即除了表格原有维度,去掉某一维度。
二、DEF与DEF_ADD(DEF_SUB)函数的使用差异
记得上finebi网课的时候,老师说def函数完全可以取代DEF_ADD和DEF_SUB函数。实际应用真的是这样嘛?
我现在有个银行交易表(如图1所示):

如果表格已有维度为“交易渠道”来计算销售额,现在我想再加一个“日期”的维度。我们既可以使用DEF_ADD函数,把新的维度加进来:
DEF_ADD(SUM_AGG(销售额),[日期])
又可以使用DEF函数,只要把原有维度也加进来即可:
DEF(SUM_AGG(销售额),[日期,交易渠道])
显而易见,这两者得到的结果是相同的(如图1所示):

感觉是不是皆大欢喜,既然可以替代,那我只要会DEF函数不就可以了嘛~~
但遇到需要去重的情况,事情好像又变得不对劲了......
如图3所示,可以发现在银行交易表里,不仅同一个渠道的客户ID有重复,不同渠道的客户ID也有重复。所以统计有多少用户,我们要用COUNTD_AGG对客户ID进行去重计数。

我现在想求不同“交易渠道”的用户数。
表格已有维度“交易渠道”,我们既可以用DEF_ADD函数,写为:
DEF_ADD(COUNTD_AGG(客户ID))
也可以用DEF函数,直接只限制“交易渠道”:
DEF(COUNTD_AGG(客户ID),[交易渠道])
显而不易见,这次算出来的结果居然不一样了(如图4所示)。

差别具体表现在合计维度,通过验证可以发现,DEF_ADD是把所有渠道维度放在一起后,再去重计数,而DEF函数则是直接把各个渠道自己去重计数的结果加起来了。
查了一下是finebi6.0.13更新的合计计算逻辑:
DEF的合计计算逻辑为:合计-自动计算=各维度计算结果的加和
DEF_ADD(DEF_SUB同理)的合计计算逻辑为:合计-自动计算=对合计视图所使用到的拼接维度进行计算。
在刚刚的题目背景下,所有渠道维度拼接起来的结果,即为完整的表格数据,所以合计时就会对整个表格进行去重后再进行加和。
因此在使用DEF或DEF_ADD计算合计的时候要注意差异。

7395

被折叠的 条评论
为什么被折叠?



