PowerBI业务分析案例:如何找出重叠的期间

您看看需不需要 2024-03-21 13:22:44

来自于近期星友提出的一个问题,如果有多个期间,如何用PowerBI快速找出哪些期间是相互重叠的?

这是一个很常见的场景,业务背景可以是:

不同商品的销售期限,需要知道哪些商品的销售期限存在交集,以方便定制促销活动不同项目的计划时间轴,需要发现哪些项目时间轴重叠,以便分配同一工作团队完成

以下面这个简单的三列数据为例,分别是期间名称、开始日期和结束日期:

如何找出每个期间与其他哪些期间有重叠日期呢?下面通过计算列和度量值两种方式看看如何实现。

计算列

计算列可以直接这样写:

重叠期间 计算列 = VAR A=CALENDAR([开始日期],[结束日期]) //当前期间的日期列表VAR B=COUNTROWS(A) //当前期间的天数VAR C=[期间] //当前期间名称VAR D= //筛选与当前上下文有日期重叠的期间 FILTER( FILTER('期间表', [期间]<>C), //迭代除当前行的其他行 COUNTROWS( EXCEPT( //从当前期间中,分别剔除表中其他行的期间 A, CALENDAR([开始日期],[结束日期]) //每一行期间对应的日期列表 ) )<B //如果剔除后的天数小于B,表示该行与本行有重迭日期,筛选出来 ) RETURN CONCATENATEX(D,[期间],"、") //返回有重叠的期间名称

计算逻辑已经在注释中详细说明,你可以慢慢理解一下,结果如下:

度量值

度量值的逻辑与计算列完全一致,只是在度量值中,对于列的处理需要套个聚合函数,而不能直接引用:

重叠期间 度量值 = VAR A=CALENDAR(MAX('期间表'[开始日期]),MAX('期间表'[结束日期])) //当前期间的日期列表VAR B=COUNTROWS(A) //当前期间的天数VAR C=MAX('期间表'[期间]) //当前期间名称VAR D= //筛选与当前上下文有日期重叠的期间 FILTER( FILTER(ALL('期间表'),'期间表'[期间]<>C), //迭代除当前期间的其他期间 COUNTROWS( EXCEPT( //从当前期间中,分别剔除表中每一行期间 A, CALENDAR(CALCULATE(MAX('期间表'[开始日期])),CALCULATE(MAX('期间表'[结束日期]))) //每一行期间对应的日期列表 ) )<B //如果剔除后的天数小于B,表示该期间与当前上下文有重迭日期,筛选出来 ) RETURN CONCATENATEX(D,[期间],"、") //返回有重叠的期间名称

通过表格来看看这个度量值的结果,只要上下文相同,结果与计算列是完全一致的:

以上就是解决重叠期间的一个思路,如果你也遇到这样的需求,不妨仔细理解上面公式的逻辑,参考借鉴借鉴来解决类似的问题。

PowerBI星球

0 阅读:0

您看看需不需要

简介:感谢大家的关注