期货制鞋服企业分析产品销售状况一般有两个时间维度,一个是自然年月维度,比方1-3月属于Q1,4-6月属于Q2。另外一个维度是订单季,一个订单季的产品销售可能会跨越若干自然时间季度。比方订单属于20Q1的产品,可能在2019年12月就到货销售,2020年5月仍然有库存在售。
判断一款产品在自然时间的销售状况非常简单,只需ERP系统拉下销售日期字段即可。难的是判断这款产品的该季度订单累计销售。这其中牵扯常青款/延续款的问题。
所谓常青款/延续款指一直在售卖的款式,一般是基础款。20Q1订货了,20Q3可能继续加单,甚至若干年连续加单。一般情况下,20Q3货品到货后,ERP系统会给该货品ID匹配最新的季节维度字段,即标明该货品是20Q3货品。
这给提取销售数据带来困难。假设某产品Q1订货200件,Q3订货100件。我们从系统读取该货品2020年1月1日到2020年7月31日的销售,显示已经销售230件。系统会记录这是20Q3的货品的累计销售状况,而实际20Q3该产品只订了100件,无论如何也不可能销售超出这个数字。
将这些常青款/延续款的销售数据按订货季分开,对于后续分析工作非常必要。借助Excel的Power Pivot我们可以制作一个全自动的批量拆分模型。
首先,准备好两个数据源。一个是订单数据,记录各个季度的产品订量明细,最关键的是标明每款货品每个季度是什么时候到货的(从ERP采购记录一般可获取),如果该货品在两个以上季度连续出现,则表明是常青款/延续款。
订单表
另外就是每个产品每天的销量信息。基于这两个数据,我们可以作出这样的逻辑假设:
- A货品在本季度订单到货之前的所有销售都属于上季度的订单销售,
- 在下季度订单到货之前的所有销售都属于本季度订单的销售。
销售表
将数据导入Power Pivot,并将以上两个假设公式化。在Power Pivot的订单表中,新建如下列:
代码语言:javascript复制销售结束日期 =
VAR StyleID = '订单'[货号]
VAR Date_S = '订单'[入仓日期]
VAR Date_E =
MINX ( FILTER ( '订单', StyleID = '订单'[货号] && Date_S < '订单'[入仓日期] ), '订单'[入仓日期] )
RETURN
IF ( Date_E = BLANK (), TODAY (), Date_E )
随机选择一个产品,可以看到每一季度销售结束日期自动截止到下一季度到货。最后一个季度的截止日期为今天(也可以按照取数日期自定)。
接着新建列判断每个区间的销量:
代码语言:javascript复制当季销量 =
IF (
'订单'[是否延续款] = "Y",
SUMX (
FILTER (
'销售',
'订单'[货号] = '销售'[货号]
&& '销售'[销售日期] >= '订单'[入仓日期]
&& '销售'[销售日期] < '订单'[销售结束日期]
),
'销售'[销量]
),
BLANK ()
)
如此,销量即可按照订单季区分开来。两个时间维度-日历时间和订单时间,一个也不能少。