看专家怎么用 Power BI 算零售业务中的订单数,知道差距了
共 3138字,需浏览 7分钟
·
2020-10-18 05:36
本文得到:郑老师 授权发布。
PowerBI 的基础已经普及,如果您刚刚接触到这个领域,您可以从公众号的历史文章中找到很多资源。
我们会在不同领域将 PowerBI 的使用与业务做更紧密的结合,这里特别荣幸可以特约郑老师用系列文章的方式和大家分享零售中的实战问题,各种真实场景以及在分析和实际操作时要考虑的问题,当这些问题都可以被清楚考虑时,不仅仅是业务上需求的提出者,更可以成为:自助者,想要的,不管有没有别人,自己可以实现。
概述
分析的灵魂是找到关键指标,而很多关键指标由来源于基础指标,对于基础指标的计算,本身肯定并不简单,这要求我们有很扎实的基础。
零售业进行数据分析时,几个常用的对销售额进行拆解的指标是单据数、客单价、件单价、连带率。其指标定义及计算公式:
单据数 = POS 小票的数量。
客单价 = 销售额 / 单据数,代表顾客单次平均购买金额。
件单价 = 销售额 / 销售数量,代表单件商品的平均售价。
连带率 = 销售数量 / 单据数,代表顾客单次平均购买件数。
这 4 个指标虽然指标含义及计算公式非常简单,但在实际应用中,不同企业有着截然不同的计算口径及计算方法,本节重点介绍单据数的几种常用计算方法。
POS 产生的单据
人们和零售业务发生活动的点在 POS 机,本质上这里记录了人们的行为以及行为背后的心理,所以对 POS 机不断发生的数据分析就能找到背后的密码。
例如,人们在超时购物,选择了 5 个商品,然后刷卡买单,就会出来一张小票。刚买好,后悔了,要退掉里面的一个东西,于是又产生了一个小票。等下,又发现有个东西有点问题,要换货,又产生了一个小票。
POS 产生的单据通常包括以下三类:
正常单据,单据中每件商品的销售数量均为正数;
退货单据,单据中的销售数量均为负数;
换货单据,单据中的销售数量有正有负。
具体说来,在换货单据中,有的退 1 件换 1 件,整单销量为 0;有的退1件换2件,整单销量大于 0;有的退 2 件换 1 件,整单销量小于 0。正是由于对退货、换货单据处理方式的不同,导致对单据数的计算方法产生差异。
产生的这些单据都保存进入了数据库,它的样子,大家很熟悉,例如:
小票,是人和零售生意产生连接的凭证,单小票并不是最细节的信息,观察上图,最细节的信息是小票里的行,这样就得到如下的结构:
小票号 | 行号 | 商品 | 数量 | 单价 | 合计 |
---|---|---|---|---|---|
P-001 | 1 | 铅笔 | 2 | 2 | 4 |
P-001 | 2 | 橡皮 | 1 | 1 | 1 |
P-001 | 3 | 圆规 | 1 | 10 | 10 |
为了保存所有信息,数据库中的表是必须保存所有这些信息的,因此,在数据库中订单明细表的每一行,并不表示一个订单,而是表示订单的细节。
为了计算订单数,我们要对小票号
去重计数,而考虑复杂的实际业务,包括退货,换货,那么,计算订单数的方式就更多了起来,需要回答:
退货单算不算到订单数里?
换货单算不算到订单数里?
...
不同的计算方法,对于考虑某些业务问题时能带来的洞察力是不同的,尤其是对后续分析中的影响,也会因为最初始的选择而带来蝴蝶效应的影响。在实际运行的企业中,都有自己的经验,我们先来看看有哪几种做法,以及如果选择某种做法,如果用 PowerBI DAX 给出定义。
场景 1:全部有效法
场景 1:全部有效法,又称:宽松法。这里,退换货单据不做任何处理,均作为有效单据。其 PowerBI DAX 定义如下:
单据数1 = DISTINCTCOUNT( 'Model-Factsales'[单据编号] )
备注
Model-Factsales 是订单事实表。
场景 2:正单有效法
场景 2:正单有效法。这里,整单销售件数大于 0,则该单据作为有效单据。包括正常销货的单据,以及换货单据中退 1 件换 2 件的情景。而退 1 件换 1 件、退 2 件换 1 件以及纯退货单据,则作为无效单据,计算有效单据时不考虑在内。其 DAX 定义如下:
// 先定义:
Core.销量 = SUM( 'Model-Factsales'[数量] )
// 再定义:
单据数2 =
CALCULATE (
DISTINCTCOUNT ( 'Model-Factsales'[单据编号] ),
FILTER (
VALUES ( 'Model-Factsales'[单据编号] ),
[Core.销量] > 0
)
)
其中,VALUES( 'Model-Factsales'[单据编号] )
返回在外部筛选环境下,所有非重复单据编号集合(表的形态,却可以按集合来理解其逻辑的数据结构),FILTER
函数对该集合(表)进行迭代,在迭代中对每行进行上下文转换,也就可以对每个单据编号进行处理,按 [Core.销量] > 0
在事实表捞取满足条件的单据编号,进行非重复计数,得到有效单据数。
场景 3:负单扣除法
场景 3:负单扣除法。这里,有效单据考虑整单销售件数大于 0 且扣减掉整单销售件数小于 0 后的订单数。场景 3 与场景 2 相似,根据整单销售件数判断,规则如下:
整单销售件数大于 0 作为有效单据;
整单销售件数小于 0 作为无效单据,若与上述有效单据对应,则扣减。
整单销售件数等于 0 作为无效单据,若与上述有效单据对应,不再扣减。
这里的扣减,指的是在已经计入有效单据的订单中,若后续发生退换货且退货居多(体现为该单的销售件数小于 0 )则原有效单据视为无效。很多业务逻辑在表达时有些绕口,一旦你可以用 PowerBI DAX 去定义出来,它将很清晰,其 PowerBI DAX 定义如下:
// 先定义:
Core.销量 = SUM( 'Model-Factsales'[数量] )
// 再定义:
单据数3 =
VAR X =
CALCULATE (
DISTINCTCOUNT ( 'Model-Factsales'[单据编号] ),
FILTER ( VALUES ( 'Model-Factsales'[单据编号] ), [Core.销量] > 0 )
)
VAR Y =
CALCULATE (
DISTINCTCOUNT ( 'Model-Factsales'[单据编号] ),
FILTER ( VALUES ( 'Model-Factsales'[单据编号] ), [Core.销量] < 0 )
)
RETURN X - Y
不难看出,这里对业务的有效性的要求越来越高,由于 POS 机是通用的,它可以产生大量的单子,但什么样的单子才是更有业务价值,可以分析销售状况的,则需要深入考量。有 100 万次下单,再有 100 万次退单,对于一个企业来说,可能是没有业务价值意义的。
场景 4:见负作废法
场景 4:见负作废法。这里,单据中只要包含销售数量小于等于 0 的商品,即只要是退换货单据,不管整单销量是正是负,均作为无效单据。其 PowerBI DAX 定义如下:
单据数4 =
VAR vOrdersAll = DISTINCTCOUNT ( 'Model-Factsales'[单据编号] )
VAR vOrdersInvalid =
CALCULATETABLE (
VALUES ( 'Model-Factsales'[单据编号] ), 'Model-Factsales'[数量] <= 0
)
RETURN
vOrdersAll - COUNTROWS ( vOrdersInvalid )
其中,vOrdersInvalid
找到在外部筛选环境下,所有包含销售数量 <= 0 的单据编号,COUNTROWS( vOrdersInvalid )
计算这些单据编号的数量。最后,DISTINCTCOUNT( 'Model-Factsales'[单据编号] ) - COUNTROWS( vOrdersInvalid )
计算所有单据编号数量剔除无效单据编号的数量,即有效单据数。
需要注意的是,虽然这单作废,但并不扣除原有效订单,而场景 3 的 负单扣除法
会扣除原来有效的订单,这样看来场景 3 比场景 4 更加严格。
四种场景计算结果的差异
为什么要定义四种不同的场景呢?
在不同的分析中,用不同的方式会更贴近业务的核心逻辑,用以上四种方法对同样的数据进行计算,得到的结果如下:
可以发现:
全部有效法,也就是宽松法,是最大的。
其他三种方法都是不断的收紧计算逻辑,强调分析有变现能力的订单。
见负作废法听着是最严格的,但是由于没有扣除,所以比负单扣除法略微宽松。
注意,每种方法均有其实际的业务考量,根据企业实际进行选择。至于场景用什么方法以及区别,在后续内容中会有描述。
总结
BI佐罗:不难看出,和讲解忽悠人的简单数据模型技术不同,真实的业务才是真实的战场,你以为的计个数这么简单的问题,在业务专家那里就有非常不同而实际的考虑,这些考虑来自多年运营的实战精髓。我看了郑老师的系列,非常震感,以后不敢说自己会零售分析了,我们一起来安静的做个学生吧。你可以用这几种方法来算一算你们公司的有效订单数有怎样的差异。也欢迎大家留言讨论,我们希望可以就真实的业务做深刻地探讨学习。
下篇文章将邀请郑老师继续介绍连带率计算中遇到的实际问题以及对于有效单据数的进一步优化。
更多使用 PowerBI 解决零售行业业务场景的案例,已经制作成《零售行业通用业务模型》,并录制成系列课程,方便小伙伴们系统提升,欢迎 阅读原文至云课堂 试听学习!
让数据真正成为你的力量
扫码与郑老师一起学习,验证码:retail
《零售行业通用业务模型》
点击“阅读原文”,即刻开始学习
↙