The ultimate Fabric, Power BI, SQL, and AI community-led learning event. Save €200 with code FABCOMM.
Get registeredEnhance your career with this limited time 50% discount on Fabric and Power BI exams. Ends September 15. Request your voucher.
I'm struggling with measure totals despite using recommended ways around the problem. I need to total the hours logged across selected staff members and date range.
My data looks like this (some values removed).
My measure is:
StandardHours =
VAR StandardHours =COUNTROWS(DISTINCT('Timesheet Data'[Date]))*7.5
VAR StandardHoursTotal = SUMMARIZE('Timesheet Data','Timesheet Data'[Staff Name],"StddHrs", StandardHours)
RETURN
IF(
HASONEFILTER('Timesheet Data'[Staff Name]),
StandardHours,
SUMX(StandardHoursTotal,[StddHrs])
)
Output is coming out at:
Staff Name | Standard Hours |
A | 37.5 |
B | 37.5 |
C | 22.5 |
D | 30.0 |
Total | 150 |
The total should be 127.5. The individual staff numbers are correct.
It seems DAX is just adding 37.5 (i.e. standard working week in hours) for each member of staff, regardless of how many actual days are logged in the fact table. I'm counting the rows using DISTINCT to find the number of days logged in that week.
The table is filtered on a slicer to "last 1 weeks (calendar)" but it doesn't make any difference if I remove the slicer- the total is still incorrect.
Any help much appreciated. Where am I going wrong?
@catnapwat - I usually do this as 2 separate measures as here: This looks like a measure totals problem. Very common. See my post about it here: https://community.powerbi.com/t5/DAX-Commands-and-Tips/Dealing-with-Measure-Totals/td-p/63376
Also, this Quick Measure, Measure Totals, The Final Word should get you what you need:
https://community.powerbi.com/t5/Quick-Measures-Gallery/Measure-Totals-The-Final-Word/m-p/547907
@Greg_DecklerThanks- I actually have both of your useful guides open at the moment, but I still couldn't figure it out.
A user on Reddit has cracked it though- and noted that the variable didn't have any filtering applied as the summary table was being built. I had assumed the filtering was based on where the variable was used rather than where it is defined, which was incorrect. So they suggested I recalculate the variable inside the Summarize which filters it correctly:
StandardHours = VAR StandardHours =COUNTROWS(DISTINCT('Timesheet Data'[Date]))*7.5 VAR StandardHoursTotal = SUMMARIZE('Timesheet Data','Timesheet Data'[Staff Name],"StddHrs", SUMX( VALUES('Timesheet Data'[Staff Name]), COUNTROWS(DISTINCT('Timesheet Data'[Date]))*7.5) ) RETURN IF( HASONEFILTER('Timesheet Data'[Staff Name]), StandardHours, SUMX(StandardHoursTotal,[StddHrs]) )
Now I just have a bunch more measures to correct...
User | Count |
---|---|
15 | |
12 | |
8 | |
7 | |
7 |
User | Count |
---|---|
24 | |
20 | |
12 | |
10 | |
7 |