Distinctcount - 一段时间内部门的供应商 - 性能下降

时间:2018-02-15 15:03:30

标签: mdx olap iccube

在包含以下尺寸的模型中: - 时间 - 粒度月 - 5年 - 20个季度 - 60个月 - 供应商 - 最低级别的6000家供应商 - 部门 - 最低级别的500个部门

我需要为每个部门提供独特的供应商数量。

我使用的功能:

with member [measures].[#suppliers] as
distinctcount(([Supplier].[Supplier].[supplier].members
   ,[Measures].[amount]))
)
select [Measures].[#suppliers] on 0
, order([Department].[Department].[department].members, [#suppliers], BDESC) on 1
from [cube]
where [Time].[Time].[2017 10]:[Time].[Time].[2018 01]

时间组件可能会有所不同,因为仪表板用户可以自由选择报告期。

但是MDX非常慢。计算每行的测量值大约需要38ms。我想使用此度量对部门进行排名并计算累积百分比并为这些值分配分数。你可以想象性能不会提高。

我曾尝试使用函数并缓存结果,但结果 - 对我来说 - 变得更糟(根据日志2x一样糟糕)。

我可以做些什么来改善表现?

1 个答案:

答案 0 :(得分:0)

快速添加计算与[Measures]相关联的表的供应商ID计算de Distinct Count的度量。[Amount]将有所帮助。在Schema定义中。

随着供应商的增长,其他的不可扩展。

尽管如此,你为什么使用DistinctCount而不是Count(NonEmpty()))?

DistinctCount主要用于计算集合中不同的成员/元组的数量。只有在一组中有两个相同的成员才有意义。由于我们的初始成员没有重复,所以没用。

CountNonEmpty())过滤非空的集合并计算集合中的项目数。这可以很容易地并行计算