占比计算的2.0版本 见 《【DEF系列_01】DEF应用之占比计算_2-我的帆软 (fanruan.com)》,直播课,有同学提问了另一个占比计算场景:
如何用DEF函数计算TOP10占总体的占比?
TOP N占比有两种常见计算逻辑:
举个栗子:
某直播电商公司旗下现在有50个品牌在销售:
-
老板想知道每个品牌的销售 vs公司整体业绩的占比是多少?so easy,A品牌销售÷公司整体销售*100%就ok了。
-
那如果老板想知道 TOP10的占比怎么办呢?依然so easy,前面每个品牌占比都算过了,把销售排名前10的品牌筛选出来就哦了呀~
-
再如果,老板只关注TOP 10品牌,想知道每个品牌在TOP10的销售中的占比,那又该怎么算呢?!
老板的第二个需求就是TOP N占比整体,第三个需求就是 TOP N占比自己
FineBI的帮助文档有一个举例也能解决这个问题,见:求前六名分别占前六总和的占比:https://help.fanruan.com/finebi/doc-view-823.html
答同学提问,想要用DEF函数算,今天来个升级版~
按照惯例,先温习函数语法,参见《戏说DEF-我的帆软 (fanruan.com)》:
DEF(聚合指标, [维度1,维度2,...], [过滤条件1, 2,...])
DEF_ADD(聚合指标,[维度1,维度2,...],[过滤条件1, 2,...])
DEF_SUB(聚合指标,[维度1,维度2,...],[过滤条件1, 2,...])
然后我们再来看看FineBI怎么实现老板的第二个/第三个需求~
第一步:建参数-品牌排序(数值类型),如下图:
第二步:指标计算,不废话,直接上公式
①某TOP品牌占比整体:
DEF_ADD(SUM_AGG(交易额),品牌)/DEF(SUM_AGG(交易额))
②某TOP品牌占比筛选出来的TOP N品牌
DEF_ADD(SUM_AGG(交易额),品牌) / DEF(SUM_AGG(交易额),[],DEF(COUNTD_AGG(品牌)+1,品牌,DEF(SUM_AGG(交易额),品牌)>EARLIER(DEF(SUM_AGG(交易额),品牌))) <= 品牌排序)
上述公式,分母DEF函数的第三参数,有进行二次DEF嵌套,目的是对品牌进行排序(依据销售额聚合);
万金油排序公式(可依据自己的需求,修改维度即可)
DEF(COUNTD_AGG(品牌)+1,品牌,DEF(SUM_AGG(交易额),品牌)>EARLIER(DEF(SUM_AGG(交易额),品牌)))
此处通过分组表展示:
①新建仪表板,在仪表板内新建一个过滤组件(展示类型:文本下拉),绑定参数且设置自定义值,设置如下:
②回到组件界面,选择分组表,将 “品牌”拖入维度栏,下拉框选择“过滤”,给品牌维度设置过滤条件(依据交易额,筛选最大的N个,N通过“品牌排序”参数控制);
③将计算好的指标 拖入指标框即可,如下图:
咦?没数据?!
不急,拖进仪表板看看~
④ 组件放入仪表板,自定义筛选,结果变化如下:
DEF做复杂的占比计算,最大的难点在第三参数的筛选,想清楚筛选条件和逻辑很重要;
此计算场景,帮助文档的解决方案,也可以升级为通过参数控制TOP N,调整品牌的过滤条件,绑定参数即可,如下图:
好了,今天就酱紫啦,回见~
我是BI实战(张丹洁),关注我,带你在FineBI的世界飞
|