要是说哪个工具最能帮咱们找出那些暗地里“打架”的时间安排,非PowerBI莫属。这里面的业务问题特别实在:销售、项目、活动这些活儿,没谁能躲开“期间”这两个字。一旦好几个期间在日历上重一块儿,资源就会被白白占用,结果要么是仓库货压多了,要么是人太累,要么是钱没花到点子上。 其实想找到这些撞期的组合并不难,PowerBI提供了两种路子:一种是直接写计算列,另一种是搞个度量值。这两种办法都能一下子把藏在暗处的重叠关系给挖出来摊到仪表盘上。 说到数据准备那是相当简单,只要准备个简简单单的表就行了。表里需要放三个字段:第一个是唯一标识的期间名称,第二个是开始日期,第三个是结束日期。 咱先说说第一种方法——计算列硬编码。在DAX里写个公式就能搞定,具体咋拆呢?用CALENDAR把当前期间的起止日期铺开变成一个日期表,算一下这表里总共有多少天;接着拿每条记录去跟别的记录比,用EXCEPT把对方的日期表去掉;要是去掉之后剩下的天数比原来少了,那就说明你这条时间线把别人的时间给吃掉了。最后用CONCATENATEX把所有和自己撞期的期间名称连成一串字符串扔出来就行。这个逻辑看着公式可能有点晕,但直接看图就能秒懂。 把计算列拖到报表页里看效果就特别直观,同一行数据旁边清清楚楚地列着所有和它重叠的期间。 再来看第二种方法——度量值软计算。这套逻辑其实跟计算列差不多,核心思想没变:先算自己这段时间有多少天;然后对每一行做个“剔除对方日期后还剩多少天”的判断;要是剩下的天数变少了就返回对方的期间名称。这法子跟计算列不同的是,度量值必须套个聚合函数用,还得配合ALL和FILTER来处理上下文的切换,写法上显得更紧凑点。 咱们把度量值拖到表格里跟计算列对比一下就会发现,只要上下文环境是一样的,这两种结果肯定是一模一样的。 总结起来就是一句话:让数据替咱们扫雷。不管是排促销的日程、给团队排班还是分预算,但凡涉及时间重叠的问题,先得算清楚哪些区间在打架才行。PowerBI的计算列和度量值都能在几秒钟之内把结果算出来,彻底把那种老要靠人工手动比对的低效工作给自动化了。下次再碰到类似的需求,直接套用这套模板,把撞期线索抓出来以后,咱们做业务决策才能又快又准又狠。