A little while ago I wrote about the different outcome of 2 measures, when trying to find a solution for a problem. Back then I didn't know why they had a different outcome. Since I have been attending the SSAS BISM Tabular workshop by Marco and Alberto this week, I couldn't resist to look at the problem again.
Let's start with the 2 measures:
(1)
AVERAGEX(
FILTER(
Organisatie,
Organisatie[Type] = "Woonlocatie"
),
SUM(Productie_OrganisatieGroei[AantalClienten])
)
AVERAGEX(
FILTER(
Organisatie,
Organisatie[Type] = "Woonlocatie"
),
SUM(Productie_OrganisatieGroei[AantalClienten])
)
(2)
SUMX(
Productie_OrganisatieGroei,
CALCULATE(
AVERAGE( Productie_OrganisatieGroei[AantalClienten]),
Organisatie[Type] = "Woonlocatie"
)
)
To understand the relationships between the tables, there is a 1-to-Many relation between Organisatie and Productie_OrganisatieGroei:
Datamodel |
Starting with measure 1, AVERAGEX is an iterator, so it creates a Row context on Productie_OrganisatieGroei. The FILTER on Organisatie however, because it is in a Row context, is not propagated to the many-side. So calculating the SUM of [AantalClienten] doesn't take the filter into account and takes the sum of the whole Organisatie table.
Measure 2 also starts with an iterator (SUMX) which creates a Row context, but then uses CALCULATE inside, which creates a Filter context on that one row. Remember that Filter context does propagate over relationships. Now that we have created a Filter context by using CALCULATE, the filter on Organisatie[Type] does propagate through the relationship and filters the Productie_OrganisatieGroei table. That is why this formula does produce a correct answer on the problem I had.
Once more the pivot table which has measure 1 and 2 in it:
Note: although the project was done with PowerPivot v1, I just imported the xlsx-file in SQL Server Data Tools (Visual Studio / former BIDS) to extract the datamodel for my workbook:
No comments:
Post a Comment
Thanks for taking the time to provide feedback!
Cheers,
Nicky