Forum Discussion
MAT for custom time format
- Anonymous7 years ago
No worries, there is always a way!
Back in our table, I added a "Product" column with "Apple, Banana, Pear". Now, what we need to do is modify that "Index" column not to just look at the Year4WkID, but also the Product. Our new code:
Index = Var CurrentYrWk= MAT[Year4wkID] VAR CurrentProduct= MAT[Product] RETURN CALCULATE( COUNTROWS( FILTER( ALL ( 'MAT'), MAT[Year4wkID] <= CurrentYrWk && MAT[Product] = CurrentProduct ) ) )This will give us the count of rows of all the rows that that are less than or equal to the current row's Year4WkId AND where the currrent row's Product is the same:
Need to modify the MAT code as well:
MAT =
IF( MAX( MAT[Index]) >=12,
AVERAGEX(
FILTER(
ALLEXCEPT(MAT,MAT[Product]),
MAT[Index] <= MAX(MAT[Index])
&& MAT[Index] >= MAX(MAT[Index])-11
),
[MAT Sales]
),
"Not Enough Data"
)- Got rid of the countrows to check for enough data, have that # available via the Idex column. I used max in order to make the grand totals work as well
- Want to use ALLEXCEPT instead of ALL. This tells dax to ignore all the filteres except the one placed on product
I think that is what may have had in mind?
Hi Nick_M, Thanks for your intention to help and to the solution proposed. While trying to copy it I have come across a problem with the 2nd formula :) Could you look at it please?
https://drive.google.com/open?id=1NIF36ICubEAaAJsMDPcqPiJ9VANudeBp
https://drive.google.com/open?id=1et5LqxwHL3f0Hqxap62Nr9VU7KcoZu5E
https://drive.google.com/open?id=1BlBol12o9YwsHQV7wTQ0NsTCRNTPrGaM
Looks like you are trying to use it as a Measure, it needs to be a Calculate Column in your table. Calculated Columns have row context, which is why you do not get the error, while measures need to have row context invoked by the "X" functions. So when you put that 2nd formula into a mesure DAX doesn't "know" what row(s) it should be looking at and errors out
- lingvistt7 years agoFrequent Visitor
Nick_M, thanks a lot :) MAT works perfectly!
Do you have any ideas about the second part of the question about MAT growth:
I have 2 tasks based on it:
- I would like to make 'MAT' measure, which will calculate moving averages based on this data
(e.g. MAT for 2018'7 is equal to 2017'8+2017'9+2017'10+...+2018'6+2018'7).
- To calculate 'MAT growth'
(e.g. 'MAT growth' for 2018'7 is equal to 'MAT' for 2018'7 divided by 'MAT' for 2017'7)
- lingvistt7 years agoFrequent Visitor
Nick_M, I was a bit in a hurry with positive conslutions :smileysad: The thing is that the solution you propose works only for the cases when we have one only one row for year time frame (e.g. 2017 1 - only in one row).
When I try to apply your method to the dataset where all the data is recorded three times or more, it gives unclear results.
Example of the table:
(Year) (Period) (Sales Value) (Product)
2016 1 100.0 Apple
2016 2 200.0 Apple
...
...
...
2016 1 50.0 Orange
...
...
2016 1 30.0 Tomato
The result:
https://drive.google.com/open?id=1mkt5E-dceubSVMXmXCQyx7Lsa-RkESrr
Dataset example:
https://drive.google.com/open?id=1wzLIzXFyzWtDozLXGRi6kEPNlT9wB5nY
- Anonymous7 years agoNot applicable
No worries, there is always a way!
Back in our table, I added a "Product" column with "Apple, Banana, Pear". Now, what we need to do is modify that "Index" column not to just look at the Year4WkID, but also the Product. Our new code:
Index = Var CurrentYrWk= MAT[Year4wkID] VAR CurrentProduct= MAT[Product] RETURN CALCULATE( COUNTROWS( FILTER( ALL ( 'MAT'), MAT[Year4wkID] <= CurrentYrWk && MAT[Product] = CurrentProduct ) ) )This will give us the count of rows of all the rows that that are less than or equal to the current row's Year4WkId AND where the currrent row's Product is the same:
Need to modify the MAT code as well:
MAT =
IF( MAX( MAT[Index]) >=12,
AVERAGEX(
FILTER(
ALLEXCEPT(MAT,MAT[Product]),
MAT[Index] <= MAX(MAT[Index])
&& MAT[Index] >= MAX(MAT[Index])-11
),
[MAT Sales]
),
"Not Enough Data"
)- Got rid of the countrows to check for enough data, have that # available via the Idex column. I used max in order to make the grand totals work as well
- Want to use ALLEXCEPT instead of ALL. This tells dax to ignore all the filteres except the one placed on product
I think that is what may have had in mind?