【数据模型系列_05】巧用FineBI的多对多破解退单计算难题

楼主
我是社区第525317位番薯,欢迎点我头像关注我哦~

零售行业出现退单是非常常见的事情,比如,买了双鞋子,女朋友不喜欢,怎么办?要么退掉,要么换一双。

不管是退掉还是换一双,对应到零售商家的订单表内,就是一笔销售订单(正向),另外再加一笔或者多笔退单(负向,多笔是指一笔订单多次退货,比如原订单买了三双袜子,一双鞋,一件上衣,鞋子女朋友不喜欢,退一单。过了两天,发现上衣有质量问题,又退一单)。

退单以及其对应的正单不参与销售统计,是最基本的要求,所以很多销售明细表内其实也包含退单,这样在做销售额、销售件数求和时,正负抵消也没什么影响。

但是如果涉及订单数、会员数、复购率、购买频次等指标的计算,退单就有影响了,会直接导致数据统计不准确。举个栗子:

问:某销售明细表内总计20笔订单,其中包含2笔退单,那正常的订单有多少笔?这是在求订单数。

答:16或17笔。

为什么?因为2笔退单对应的有正单,总共需要剔掉3或4笔(不理解为什么可能是3的,回看本篇第二段)。

剔除退单,一个看似简单的需求,处理起来远比想象中复杂,这个复杂主要体现在企业数据的呈现方式:

比如,退单因为各种各样的业务原因,没有关联到原订单

比如,退单出现在销售明细表中,和正单混在一起

。。。等等,退单关联不到原单的问题,要做的是优化业务流程,没数据,巧妇难为无米之炊~

 

但是正退单混合出现在销售明细中,想要剔除退单计算各种指标,是有解决方案的:

1、将正退单混合的销售明细表拆成正单、退单两类,分别单独成表(需要有退单对应的原单单号)

2、使用FineBI主题模型,将退单(下文为:退货明细表)和正单(下文为:销售明细表)N:N关联,连接条件为:销售明细表的「订单号」对应退单表的「原订单号」

3、Over

N:N为什么可以实现?

我们通过计算「剔除退单的订单数」和「剔除退单的会员数」两个指标,一起来看~ 

FineBI的N:N

1

Part.1

数据导入

弹出【选择数据】框,将Excel数据导入。

 

数据样例(注意,销售明细表的「订单号」是存在重复的,退货明细表内的「原订单号」也是存在重复的,关注BI实战公众号,后台回复“资料包”可下载数据样例)

销售明细表:

退货明细表:

 

2

Part.2

模型构建

模型视图内,关系选择N:N,连接依据选用销售明细表的「订单号」以及退货明细表的「原订单号」

 

3

Part.3

指标计算

1. 添加计算字段:

订单数-剔退单:DEF_ADD(COUNTD_AGG(订单号),[],ISNULL(原订单号))

会员数-剔退单:DEF_ADD(COUNTD_AGG(会员id),[],ISNULL(会员id))

DEF函数学习,见《戏说DEF函数

 

2. 添加组件,看下计算结果:

 

 

不够直观对不对?我们把销售明细表以及退货明细表中订单数和会员数计算出来做个对比:

销售明细表中添加计算字段:

在退货明细表中添加计算字段:

看下对比结果:

会员数14022-42 ≠ 13985 ,但这个结果是对的,猜猜原因哦~

 

搞不懂为什么N:N能算对的同学,移步上一篇《笛卡尔积 vs FineBI主题模型的N:N》,内含FineBI主题模型N:N计算步骤的详细拆解

 

 

小结

 

继续强调FineBI的主题模型合并逻辑:

  • 只有分析字段和关联字段参与主题模型的合并

  • 执行先聚合再合并

强烈建议拿例子去练手,会对以上的计算逻辑理解更深刻。

 

好了,今天就酱紫,回见~

分享扩散:

沙发
发表于 前天 10:19
您好,您此篇文章内容基于零售退单背景提出计算难题,凭借着对相关工具的熟练掌握,使用FineBI的N:N有条不紊的进行逐步破解,实用性较强,可以解决相关场景化需求。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

返回顶部 返回列表