Distinctcount - 一段时间内部门的供应商 - 性能缓慢

Distinctcount - suppliers for departments over a period of time - slow performance

在包含以下维度的模型中: - 时间-粒度月-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 很慢。计算每行的度量大约需要 38 毫秒。我想使用此度量对部门进行排名并计算累积百分比并为这些值分配分数。正如您想象的那样,性能不会提高。

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

我可以做些什么来提高性能?

要快速添加一个度量,计算与[Measures].[Amount] 关联的table 的供应商ID 的不同计数将会有所帮助。在模式定义中。

随着 Supplier 的增长,其他的无法扩展。

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

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

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