+----------+------------------+-------+---------+-------------+------------+
| 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 |
+----------+------------------+-------+---------+-------------+------------+
Для каждой строки я пытаюсь определить, перекрывается ли диапазон дат работы с другими заданиями. Если есть перекрытие, я хочу суммировать сумму загрузки для всех перекрывающихся заданий.
Это то, что я пробовал, создал новый столбец в таблице:
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"
)
Однако это код пропускается в данном конкретном случае:
Темно-синий означает, что задание перегружено (> 100) в соответствии с приведенной выше формулой DAX, а светло-синий означает, что задание выполнено. Нормальный (100).
Однако темно-синий (первый и второй) здесь не верен, потому что они никогда не получают больше 100 в любой период времени. Причина, по которой они помечены как перегруженные, заключается в том, что формула Dax объединяет загрузку для всех различных периодов времени, которые перекрываются.
например, задание 12 = задание 12 + задание 10 + задание 1 + задание 20 + задание 20 = 120
, что неверно, поскольку задание 12 всегда равно 100 в любой период времени
например, задание 12 = задание 12 + задание 10 + задание 1 = 100
и задание 12 = задание 12 + Задание 10 + Задание 20 = 100
1) Есть ли способ настроить формулу DAX или любой другой метод, чтобы убедиться, что она исправляет вышеприведенное, так что задание 12 не следует считать перебронированным в приведенном выше сценарии
2) В качестве побочного эффекта исправления приведенного выше сценария возникает случай, когда
, если Job 20
загрузка установлена на 50 ,
, тогда сумма загрузки задания 12 будет отображаться в двух разных фазах:
фаза 1) работа 12 = работа 12 + работа 10 + работа 1 = 100 (обычная)
фаза 2) Работа 12 = Работа 12 (30) + Работа 10 (50) + Работа 20 (50) = 130 (перебронировано)
В этом случае формула DAX s следует взять наивысшую фазу и поставить в графе «Перебронировано»