Register now to learn Fabric in free live sessions led by the best Microsoft experts. From Apr 16 to May 9, in English and Spanish.
Ok, here is the problem I am faced with.
I have a data set that records everytime a piece of equipment is removed from service for being unserviceable, and records the time it went "DOWN" (removed) and the time it went back "UP" (returned to service).
What I want to be able to do is determine based on this data overall serviceability rates for all the equipment in a given period of time, and I can't seem to wrap my head around the problem to get what I need.
I know the total pieces of equipment available, but it might not be consistent on any given day. (New equipment added, or old equipment removed/obsoleted etc.)
The Up/Down records look like this essentially:
EQUIP_ID, EVENT_ID, DOWN_START (Date/Time field), DOWN_STOP (Date/Time field), DOWN_DURATION (minutes)
The DOWN_DURATION could sometimes span multiple days. Also, the quipment is expected to be UP more than it's DOWN, and it's certainly not down every day.
Basically, what I want to do is use this data to create a table like this:
DATE, EQUIP_ID, SERVICEABLE_TIME
where DATE is a given calendar date covering every date in a date range that could be filtered with a slicer, EQUIP_ID is the unique ID of the piece of equipment, and SERVICEABLE_TIME is the number of minutes the equipment was available and serviceable on that day.
So, I guess my issue here is where to even start with this. Me and DAX don't get along very well, so I am really up against a wall on this one.
My other thought, based on everyone's expertise here, is this even something that can be handled with DAX? Or should I move this transformation further back in my stack and do it serverside in Javascript before it gets sent out over the API to PowerBI?
Solved! Go to Solution.
Hi @elietech .
The error was related with the calculation when you have a single day, I already fixed it by changing the formula to:
measure =
VAR Date_Selection =
MAX ( 'Dates'[Date] )
VAR Date_Selection_Next = Date_Selection + 1
VAR temp_table =
FILTER (
ADDCOLUMNS (
UpDown;
"Start";
DATE ( YEAR ( UpDown[DOWN_START] ); MONTH ( UpDown[DOWN_START] ); DAY ( UpDown[DOWN_START] ) );
"End";
DATE ( YEAR ( UpDown[DOWN_STOP] ); MONTH ( UpDown[DOWN_STOP] ); DAY ( UpDown[DOWN_STOP] ) )
);
[Start] <= Date_Selection
&& [End] >= Date_Selection
)
VAR DateStart =
IF (
MINX ( temp_table; UpDown[DOWN_START] ) <= Date_Selection;
Date_Selection;
MINX ( temp_table; UpDown[DOWN_START] )
)
VAR DateEnd =
IF (
MAXX ( temp_table; UpDown[DOWN_STOP] ) >= Date_Selection_Next;
Date_Selection_Next;
MAXX ( temp_table; UpDown[DOWN_STOP] )
)
VAR Same_day_selection =
IF (
MAXX ( temp_table; [Start] ) = MINX ( temp_table; [End] )
&& MINX ( temp_table; UpDown[DOWN_START] ) >= Date_Selection;
1
)
RETURN
IF (
DateEnd = BLANK ();
1440;
IF (
Same_day_selection = BLANK ();
DATEDIFF ( Date_Selection; DateStart; MINUTE )
+ DATEDIFF ( DateEnd; Date_Selection_Next; MINUTE );
1440
- CALCULATE (
SUM ( UpDown[DOWN_DURATION] );
FILTER ( temp_table; UpDown[DOWN_START] = DateStart )
)
)
)
Check result below and attach.
Regards
Miguel Félix
Proud to be a Super User!
Check out my blog: Power BI em PortuguêsCovering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City
Check out the April 2024 Power BI update to learn about new features.
User | Count |
---|---|
115 | |
99 | |
86 | |
70 | |
62 |
User | Count |
---|---|
151 | |
120 | |
103 | |
87 | |
68 |