When Dynamic Sets Are Not Dynamic
In my “Optimizing Dimension Data Security” blog, I’ve mentioned that converting static sets to dynamic could reduce the connection initialization time. To my surprise, using Excel to connect to the cube triggered the executing of dynamic sets and end users reported long wait times for the connection to initialize. It turned out that when Excel connects to the cube, it issues DISCOVER statements to query the metadata. One of these statements queries MDSCHEMA_SETS to find out what sets are available in the cube. For some obscure reason, this triggers the actual set evaluation for dynamic sets. If the set is expensive, e.g. touches all partitions, the DISCOVER statement can surely delay the connect time.
It turned out that other users are experiencing the same issue even if security is not applied. Greg Galloway found a workaround and extended the Analysis Services Stored Procedure project with a CurrentCommandIsDiscover method. You can use this method to check if the tool sends a DISCOVER command in your dynamic set definition and short-circuit the set evaluation, like so:
Create Dynamic Set CurrentCube.[Top 25 Selling Products] As
IIf(
ASSP.CurrentCommandIsDiscover(),
Head([Product].[Product].[Product].Members,0),
TopCount
(
[Product].[Product].[Product].Members,
25,
[Measures].[Sales Amount]
)
),
Display_Folder = ‘Sets’;