PowerBI处理多产品多生产时间段问题

文摘   2024-12-20 16:15   山东  

问题呈现

有学员问了这么一个问题:

请教一下,我想想设置两个度量值,一个开始时间,一个结束时间,用来反应每个产品是几点开始生产,几点结束的,这个要怎么设置呢? 

单纯的用min和max不行,应为有的产品一天之中可能有两个生产时段,中间穿插生产了别的产品。如果某一产品一天之内的生产时段不唯一,这个开始时间和结束时间的度量值,把多个时间点用逗号隔开

比如2024-12-18这一天,MG9325这个产品有两个时间段在生产,就要将这两个时间段都标注出来:

思路分析

首先学员自己就分析出来了,直接用max和min是不行的,因为会有部分日期的部分商品一天有多个时间段。

那怎么分别找出多个时间段的起始时间和结束时间呢?

以起始时间为例,我们可以添加一列,对于每一行,添加它的上一行的产品ID,如果这一行和上一行的产品ID不同,那么就表示这个产品的当日开始生产时间,并且按照每天进行分割。

解决方案

为方便获取上一行,我们先按照日期和时间顺序添加一列索引:

然后添加“产品2”字段,注意使用了 ALLEXCEPT 函数来分割每一天:

产品2 = var a=CALCULATE(SELECTEDVALUE('生产批次时间'[索引]))var b=a-1var c=CALCULATE(MAX('生产批次时间'[产品]),'生产批次时间'[索引]=b,ALLEXCEPT('生产批次时间','生产批次时间'[日期]))return c

结果:

从表中可以看到,每天的第一个时间总是空白,此时,我们只要加上一个判断:

start = IF([产品2]<>[产品],[time1])

就可以得到每个产品在每天发生变化的时间,也就是从A产品变化到B产品的时间点,并且加上了每天的起始时间,就得到了每天不同产品的开始加工时间。

按照类似的逻辑也可以得到结束时间:

对于每一天每一个产品而言,使用CONCATENATEX函数将这些起止时间连起来就可以了:

开始时间 = CONCATENATEX(CALCULATETABLE('生产批次时间','生产批次时间'[start]>0),[start],",")结束时间 = CONCATENATEX(CALCULATETABLE('生产批次时间','生产批次时间'[end]>0),[end],",")

结果呈现:

结论

这个问题是一个常见的业务分析场景,也有多种解决方案,可以直接在powerquery中处理,也可以通过直接书写dax度量值来实现,本方案是采用了新建列的方式,大家可以想想如何使用其他的方法来实现。

本问题的提问者比较清晰地阐述了问题,给出了原始数据,并提供了一个想要的结果示例,是一个合格的提问。

原始数据和示例文件已存入“学谦PowerBI”知识星球,加入“学谦PowerBI”知识星球,享有全年365天不限次技术问答,并赠送永久PowerBI Pro账号一个。

扫码添加微信,暗号:BI星球

PowerBI生命管理大师学谦
为提升生产力而存活。 运营人员的数据分析技能必备。 左手MySQL,右手Python,头顶Tableau,脚踩PowerBI。
 最新文章