Hi,
Dealing with a scenario where we have vehicles and their Operational Status, which is either Normal Operation or Not Operational.
Data is snapshotted TWICE every day so we have a running operational status. A Snapshot is taken at 08:00am and 16:00pm. For this calculation I only want to focus on the snapshot taken at 08:00am.
What I need to do is to classify the number of vehicles (assets) which are Not Operational and split this into Short Term and Long Term groups.
To be classed as Short Term Not Operational they need to be in a status of Not Operational at this current time for 9 days or Less.
To be Classed as Long Term Not Operational they need to be in a Status of Not Operational at this current time for 10 days or more.
Example data for Asset 1 - Asset has been Not Operational for 13 days so is counted as Long Term Not Operational as per below
Example data for Asset 2 - Asset has been Not Operational for 2 days so is counted as Short Term Not Operational
Example data for Asset 4 - Asset has been Not Operational for 18 days so is counted as Long Term Not Operational as per below
I had this solved in a previous thread but the requirements have changed slightly with the removal in the data of an IS CURRENT flag and this has been replaced with the Snapshot time (08:00am or 16:00).
I have tried to amend the DAX myself but I can’t seem to get it working properly. Any help, as always gratefully received. Link to previous thread at bottom of this post along with PBIX file.
Not Operational Assets - Long Term =
VAR _vTable =
ADDCOLUMNS(
FILTER(
SUMMARIZE(
Assets ,
Assets[Date] ,
Assets[Asset ID] ,
Assets[Asset Status] ,
Assets[Snapshot Time] ) ,
( Assets[Asset Status] = "Normal Operation" &&
Assets[Snapshot Time] = TIME( 8, 0, 0 ) ) ||
( Assets[Asset Status] = "Not Operational" &&
Assets[Date] >= MAX( Assets[Date] ) - 10 &&
Assets[Date] <= MAX( Assets[Date] ) ) ) ,
"@Count_Rows" ,
CALCULATE(
COUNTROWS(
FILTER(
SUMMARIZE(
Assets ,
Assets[Date] ,
Assets[Asset ID] ,
Assets[Asset Status] ,
Assets[Snapshot Time] ) ,
( Assets[Asset Status] = "Normal Operation" &&
Assets[Snapshot Time] = TIME( 8, 0, 0 ) ) ||
( Assets[Asset Status] = "Not Operational" &&
Assets[Date] >= MAX( Assets[Date] ) - 10 &&
Assets[Date] <= MAX( Assets[Date] ) ) ) ) ,
ALLEXCEPT( Assets , Assets[Asset ID] ) ) ,
"@Days_Diff" ,
DATEDIFF(
MINX(
CALCULATETABLE(
FILTER(
SUMMARIZE(
Assets ,
Assets[Date] ,
Assets[Asset ID] ,
Assets[Asset Status] ,
Assets[Snapshot Time] ) ,
( Assets[Asset Status] = "Normal Operation" &&
Assets[Snapshot Time] = TIME( 8, 0, 0 ) ) ||
( Assets[Asset Status] = "Not Operational" &&
Assets[Date] >= MAX( Assets[Date] ) - 10 &&
Assets[Date] <= MAX( Assets[Date] ) ) ) ,
ALLEXCEPT( Assets , Assets[Asset ID] ) ) ,
Assets[Date] ) ,
MAXX(
CALCULATETABLE(
FILTER(
SUMMARIZE(
Assets ,
Assets[Date] ,
Assets[Asset ID] ,
Assets[Asset Status] ,
Assets[Snapshot Time] ) ,
( Assets[Asset Status] = "Normal Operation" &&
Assets[Snapshot Time] = TIME( 8, 0, 0 ) ) ||
( Assets[Asset Status] = "Not Operational" &&
Assets[Date] >= MAX( Assets[Date] ) - 10 &&
Assets[Date] <= MAX( Assets[Date] ) ) ) ,
ALLEXCEPT( Assets , Assets[Asset ID] ) ) ,
Assets[Date] ) ,
DAY ) + 1 )
VAR _fTable =
SELECTCOLUMNS(
FILTER(
ADDCOLUMNS(
_vTable ,
"@Status_Define" ,
SWITCH( TRUE() ,
[Asset Status] = "Not Operational" && [@Count_Rows] = [@Days_Diff] && [@Count_Rows] <= 9 , "Short Term Not Operational" ,
[Asset Status] = "Not Operational" && [@Count_Rows] = [@Days_Diff] && [@Count_Rows] >= 10 , "Long Term Not Operational" ,
[Asset Status] = "Not Operational" && [@Count_Rows] <> [@Days_Diff] && [@Count_Rows] <= 9 , "Short Term Not Operational" ,
[Asset Status] = "Normal Operation" && [@Count_Rows] = [@Days_Diff] && [@Count_Rows] =1 , "Normal Operation" ) ) ,
Assets[Date] = MAX( Assets[Date] ) &&
[@Status_Define] = "Long Term Not Operational" ) ,
"@Status_Date" , Assets[Date] ,
"@Asset_ID" , Assets[Asset ID] ,
"@Original_Status" , Assets[Asset Status] ,
"@Is_Current_Flag" , Assets[Snapshot Time] ,
"@Status_Define" , [@Status_Define] )
VAR _Results =
COUNTROWS( _fTable )
RETURN
_Results + 0
Not Operational Assets - Short Term =
VAR _vTable =
ADDCOLUMNS(
FILTER(
SUMMARIZE(
Assets ,
Assets[Date] ,
Assets[Asset ID] ,
Assets[Asset Status] ,
Assets[Snapshot Time] ) ,
( Assets[Asset Status] = "Operational" &&
Assets[Snapshot Time] = TIME (8, 0, 0 )) ||
( Assets[Asset Status] = "Not Operational" &&
Assets[Date] >= MAX( Assets[Date] ) - 10 &&
Assets[Date] <= MAX( Assets[Date] ) ) ) ,
"@Count_Rows" ,
CALCULATE(
COUNTROWS(
FILTER(
SUMMARIZE(
Assets ,
Assets[Date] ,
Assets[Asset ID] ,
Assets[Asset Status] ,
Assets[Snapshot Time] ) ,
( Assets[Asset Status] = "Operational" &&
Assets[Snapshot Time] = TIME (8, 0, 0 )) ||
( Assets[Asset Status] = "Not Operational" &&
Assets[Date] >= MAX( Assets[Date] ) - 10 &&
Assets[Date] <= MAX( Assets[Date] ) ) ) ) ,
ALLEXCEPT( Assets , Assets[Asset ID] ) ) ,
"@Days_Diff" ,
DATEDIFF(
MINX(
CALCULATETABLE(
FILTER(
SUMMARIZE(
Assets ,
Assets[Date] ,
Assets[Asset ID] ,
Assets[Asset Status] ,
Assets[Snapshot Time] ) ,
( Assets[Asset Status] = "Operational" &&
Assets[Snapshot Time] = TIME (8, 0, 0 )) ||
( Assets[Asset Status] = "Not Operational" &&
Assets[Date] >= MAX( Assets[Date] ) - 10 &&
Assets[Date] <= MAX( Assets[Date] ) ) ) ,
ALLEXCEPT( Assets , Assets[Asset ID] ) ) ,
Assets[Date] ) ,
MAXX(
CALCULATETABLE(
FILTER(
SUMMARIZE(
Assets ,
Assets[Date] ,
Assets[Asset ID] ,
Assets[Asset Status] ,
Assets[Snapshot Time] ) ,
( Assets[Asset Status] = "Operational" &&
Assets[Snapshot Time] = TIME (8, 0, 0 )) ||
( Assets[Asset Status] = "Not Operational" &&
Assets[Date] >= MAX( Assets[Date] ) - 10 &&
Assets[Date] <= MAX( Assets[Date] ) ) ) ,
ALLEXCEPT( Assets , Assets[Asset ID] ) ) ,
Assets[Date] ) ,
DAY ) + 1 )
VAR _fTable =
SELECTCOLUMNS(
FILTER(
ADDCOLUMNS(
_vTable ,
"@Status_Define" ,
SWITCH( TRUE() ,
[Asset Status] = "Not Operational" && [@Count_Rows] = [@Days_Diff] && [@Count_Rows] <= 9 , "Short Term Not Operational" ,
[Asset Status] = "Not Operational" && [@Count_Rows] = [@Days_Diff] && [@Count_Rows] >= 10 , "Long Term Not Operational" ,
[Asset Status] = "Not Operational" && [@Count_Rows] <> [@Days_Diff] && [@Count_Rows] <= 9 , "Short Term Not Operational" ,
[Asset Status] = "Operational" && [@Count_Rows] = [@Days_Diff] && [@Count_Rows] =1 , "Operational" ) ) ,
Assets[Date] = MAX( Assets[Date] ) &&
[@Status_Define] = "Short Term Not Operational" ) ,
"@Status_Date" , Assets[Date] ,
"@Asset_ID" , Assets[Asset ID] ,
"@Original_Status" , Assets[Asset Status] ,
"@Is_Current_Flag" , Assets[Snapshot Time] ,
"@Status_Define" , [@Status_Define] )
VAR _Results =
COUNTROWS( _fTable )
RETURN
_Results + 0
Count of Consecutive Values - DAX / DAX Calculations - Enterprise DNA Forum