Forum Discussion
vickyd
8 years agoHelper V
DAX : Convert Weekly data to daily data
I have what I believe is a fairly common scenario related to timesheets that I've been breaking my head on. Scenario: Each employee is available for X numbers of hours on a weekly basis. Typicall...
- Anonymous8 years ago
HI vickyd,
You can refer to below sample to generate the analysis daily work hour table.
1. Merge targe tables.
Merged = UNION(Table1,Table2)
2. Generate the calendar table with id and target.
Result = VAR startDate = MINX ( Merged, [End Date] ) + ( 1 - WEEKDAY ( MINX ( Merged, [End Date] ), 1 ) ) VAR endDate = MAXX ( Merged, [End Date] ) RETURN ADDCOLUMNS ( CROSSJOIN ( CALENDAR ( startDate, endDate ), DISTINCT ( SELECTCOLUMNS ( Merged, "ID", [ID] ) ) ), "Target", LOOKUPVALUE ( Merged[Work Hour], Merged[ID], [ID], Merged[End Date], [Date] + ( 7 - WEEKDAY ( [Date], 1 ) ) ) + 0, "Day of Week", FORMAT ( [Date], "ddd" ), "Month", FORMAT ( [Date], "mmm" ), "Work Hour", IF ( WEEKDAY ( [Date], 1 ) <> 1 && WEEKDAY ( [Date], 1 ) <> 7, 8, 0 ) )3. Add calculated column to calculate the available work hour.
Available Hours = VAR isWorkDay = IF ( WEEKDAY ( [Date], 1 ) <> 1 && WEEKDAY ( [Date], 1 ) <> 7, TRUE (), FALSE () ) VAR rolling = SUMX ( FILTER ( ALL ( Result ), [ID] = EARLIER ( [ID] ) && WEEKNUM ( [Date], 1 ) = WEEKNUM ( EARLIER ( Result[Date] ), 1 ) && [Date] < EARLIER ( [Date] ) ), [Work Hour] ) RETURN IF ( [Target] = 0, 0, IF ( rolling < [Target] && rolling + 8 > [Target], [Target] - rolling, IF ( rolling < [Target] && isWorkDay, 8 ) + 0 ) )Regards,
Xiaoxin Sheng
Anonymous
8 years agoNot applicable
HI vickyd,
You can refer to below sample to generate the analysis daily work hour table.
1. Merge targe tables.
Merged = UNION(Table1,Table2)
2. Generate the calendar table with id and target.
Result =
VAR startDate =
MINX ( Merged, [End Date] )
+ ( 1 - WEEKDAY ( MINX ( Merged, [End Date] ), 1 ) )
VAR endDate =
MAXX ( Merged, [End Date] )
RETURN
ADDCOLUMNS (
CROSSJOIN (
CALENDAR ( startDate, endDate ),
DISTINCT ( SELECTCOLUMNS ( Merged, "ID", [ID] ) )
),
"Target", LOOKUPVALUE (
Merged[Work Hour],
Merged[ID], [ID],
Merged[End Date], [Date]
+ ( 7 - WEEKDAY ( [Date], 1 ) )
)
+ 0,
"Day of Week", FORMAT ( [Date], "ddd" ),
"Month", FORMAT ( [Date], "mmm" ),
"Work Hour", IF ( WEEKDAY ( [Date], 1 ) <> 1 && WEEKDAY ( [Date], 1 ) <> 7, 8, 0 )
)
3. Add calculated column to calculate the available work hour.
Available Hours =
VAR isWorkDay =
IF (
WEEKDAY ( [Date], 1 ) <> 1
&& WEEKDAY ( [Date], 1 ) <> 7,
TRUE (),
FALSE ()
)
VAR rolling =
SUMX (
FILTER (
ALL ( Result ),
[ID] = EARLIER ( [ID] )
&& WEEKNUM ( [Date], 1 ) = WEEKNUM ( EARLIER ( Result[Date] ), 1 )
&& [Date] < EARLIER ( [Date] )
),
[Work Hour]
)
RETURN
IF (
[Target] = 0,
0,
IF (
rolling < [Target]
&& rolling + 8
> [Target],
[Target] - rolling,
IF ( rolling < [Target] && isWorkDay, 8 )
+ 0
)
)
Regards,
Xiaoxin Sheng