Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powerbi 查找重叠的日期范围并添加相应的性能指标以衡量效率_Powerbi_Dax_Powerbi Desktop - Fatal编程技术网

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" )