Forum Discussion
Avoid skipping empty rows when SUMMARIZE table with zero records in the source
Hello,
using DAX I am trying to execute following sequece:
- FILTER the records from table BusinessCases according to the conditions
- SUMMARIZE the filtered records by weeks (there is a relation between SalesCases[Date] and Calendar[Date], Calendar[Week number])
- Calculate AVERAGE of the SUMMARIZED weekly sums
I have following DAX Measure:
Average weekly business won volume =
AVERAGEX(
SUMMARIZE(
FILTER(
BusinessCases,
BusinessCases[Status] = "Won" &&
BusinessCases[Date type] = "Closed"
),
Calendar[Week number],
"SummarizedResult", SUMX(BusinessCases, BusinessCases[Ammount])
),
[SummarizedResult]
)
The measure works fine when there are records in the BusinessCases table meeting the filtering conditions.
But when there are no records meeting the conditions, the result of the SUMMARIZE function does not contain the specific week number at all which distorts the result of the AVERAGEX function then.
Example: assuming in week number 2 there are no records in BusinessCases table meeting conditions
- current behaviour:
Week number SummarizedResult 1 6000 3 4000 4 2000 Weekly average 4000
- desired behaviour:
Week number SummarizedResult 1 6000 2 0 3 4000 4 2000 Weekly average 3000
Could you please help me to adjust the DAX formula above to change the behaviour that instead of skipping the weeks with empty records input, the 0 value for the specific week is returned to enable proper AVERAGE calculation?
Thank you
Jakub Albrecht
I would start with a full set of weeks and then calculate amount along these lines:
Average weekly business won volume = VAR _FullWeeks_ = VALUES ( Calendar[Week number] ) VAR _Avg = AVERAGEX ( _FullWeeks_, CALCULATE ( SUM ( BusinessCases[Ammount] ), BusinessCases[Status] = "Won", BusinessCases[Date type] = "Closed" ) + 0 ) RETURN _AvgYou might need something more sophisticated for _FullWeeks_ as I'm not sure how the min and max week numbers are determined in your scenario.
6 Replies
- tamerj1
Community Champion
please try
Average weekly business won volume =
AVERAGEX (
SUMMARIZE (
FILTER (
BusinessCases,
BusinessCases[Status] = "Won"
&& BusinessCases[Date type] = "Closed"
),
Calendar[Week number],
"SummarizedResult", SUMX ( BusinessCases, BusinessCases[Ammount] )
),
[SummarizedResult] + 0
)- jakubalbrecht
Helper I
Hi tamerj1 ,
thank you for your suggestion. These were my first ideas of the solution too, but unfortunately this does not work 😞
Suggested solution adds 0 to every single row generated by the SUMMARIZE function, but unfortunately does not force SUMMARIZE function to avoid ommiting rows for weeks with no records.
When I use my example, the suggested solution results in following - week number 2 still missing:
Week number SummarizedResult 1 6000 + 0 3 4000 + 0 4 2000 + 0 Weekly average 4000 - AlexisOlson
Super User
I would start with a full set of weeks and then calculate amount along these lines:
Average weekly business won volume = VAR _FullWeeks_ = VALUES ( Calendar[Week number] ) VAR _Avg = AVERAGEX ( _FullWeeks_, CALCULATE ( SUM ( BusinessCases[Ammount] ), BusinessCases[Status] = "Won", BusinessCases[Date type] = "Closed" ) + 0 ) RETURN _AvgYou might need something more sophisticated for _FullWeeks_ as I'm not sure how the min and max week numbers are determined in your scenario.