Powerbi 查找重叠的日期范围并添加相应的性能指标以衡量效率
对于每一行,我都试图找出作业日期范围是否与其他作业重叠。如果有重叠,我想对所有重叠作业的加载量求和 这就是我尝试的,在表中创建了一个新列:Powerbi 查找重叠的日期范围并添加相应的性能指标以衡量效率,powerbi,dax,powerbi-desktop,Powerbi,Dax,Powerbi Desktop,对于每一行,我都试图找出作业日期范围是否与其他作业重叠。如果有重叠,我想对所有重叠作业的加载量求和 这就是我尝试的,在表中创建了一个新列: +----------+------------------+-------+---------+-------------+------------+ | Name | Booking Type | Job | Loading | Start Date | End date | +----------+--------------
+----------+------------------+-------+---------+-------------+------------+
| Name | Booking Type | Job | Loading | Start Date | End date |
+----------+------------------+-------+---------+-------------+------------+
| John | Chargeable | job1 | 20 | 04/11/2019 | 31/01/2020 |
| John | Chargeable | job2 | 100 | 01/10/2019 | 31/12/2019 |
| John | Chargeable | job3 | 100 | 14/10/2019 | 01/11/2019 |
| John | Chargeable | job6 | 50 | 29/07/2019 | 30/09/2019 |
| John | Chargeable | job7 | 50 | 29/07/2019 | 30/09/2019 |
| John | Vacation/Holiday | job8 | 100 | 10/01/2020 | 10/02/2020 |
| John | Chargeable | job9 | 100 | 23/03/2020 | 30/07/2020 |
| John | Chargeable | job10 | 50 | 20/01/2020 | 20/03/2020 |
| John | Chargeable | job11 | 20 | 03/02/2020 | 20/03/2020 |
| John | Chargeable | job12 | 30 | 22/01/2020 | 20/03/2020 |
| Kimberly | Chargeable | job11 | 20 | 03/02/2020 | 20/03/2020 |
| Kimberly | Chargeable | job13 | 100 | 22/01/2020 | 20/03/2020 |
| Kimberly | Chargeable | job14 | 100 | 22/04/2020 | 20/04/2020 |
+----------+------------------+-------+---------+-------------+------------+
加载状态=
VAR staffname='员工预订'[姓名]
VAR jobstart='员工预订'[开始日期].[日期]
VAR jobend='员工预订'[结束日期].[日期]
VAR bookingtype='员工预订'[预订类型]
返回
如果(
算计(
总额(‘员工预订’[装货]),
过滤器('Staff Booking','Staff Booking'[Name]=员工姓名),
过滤器('Staff Booking'、'Staff Booking'[预订类型]==“Charged”),
滤器(
‘员工预订’,
根据上面的DAX公式,“员工预订”[开始日期][日期]100),浅蓝色表示工作正常(100)
然而,这里的深蓝色(第一个和第二个)是不正确的,因为它们在任何时间段都不会超过100。它们被标记为过载的原因是Dax公式将重叠的所有不同时间段的载荷组合在一起
e、 g.作业12=作业12+作业10+作业1+作业20=120
这是错误的,因为作业12在任何时间段都是100
e、 g.作业12=作业12+作业10+作业1=100
作业12=作业12+作业10+作业20=100
1) 是否有办法调整DAX公式或任何其他方法,以确保其纠正上述问题,从而在上述情况下不应将作业12视为超额预订
2) 作为纠正上述情况的一个副作用,出现了以下情况:
如果作业20
加载设置为50
然后,作业12的加载和将看到两个不同的阶段:
阶段1)作业12=作业12+作业10+作业1=100(正常)
第2阶段)作业12=作业12(30)+作业10(50)+作业20(50)=130(超售)
在这种情况下,DAX公式应采用最高阶段,并将其放在“超额预订”列中。如果使用日历表,这将更容易。例如,您可以计算所选
名称的负载,如下所示:
loading Status =
VAR staffname = 'Staff Booking'[Name ]
VAR jobstart = 'Staff Booking'[Start Date].[Date]
VAR jobend = 'Staff Booking'[End Date].[Date]
VAR bookingtype = 'Staff Booking'[Booking Type ]
RETURN
IF (
CALCULATE (
SUM ( 'Staff Booking'[Loading] ),
FILTER ( 'Staff Booking', 'Staff Booking'[Name ] = staffname ),
FILTER ( 'Staff Booking', 'Staff Booking'[Booking Type ] == "Chargeable" ),
FILTER (
'Staff Booking',
'Staff Booking'[Start Date].[Date] <= jobend
&& jobstart <= 'Staff Booking'[End Date].[Date]
)
) > 100
&& bookingtype = "Chargeable",
"Overbooked",
"Normal"
)
编辑:
要作为计算列执行此操作,您需要查看作业期间的每一天,并查看[Load]
是否超过100
:
loading Status = IF ( [Load] > 100, "Overbooked", "Normal" )
加载状态=
易变的=
添加列(
滤器(
日期,
日期[日期]=预订[开始日期]
),
“日负荷”,计算([Load],ALLEXCEPT(预订,预订[Name]))
)
返回
如果(MAXX(可诱惑,[DayLoad])>100,“过载”,“正常”)
嘿,谢谢你的回复。我尝试这样做的主要目的是在甘特图上显示所有员工的工作时间线。最好将所有作业的加载状态设置在另一列中,因为这可以在不同的位置使用,例如,甘特图条形图颜色可以设置为过载/欠载和正常作业的不同颜色,方法是使用该列作为参考(如果“我的编辑”有帮助)。它仍然使用已定义的[Load]
度量值。我尝试测试此解决方案,但我不知道从哪里获得日期[Date]
或日期
我的表中没有此类列,我应该在切片器中插入哪一列。我是一个新手,正在研究Power Bi,你能上传你正在使用的pbix吗?请忽略之前的评论,你的解决方案工作得很好,将检查边缘情况是否失败谢谢!
loading Status = IF ( [Load] > 100, "Overbooked", "Normal" )
LoadingStatus =
VAR TempTable =
ADDCOLUMNS (
FILTER (
Dates,
Dates[Date] <= Booking[End date] &&
Dates[Date] >= Booking[Start Date]
),
"DayLoad", CALCULATE ( [Load], ALLEXCEPT ( Booking, Booking[Name] ) )
)
RETURN
IF ( MAXX ( TempTable, [DayLoad] ) > 100, "Overloaded", "Nomral" )