Forum Discussion
Measure Efficiency -- Get distinct values, average per single date, then sum the averages
Hi ryan25r9 ,
Or like this?
Measure =
VAR x =
AVERAGEX(
FILTER(
TLG,
TLG[Date Worked] = SELECTEDVALUE(TLG[Date Worked])
),
TLG[Workday Days]
)
RETURN
ROW(
"Test",
SUMX(
TLG,
x
)
)
Best regards,
Lionel Chen
If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.
- ryan25r96 years agoHelper I
Sorry, this doesn't quite get there either. It doesn't account for there being duplicate TLG[Workday Days] per Date Worked & Employee.
Probably helps to give an example. Starting dataset:
Employee ID Date Worked Workday Days TLP ID 491 01/05/20 0 10 491 01/06/20 0.5 4 491 01/06/20 0.5 941 491 01/07/20 1 331 491 01/08/20 1 596 491 01/08/20 1 2537 11402 01/06/20 1 319 11402 01/06/20 1 782 11402 01/07/20 1 331 11402 01/08/20 1 841 99821 01/05/20 0 10 99821 01/06/20 1 319 99821 01/07/20 1 2537 99821 01/07/20 1 596 99821 01/07/20 1 941 2729 01/05/20 1 331 2729 01/05/20 1 1931 2729 01/06/20 0.5 841 Distinct values of Employee ID, Date Worked, & Workday Days:
Employee ID Date Worked Workday Days 491 01/05/20 0 491 01/06/20 0.5 491 01/07/20 1 491 01/08/20 1 11402 01/06/20 1 11402 01/07/20 1 11402 01/08/20 1 99821 01/05/20 0 99821 01/06/20 1 99821 01/07/20 1 2729 01/05/20 1 2729 01/06/20 0.5 AVERAGE Workday Days by day:
Date Worked Average Workday Days 01/05/20 0.333 01/06/20 0.750 01/07/20 1.000 01/08/20 1.000 Lastly, the SUM of averages, making the expected result of the measure here:
3.083 - mahoneypat6 years agoMicrosoft Employee
Thanks for providing sample data and output. This measure should work for you in a table with Dates on the rows.
NewMeasure =
VAR __summary =
ADDCOLUMNS (
SUMMARIZE ( TLG, TLG[Employee ID], TLG[Date Worked] ),
"AvgHrs", CALCULATE ( AVERAGE ( TLG[Workday Days] ) )
)
RETURN
AVERAGEX ( __summary, [AvgHrs] )If this works for you, please mark it as solution. Kudos are appreciated too. Please let me know if not.
Regards,
Pat
- ryan25r96 years agoHelper I
Greatly appreciate the reply! Unfortunately this measure is in an SSAS tabular model, so I need it to work in all contexts and can't limit to a table with dates on the rows.
- Ashish_Mathur6 years agoSuper User
- ryan25r96 years agoHelper I
Greatly appreciate the Power BI file, thanks so much. This actually returns the correct results, but running on the entire model drops the efficiency from 25 seconds to 171 seconds. The core table (TLG) is 700M rows, so that certainly isn't helping with the context transition. For reference, this is the old code simplified and your recommended code altered to run in DAX Studio:
EVALUATE VAR Old = SUMX( GROUPBY( SUMMARIZE(TLG, TLG[Date Worked], TLG[Employee ID], TLG[Workday Days]) , [Date Worked] , "AvgWorkdays" , AVERAGEX( CURRENTGROUP(), [Workday Days] ) ) , [AvgWorkdays] ) VAR New = SUMX ( VALUES ( 'TLG'[Date Worked] ), AVERAGEX ( SUMMARIZE ( VALUES ( TLG[Employee ID] ), [Employee ID], "AvgWorkdays", CALCULATE(AVERAGE(TLG[Workday Days])) ), [AvgWorkdays] ) ) RETURN ROW("test", New)