OLAP 多维数据集中计算成员中的条件

Posted

技术标签:

【中文标题】OLAP 多维数据集中计算成员中的条件【英文标题】:Where condition in calculated member in OLAP cube 【发布时间】:2021-06-08 11:12:44 【问题描述】:

我是 MDX 新手,想开发 SSAS 多维数据集,在以下场景中需要一些帮助:

在 SSAS 设计器中的“计算”选项卡上:

我正在创建一个名为 [QualityKPI] 的计算成员,我正在为其编写 MDX 表达式,如下所示:

IIF([Measures].[Rows Count] <> 0 and [Measures].[Coefficient] <> 0, [Measures].[QualityFinal]/[Measures].[Coefficient],IIF([Measures].[Rows Count] <> 0 and [Measures].[Coefficient] = 0,[Measures].[Quality]/[Measures].[NumberofRecords],Null))

但是我如何在这里实现 WHERE 条件?

例如,在我的事实表中,我有一列 [Rows Count],其中包含两个不同的值 1 和 0。

我想实现上面的 MDX 表达式,这样它在进行上面的计算时只考虑 Rows Count=1。

作为示例,我有一些如下所示的记录,每行的 QualityKPI 应产生此结果,并且公式返回完全相同:

但是在聚合级别(假设我想计算所有产品的 QualityKPI),我只想考虑 [Rows Count] 等于 1 的记录,因此聚合应该产生 0.5496 ((0.209948793 + 0 + 0 + 0) / (0.209948793 + 0 + 0 + 0.172043011 )) 但是使用上面的公式,它产生 0.18087 ((0 + 0.005869074 + 0 + 0 + 0.209948793 + 0 + 0 + 0) / (0 + 0.005869074 + 0 + 0.805352798 + 0.209948793 + 0 + 0 + 0.172043011 ))。

感谢任何帮助。

【问题讨论】:

【参考方案1】:

在 MDX 中,WHERE 条件通常在属性上完成,而不是在度量上完成。因此,最好的方法是从您的 Row Count 列中创建一个属性(即使其成为维度的一部分)。

然后,您可以保持计算不变,使用户能够执行自己的 where 条件,即。 e.通过将 Row Count 拖动到过滤器或行或列中以查看按行数细分。

如果您想在计算本身中进行过滤,然后将行计数过滤器添加到计算中,您可以在当前仅使用度量的任何地方使用元组,例如。 G。 (假设该属性在多维数据集中称为 [Dim1].[Row Count],因此行数 1 的成员将是 [Dim1].[Row Count].&amp;[1]),您将使用

([Measures].[Rows Count], [Dim1].[Row Count].&[1])  <> 0

而不是

[Measures].[Rows Count] <> 0

你的表达中提到的所有措施都类似。

您也可以对条件使用度量(假设Row Count 是您的多维数据集中的一个),但这在多维数据集设计和您需要编写的 MDX 中更复杂,例如。 G。您将不得不考虑使用聚合,而且效率也低得多,因此会导致查询速度变慢。

【讨论】:

以上是关于OLAP 多维数据集中计算成员中的条件的主要内容,如果未能解决你的问题,请参考以下文章

在 Excel 中的 OLAP 多维数据集中搜索

如何将业务逻辑编程到 OLAP Cube 中?

Excel 多维数据集 - OLAP?

使用 C# .NET 访问 Oracle 多维数据集中的 OLAP 数据?

MySQL OLAP 多维数据集中的外部化时间维度?

将破坏 OLAP 多维数据集的字符列表