Forum Discussion
Help with calculating specific delay time per day
- Anonymous3 years ago
Hi Paradox1023 ,
According to your screenshot, I think you don't need to create a relationship between Calendar Table and Delay Table, due to datetime type column in Delay table and date type column in Calendar.
You can try this code to create a measure.
Total Delay Time due to DelayType 0 (hour) = VAR _CROSSJOIN = FILTER ( GENERATE ( ALLSELECTED('Delay Table') , CALCULATETABLE(VALUES ( 'Calendar'[Date] ),ALLSELECTED('Calendar')) ), 'Delay Table'[DelayType] = 0 && DATEVALUE ( 'Delay Table'[DelayStartTime] ) <= 'Calendar'[Date] && DATEVALUE ( 'Delay Table'[DelayEndTime] ) >= 'Calendar'[Date] ) VAR _AddDuartion = ADDCOLUMNS ( _CROSSJOIN, "Duration", VAR _MIN = MINX ( FILTER ( _CROSSJOIN, AND ( 'Delay Table'[DelayStartTime] = EARLIER ( 'Delay Table'[DelayStartTime] ), 'Delay Table'[DelayEndTime] = EARLIER ( 'Delay Table'[DelayEndTime] ) ) ), [Date] ) VAR _MAX = MAXX ( FILTER ( _CROSSJOIN, AND ( 'Delay Table'[DelayStartTime] = EARLIER ( 'Delay Table'[DelayStartTime] ), 'Delay Table'[DelayEndTime] = EARLIER ( 'Delay Table'[DelayEndTime] ) ) ), [Date] ) RETURN SWITCH ( TRUE (), [Date] = _MIN && [Date] = _MAX, [Duration (hour)], [Date] <> _MIN && [Date] <> _MAX, 24, [Date] = _MIN && [Date] <> _MAX, DATEDIFF ( [DelayStartTime], [Date] + 1, MINUTE ) / 60, [Date] <> _MIN && [Date] = _MAX, DATEDIFF ( [Date], [DelayEndTime], MINUTE ) / 60 ) ) RETURN SUMX(FILTER(_AddDuartion,[Date] = MAX('Calendar'[Date])),[Duration])+0Result is as below.
Best Regards,
Rico ZhouIf this post helps, then please consider Accept it as the solution to help the other members find it more quickly.
Hi Paradox1023
please try
Total Delay Time due to DelayType 0 (hour) =
SUMX (
FILTER (
CROSSJOIN ( ALLSELECTED ( 'Delay Table' ), VALUES ( 'Calendar'[Date] ) ),
'Delay Table'[Delay Type] = 0
&& 'Delay Table'[DelayStartTime] <= 'Calendar'[Date]
&& 'Delay Table'[DelayEndTime] >= 'Calendar'[Date]
),
DATEDIFF (
MAX ( 'Delay Table'[DelayStartTime], 'Calendar'[Date] ),
MIN ( 'Delay Table'[DelayEndTime], 'Calendar'[Date] ),
MINUTE
) / 60
)