我是MDX的新手,我需要一些关于此查询的帮助。
Generate(
filter(
[Dim Products].[Product].[Product].members
*
[Dim Date].week.week.members,
[Measures].[Price]
),
nonempty(
topcount(
[Dim Price].[Price].[Price]
*
[Dim Products].[Product].currentmember
*
[Dim Date].week.currentmember,
1,
[Measures].[Price Count]
)
)
)
我在仪表板工具(Dundas Dashboard)中使用上述命名集以检索MODE(重复次数最多的价格值)。它确实显示正确的结果,但它很慢。如果一周有过滤器则需要2-3秒,如果一周没有过滤器则需要大约6-7秒(显示所有周的数据)。这是在SSMS中,但客户端工具需要更长时间才能获得结果集,有时会超时。
经过一些测试后,事实表中的行数似乎不会影响性能,我已经大幅减少但仍然相同。然而,一旦我减少了2个维度表中的成员数量,性能就会提高 - [Dim Price], [Dim Products].
最初,它需要20秒以上才能获得结果集,但是一旦我#&#改进到6-7秒39; ve减少了成员数量如下:
Table | Rows Before | Rows After
[Dim Price] | 2400 | 620
[Dim Products] | 1080 | 101
这让我觉得3个维度之间存在影响性能的笛卡尔积。
我需要有人建议我如何改进查询以提高性能。
答案 0 :(得分:0)
在NONEMPTY函数之前尝试EXISTING函数,如下所示:
Generate(
filter(
[Dim Products].[Product].[Product].members
*
[Dim Date].week.week.members,
[Measures].[Price] //<<<<<<<<<<SHOULD THIS NOT INCLUDE A CONDITION e.g. [Measures].[Price] > 0 ?
),
EXISTING nonempty(
topcount(
[Dim Price].[Price].[Price]
*
[Dim Products].[Product].currentmember
*
[Dim Date].week.currentmember,
1,
[Measures].[Price Count]
)
)
)
尝试2:
Generate(
filter(
NONEMPTY(
[Dim Products].[Product].[Product].members
*
[Dim Date].week.week.members,
[Measures].[Price]
)
),
EXISTING nonempty(
topcount(
[Dim Price].[Price].[Price]
*
[Dim Products].[Product].currentmember
*
[Dim Date].week.currentmember,
1,
[Measures].[Price Count]
)
)
)
尝试3:
GENERATE(
FILTER(
NONEMPTY(
[Dim Products].[Product].[Product].MEMBERS
*
[Dim Date].week.week.MEMBERS
),
[Measures].[Price] > 0
),
TOPCOUNT(
NONEMPTY(
EXISTING
[Dim Price].[Price].[Price]
*
[Dim Products].[Product].currentmember
*
[Dim Date].week.currentmember,
[Measures].[Price Count]
),
1,
[Measures].[Price Count]
)
)