准确识别产品的爆品周期和爆发态势对企业制定营销策略、优化库存管理和提高销售业绩至关重要。本篇文章将介绍如何在PowerBI中实现这一目的。
问题描述
为识别产品的爆品周期与爆发态势,现在需要按Item_code分组, 当时间段连续且amt数据连续上升3天(含)以上, 将这部分数据用其上升阶段的最大值替换,计算Trend Amt指标。
具体问题如下图所示:
本案例的初始数据如下:
date_code | item_code | amt |
---|---|---|
03/26 | dc101 | 21 |
03/27 | dc101 | 33 |
03/28 | dc101 | 44 |
03/29 | dc101 | 45 |
03/30 | dc101 | 23 |
03/31 | dc101 | 12 |
04/01 | dc101 | 25 |
04/02 | dc101 | 27 |
04/15 | dc101 | 17 |
04/17 | dc101 | 21 |
04/18 | dc101 | 25 |
04/19 | dc101 | 17 |
04/20 | sf3122 | 17 |
04/21 | sf3122 | 21 |
04/22 | sf3122 | 24 |
04/26 | dc101 | 20 |
02/01 | sf3122 | 12 |
02/02 | sf3122 | 12 |
02/03 | sf3122 | 11 |
02/10 | sf3122 | 15 |
若需其它辅助表等,可自行创建并建模。
解题要点
本案例的关键在于找出连续增长区间,这需要满足两个条件,一个是日期连续,另一个则是金额连续上升,而这可以通过先定位出每个连续增长区间的起始节点,然后进行累计分组来找出,具体思路如下表所示:
date_code | item_code | amt | start node | Acc Grp |
---|---|---|---|---|
2025/3/26 | dc101 | 21 | 1 | 1 |
2025/3/27 | dc101 | 33 | 1 | |
2025/3/28 | dc101 | 44 | 1 | |
2025/3/29 | dc101 | 45 | 1 | |
2025/3/30 | dc101 | 23 | 1 | 2 |
2025/3/31 | dc101 | 12 | 1 | 3 |
2025/4/1 | dc101 | 25 | 3 | |
2025/4/2 | dc101 | 27 | 3 | |
2025/4/15 | dc101 | 17 | 1 | 4 |
2025/4/17 | dc101 | 21 | 1 | 5 |
2025/4/18 | dc101 | 25 | 5 | |
2025/4/19 | dc101 | 17 | 1 | 6 |
2025/4/26 | dc101 | 20 | 1 | 7 |
2025/2/1 | sf3122 | 12 | 1 | 1 |
2025/2/2 | sf3122 | 12 | 1 | 2 |
2025/2/3 | sf3122 | 11 | 1 | 3 |
2025/2/10 | sf3122 | 15 | 1 | 4 |
2025/4/20 | sf3122 | 17 | 1 | 5 |
2025/4/21 | sf3122 | 21 | 5 | |
2025/4/22 | sf3122 | 24 | 5 |
解决方案
首先,数据模型如下图所示:
然后,创建如下度量值:
Trend Amt =
VAR N = 3
VAR AddGrp =
ADDCOLUMNS(
DISTINCT(ALL('Order')),
"grp",
SUMX(
WINDOW(1,ABS,0,REL,ORDERBY('Order'[date_code],1,'Order'[amt]),PARTITIONBY('Order'[item_code])),
VAR CurAmt = 'Order'[amt]
VAR PreAmt = CALCULATE(SUM('Order'[amt]),'Order'[date_code]=EARLIER('Order'[date_code])-1,ALL('Order'[amt]))
RETURN
IF(CurAmt<=PreAmt || PreAmt=BLANK(),1)
)
)
VAR CurGrp = MAXX(OFFSET(0,AddGrp),[grp])
VAR GrpTable = FILTER(AddGrp,'Order'[item_code]=MAX('Order'[item_code]) && [grp]=CurGrp)
RETURN
IF(COUNTROWS(GrpTable)>=N,MAXX(GrpTable,'Order'[amt]),SUM('Order'[amt]))
然后创建一个矩阵,并将日期和品类编码字段作为行标签,再将上面的度量值放入矩阵的值字段即可,如下图所示:
此外,为方便用户查看,也可以使用折线图等视觉对象进行可视化,如下图所示:
通过折线图,即可一目了然的看到产品的增长态势以及爆发能量。
总结
以上方法仅供参考,若有更优雅的解决方案,欢迎留言讨论,或者加入我们的技术交流群,一起享受这种思维碰撞的快乐吧!
PBI/DAX技术交流群(QQ):344353627