Register now to learn Fabric in free live sessions led by the best Microsoft experts. From Apr 16 to May 9, in English and Spanish.
Hi all
I am trying to get the breakdown of a total calculated column when I drill down by the type of a certain product and country.
The concept is the following with an example:
I have a product, and this one has 2 types. Type ABC540 was active from 1/1/2017 to 5/14/2019.
And for the same product: type ABC14 became active on 5/15/2019.
The current calculated column called " Part 3 totals" that I have calcualtes the total amount of part 3 for the combination product + country
However the problem is that it wont breakdown the totals for type ABC540 and for type ABC14
Eventhough the total is correct, the breakdown is not. Since the breakdown will show me the exact same values:
The solution is attached in the excel:
ABC14 | 844.8 |
ABC540 | 0 |
The calculated column dax is:
Part 3 totals =
var _date = Query1[[Day 445]]]
var m = Query1[[Country]]]
var n = Query1[[L1.3 - Bev Product]]]
return
(CALCULATE(
SUM('Parts'[Value]),
'Parts',
'Parts'[Country] = m ,
'Parts'[Beverage Product] = n ,
_date>=Parts[Validity Start Date],
_date<=Parts[Validity End Date],
Parts[Attribute]="Part 3"
)*Query1[AC]*5.678*0.01)/1000
/CALCULATE(
COUNTROWS('Parts'),
'Parts',
'Parts'[Country] = m ,
'Parts'[Beverage Product] = n ,
_date>=Parts[Validity Start Date],
_date<=Parts[Validity End Date],
Parts[Attribute]="Part 3"
)
The above dax, calcualtes for each date of the year the total amount for part 3 with its respective type (left table of the pbix).
Here you will see how it calculates the total for each date and its respective type depending on the date:
I attach the pbix and excel with the solution.
https://1drv.ms/u/s!ApgeWwGTKtFdhlKr3D4HOrE-w1D-?e=W6R7pc
Thanks!
Solved! Go to Solution.
I don't think I'd try concatenating the dates in. I'm assuming that Type is a further breakdown of a product. So I would create a table with a distinct list of country, product and type and link that to Query1. Because you don't appear to have any surrogate keys I think the only way to do this is by concatenating the 3 columns.
See the attached file for one possible approach
Hi @o59393 ,
We can try to use the following measure to meet your requirement:
Part 3 value_2 =
SUMX(GROUPBY('Parts2','Parts2'[Beverage Product],'Parts2'[Type]),CALCULATE(MAX('Parts'[Value]),FILTER('Parts','Parts'[Attribute] = "Part 3" && 'Parts'[Type] ='Parts2'[Type])))
Best regards,
So there are two big problems here.
The first is your relationships. If you look at the arrows on the relationships to the Parts table all the arrows are pointing at Parts, this means that Date, Master and Country all filter the Parts table, but there are no relationships from Parts that are filtering any other tables. So the Type column cannot filter anything in the Query1 table. One possible solution would be to remove the existing relationships to the Parts table and create a relationship between Parts --> Query1.
However this leads us to the second issue. There does not appear to be any type information in Query1 so there is no way to split "Part 3 totals" by type.
So you will need to add type information to Query1 and somehow fix relate Parts directly to Query1 to get the breakdown you desire.
Hi @d_gosbell
Apprecite your help. I did the following.
For problem 1 I re-defined the relationship model like this:
Is this what you meant?
For the problem 2 you mentioned, I had an idea. Create a concatenation for both tables consisting of Country+Beverage Product+Date
Please see the excel attached. Tab Query1 column N, contains a vlookup function. In green cells you will see the rows with type ABC540 and starting in row 121, the type ABC14 starts at 2019/5/15, so the concatenation seems to work.
But, i have a problem. When I create the concatenation for table Query, the model says it does not have enough memory:
What do you think of solution 1 relationships and the solution 2 concatenation? Any idea on how to fix this memory issue or can you try on your end to see if you get the same message or another altenative instead of the concat + vlookup?
I attach updated pbix and excel with concatenations.
https://1drv.ms/u/s!ApgeWwGTKtFdhlbVEKdlglWANSHl?e=IqFEm0
Thanks a lot!
I don't think I'd try concatenating the dates in. I'm assuming that Type is a further breakdown of a product. So I would create a table with a distinct list of country, product and type and link that to Query1. Because you don't appear to have any surrogate keys I think the only way to do this is by concatenating the 3 columns.
See the attached file for one possible approach
WOW @d_gosbell
Amazing, this is another level. I appreciate so much your help.
There is just one issue, the column "Part 3 value" is not showing the actual value for each Type of the product, it's duplicating:
The real values are:
Beverage Product | Type | Validity Start Date | Part 3 |
Fioravanti Strawberry | ABC14 | 5/15/2019 | 4 |
Fioravanti Strawberry | ABC540 | 1/1/2017 | 0 |
The formula I had is:
Part 3 value = CALCULATE( MAX(Parts[Value]), Parts[Attribute] IN {"Part 3"} )
How can I get them distinguished?
Thanks a million.
So this is really starting to feel like we are putting workarounds on top of other workarounds. Maybe getting rid of the date column from the Parts table and only have distinct rows for country, product, type, start date and end date would help, but I'm not sure what to do with the attribute column, if you are only interested in "Part 3" then creating a true/false column to indicate if that row has a Part 3 would work.
But without altering the structure - if you created a PartType concatenation column in the Parts table that returns the same values as this column in Query1 then you could create a measure like the following which I think might work:
Part 3 value =
SUMX(Query1,
var _partType = Query1[PartType]
var _date = Query1[[Day 445]]]
var _values = Filter(Parts,
Parts[PartType] = _partType
&& Parts[Validity Start Date] <= _date
&& Parts[Validity End Date] >= _date
&& Parts[Attribute] = "Part 3")
return MAXX(_values, Parts[Value])
)
Hi @d_gosbell
Hope you're doing well. I tried your solution as seen on my previous post but didnt get the values 😕
Can you please advice how to get it right either with your first suggestion of removing the dates from Parts table or with the dax?
Thanks!
Hi @o59393 ,
We can try to use the following measure to meet your requirement:
Part 3 value_2 =
SUMX(GROUPBY('Parts2','Parts2'[Beverage Product],'Parts2'[Type]),CALCULATE(MAX('Parts'[Value]),FILTER('Parts','Parts'[Attribute] = "Part 3" && 'Parts'[Type] ='Parts2'[Type])))
Best regards,
hi @d_gosbell
I removed the column date and year from the model in parts table and didnt affect any other metrics. So I think it would be ok not having them since they seem not to add any value and if the dax gets simpler the better. You are the expert.
The column attibute consists of different materials for the products.
So for each part 1, 2 and 3 eventually I will need to have the value per each type.
Example of the product we've been seeing;
Beverage Product | Type | Validity Start Date | Validity End Date | Part 1 | Part 2 | Part 3 |
Fioravanti Strawberry | ABC14 | 5/15/2019 | 1.97 | 4 | 4 | |
Fioravanti Strawberry | ABC540 | 1/1/2017 | 5/14/2019 | 0.069 | 1 | 0 |
So, by removing the column date and year how would it be the dax to get the values for part 3 in each type?
On the other hand I tested your above dax and got an error:
I added a column called PartsType for the table Parts and didnt get the 4 and 0 values for each type:
Once again thank you for your support!
Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City
Check out the April 2024 Power BI update to learn about new features.
User | Count |
---|---|
113 | |
99 | |
82 | |
70 | |
60 |
User | Count |
---|---|
149 | |
114 | |
107 | |
89 | |
67 |