Finebi中DEF函数和DEF_ADD(DEF_SUB)函数的使用差异

Python3.8

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

适用版本: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所示):

图1 银行交易表

如果表格已有维度为“交易渠道”来计算销售额,现在我想再加一个“日期”的维度。我们既可以使用DEF_ADD函数,把新的维度加进来:

DEF_ADD(SUM_AGG(销售额),[日期])

又可以使用DEF函数,只要把原有维度也加进来即可:

DEF(SUM_AGG(销售额),[日期,交易渠道])

显而易见,这两者得到的结果是相同的(如图1所示):

图1 DEF_ADD和DEF函数求销售额

感觉是不是皆大欢喜,既然可以替代,那我只要会DEF函数不就可以了嘛~~

但遇到需要去重的情况,事情好像又变得不对劲了......

如图3所示,可以发现在银行交易表里,不仅同一个渠道的客户ID有重复,不同渠道的客户ID也有重复。所以统计有多少用户,我们要用COUNTD_AGG对客户ID进行去重计数。

图3 银行交易表(发现重复版)

我现在想求不同“交易渠道”的用户数。

表格已有维度“交易渠道”,我们既可以用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计算合计的时候要注意差异。

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值