目录
前言
在进行数据分析时,经常遇到源数据需要根据业务场景新建指标的情况。FineBI虽然提供了图表横纵轴维度上的快速计算,比如同比/环比、占比、组内占比、排名、组内排名等,但是在仪表板中使用筛选组件进行数据筛选时,指标不能正常显示。
为保证指标不受筛选条件或联动影响,本文从实际案例出发,参考官方指导文档使用FineBI 6.0的def函数进行新建指标的实操练习,就实操的过程进行了记录整理。
一、案例数据来源
二、函数释义
1.DEF定义静态指标
def(指标, [维度1,维度2,...], [过滤条件1, 过滤条件2,...])
满足过滤条件1、2的明细数据按照【维度1、维度2】对指标进行聚合运算。
示例: def(sum_agg(购买数量),[产品],[是否会员 = "是" ]):求会员在产品分组下的购买数量。 第二、三个参数可以缺省。
2. DATEDELTA
DATEDELTA(date,deltadays):返回一个日期date后deltadays的日期。
参数说明
date除了支持文本、日期类型,deltaDays可以为正值,负值,零。
• 示例
DATEDELTA("2008-08-08",-10)等于2008-07-29。
DATEDELTA("2008-08-08",10)等于2008-08-18。
3. EARLIER
取当前行数据某一属性的作用。输出上一个视图的计算值。只能用于def/def_add/def_sub中,一般用于行间过滤计算。 earlier的参数为单个字段,不支持常量作为参数。
示例:
def(count_agg(购买数量)+1,[购买数量],[购买数量 < earlier(购买数量)]),得到计算购买数量的排名。
def(sum_agg(购买数量),[序号],[序号 <= earlier(序号)]),得到按照序号大小计算的购买数量的累计值。
4. SUM_AGG
SUM_AGG(array):根据当前分析维度,返回指标字段的汇总求和值,生成结果为一数据列,行数与当前分析维度行数一致。
参数说明: array必须为非聚合函数公式返回的结果,可以是某指标字段、维度或指标字段与普通公式的计算结果。
示例 :用户横轴为维度字段'日'时,纵轴的计算字段SUM_AGG(销量)返回的值为每日的汇总销量。 当用户横轴为维度字段'月'时,SUM_AGG(销量)返回的值为每月的汇总销量。
5. COUNTD_AGG
COUNTD_AGG(array):根据当前分析维度,返回某字段的去重计数,生成结果为一数据列,行数与当前分析维度行数一致。
参数说明:array必须为非聚合函数公式返回的结果,可以是某指标字段、维度或指标字段与普通公式的计算结果。
示例 :用户横轴为维度字段'日'时,纵轴的计算字段COUNTD_AGG(销量)返回的值为每日的销量的去重个数。 当用户横轴为维度字段'月'时,COUNTD_AGG(销量)返回的值为每月的销量的去重个数。
三、新建指标
针对超市销售数据中不同类别产品销售额进行多个指标的新建,原表先提取订单日期、类别、销售额三个字段;
1.不同类别产品的销售额日环期值
以订单日期和类别为维度,对相同类别的销售额做一个日环期汇总
DEF(SUM_AGG(销售额),[订单日期,类别],[DATEDELTA(订单日期,1)=EARLIER(订单日期),类别=EARLIER(类别)])
参数解释:
1.统计维度为订单日期和类别
[订单日期,类别]
2.当前行的订单日期=订单日期+1
DATEDELTA(订单日期,1)=EARLIER(订单日期)
3.当前行的类别=类别
类别=EARLIER(类别)
2.不同类别产品的销售额日累积值
以订单日期和类别为维度,对相同类别的销售额做一个日累计
DEF(SUM_AGG(销售额),[订单日期,类别],[订单日期<=EARLIER(订单日期),类别=EARLIER(类别)])
参数解释:
1.统计维度为订单日期和类别
[订单日期,类别]
2.当前行的订单日期=订单日期+1
DATEDELTA(订单日期,1)=EARLIER(订单日期)
3.当前行的类别=类别 类别=EARLIER(类别)
3.不同类别产品的销售额月合计值、年合计值、月合计值环期值、月合计值同期值
1.月合计值:
DEF(SUM_AGG(销售额),[订单日期,类别],[年份=EARLIER(年份),月份=EARLIER(月份),类别=EARLIER(类别)])
2.年合计值:
DEF(SUM_AGG(销售额),[订单日期,类别],[年份=EARLIER(年份),类别=EARLIER(类别)])
3.月合计值环期值
DEF(SUM_AGG(销售额),[订单日期,类别],[年份=EARLIER(年份),月份+1=EARLIER(月份),类别=EARLIER(类别)])
4.月合计值同期值
DEF(SUM_AGG(销售额),[订单日期,类别],[年份+1=EARLIER(年份),月份=EARLIER(月份),类别=EARLIER(类别)])
参数解释:
1.条件为年份为当前行的年份、月份、类别:
年份=EARLIER(年份),月份=EARLIER(月份),类别=EARLIER(类别)]
2.条件为年份为当前行的年份、当前行月份的前一月份、当前行的类别:
年份=EARLIER(年份),月份+1=EARLIER(月份),类别=EARLIER(类别)]
4.不同类别产品的年初销售额合计值、年末销售额合计值
以类别和年份为分组统计不同分类当年的年初销售额(上年末销售额)
DEF(SUM_AGG(销售额),[类别,年份],[年份+1=EARLIER(年份),月份=12,DAY(订单日期)=31,类别=EARLIER(类别)])
参数解释:
1.条件为年份+1等于当前行的年份,即当前行年份的上一个年份,月份为年末月份即12月,日为年末一天即31号
年份+1=EARLIER(年份),月份=12,DAY(订单日期)=31
2.条件为类别等于当前行的类别
类别=EARLIER(类别)
本操作取的2013.12.31当天的销售额为年初销售额,也可以变化参数取2014.1.1,根据场景自定义即可。
5. 每日销售额类别均值
以订单日期为分组汇总销售额后按每日类别去重后数量求平均值
DEF(SUM_AGG(销售额),[订单日期])/DEF(COUNTD_AGG(类别),[订单日期])
参数解释:
每日订单的类别
DEF(COUNTD_AGG(类别),[订单日期])
6. 每日销售额总计
总结
本文简单介绍了def函数在数据处理中新建指标的使用。
参考文档:解决数据分析新建指标难题