Hi there,
the following Problem:
in a cube, there is a large Dimension, containing Projects (~1.000.000 Elements). Now, I want to built a Report via activeform, where the user can select his Region and gets all his Projects. I'm trying to do this via mdx:
{TM1FILTERBYPATTERN( {TM1SUBSETALL( [dimName] )}, "PD*_C")}
The Performance is pretty slow, I think due to the large Dimension.
Do you have any ideas
- are there differences in Performance between different MDX-functions?
e.g. could "[dimname].[topelement].children" be faster?
etc?
Regards and thanks
Mark
ActiveForm: Performance MDX
-
- MVP
- Posts: 3114
- Joined: Mon Dec 29, 2008 6:26 pm
- OLAP Product: TM1, Jedox
- Version: PAL 2.0.9.18
- Excel Version: Microsoft 365
- Location: Brussels, Belgium
- Contact:
Re: ActiveForm: Performance MDX
Hello Mark,
Don't use dynamic subsets on such dimensions.
Use TI to populate a subset in a static way, either at the push of the button, either after updating the dimension.
Don't use dynamic subsets on such dimensions.
Use TI to populate a subset in a static way, either at the push of the button, either after updating the dimension.
Best regards,
Wim Gielis
IBM Champion 2024
Excel Most Valuable Professional, 2011-2014
https://www.wimgielis.com ==> 121 TM1 articles and a lot of custom code
Newest blog article: Deleting elements quickly
Wim Gielis
IBM Champion 2024
Excel Most Valuable Professional, 2011-2014
https://www.wimgielis.com ==> 121 TM1 articles and a lot of custom code
Newest blog article: Deleting elements quickly
- Steve Rowe
- Site Admin
- Posts: 2416
- Joined: Wed May 14, 2008 4:25 pm
- OLAP Product: TM1
- Version: TM1 v6,v7,v8,v9,v10,v11+PAW
- Excel Version: Nearly all of them
Re: ActiveForm: Performance MDX
Just to expand slightly on what Wim is saying.
If you have enough information in the active form to paramaterise your MDX statement then you have enough information to paramaterise a subset reference.
So pre-build the subsets and reference the subset directly in the active form.
If the user only has one option / area of responsibility then you could set that as an attribute of the user and nest it into the subset reference so they don't even need to make a selection.
Then the MDX is not running in line with your report. The pre-build subsets should be static but refreshed via TI on sufficient frequency that they remain updated.
If you have enough information in the active form to paramaterise your MDX statement then you have enough information to paramaterise a subset reference.
So pre-build the subsets and reference the subset directly in the active form.
If the user only has one option / area of responsibility then you could set that as an attribute of the user and nest it into the subset reference so they don't even need to make a selection.
Then the MDX is not running in line with your report. The pre-build subsets should be static but refreshed via TI on sufficient frequency that they remain updated.
Technical Director
www.infocat.co.uk
www.infocat.co.uk
- paulsimon
- MVP
- Posts: 808
- Joined: Sat Sep 03, 2011 11:10 pm
- OLAP Product: TM1
- Version: PA 2.0.5
- Excel Version: 2016
- Contact:
Re: ActiveForm: Performance MDX
Hi
Another major factor in Active Form performance is to take as few columns as possible from the Active Form and the others from Views. I often build special consolidations with random weights to get over the issue of it not retrieving a row if the values cancel each other out. I then just use the column with the consolidation to drive the zero suppression in the active form and find that this is a lot faster.
Recent versions of TM1 do cache the results of MDX expressions, however, I would still agree with previous comments that if you can generate a static subset then it may be faster.
From the sounds of it you may only need a subset per region rather than per user. Then you just need an attribute on the user to give their region. You can get the username via the TM1User function and then retrieve their region subset and then make up the name of the subset.
I would also look at security. Assuming that not all users can see all projects, then this is another way to limit down the list.
I have not had to cope with a dimension this size for a while. It would be interesting to know how security copes as a way of limiting the list of elements vs a subset.
You might also want to consider whether all projects in the dimension are still live. I would guess that with a million projects most are completed. Therefore you could consider a separate cube with only current projects, or a hierarchy in the dimension with only current projects.
Regards
Paul Simon
Another major factor in Active Form performance is to take as few columns as possible from the Active Form and the others from Views. I often build special consolidations with random weights to get over the issue of it not retrieving a row if the values cancel each other out. I then just use the column with the consolidation to drive the zero suppression in the active form and find that this is a lot faster.
Recent versions of TM1 do cache the results of MDX expressions, however, I would still agree with previous comments that if you can generate a static subset then it may be faster.
From the sounds of it you may only need a subset per region rather than per user. Then you just need an attribute on the user to give their region. You can get the username via the TM1User function and then retrieve their region subset and then make up the name of the subset.
I would also look at security. Assuming that not all users can see all projects, then this is another way to limit down the list.
I have not had to cope with a dimension this size for a while. It would be interesting to know how security copes as a way of limiting the list of elements vs a subset.
You might also want to consider whether all projects in the dimension are still live. I would guess that with a million projects most are completed. Therefore you could consider a separate cube with only current projects, or a hierarchy in the dimension with only current projects.
Regards
Paul Simon