OLAP 多维数据集中计算成员中的 Where 条件
Where condition in calculated member in OLAP cube
我是 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 条件?
例如,事实上 table 我有一列 [Rows Count],其中有两个不同的值 1 和 0。
我想实现上面的 MDX 表达式,使其在进行上述计算时只考虑 Rows Count=1。
作为示例,我有一些如下所示的记录,每行的 QualityKPI 应该产生此结果,并且公式 return 完全相同:
但是在聚合级别(假设我想计算所有产品的 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 )
).
感谢任何帮助。
在 MDX 中,WHERE 条件通常是针对属性而不是度量来完成的。因此,最好的方法是从行数列创建一个属性(即,使其成为维度的一部分)。
然后,您可以按原样保留您的计算,使用户能够执行他们自己的 where 条件,即。 e.通过将行数拖到过滤器或行或列中以查看按行数细分。
如果您想在计算本身中进行过滤,然后将行计数过滤器添加到计算中,您可以在当前仅使用度量的任何地方使用元组,例如。 G。 (假设该属性在多维数据集中被称为 [Dim1].[Row Count]
,因此第 1 行的成员将是 [Dim1].[Row Count].&[1]
),您将使用
([Measures].[Rows Count], [Dim1].[Row Count].&[1]) <> 0
而不是
[Measures].[Rows Count] <> 0
您的表达中提到的所有措施都类似。
您也可以使用度量(假设 Row Count
是您的立方体中的一个)作为条件,但这在立方体设计和您需要编写的 MDX 中更复杂,例如。 G。您将不得不考虑使用聚合,而且效率也低得多,因此导致查询速度变慢。
我是 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 条件?
例如,事实上 table 我有一列 [Rows Count],其中有两个不同的值 1 和 0。
我想实现上面的 MDX 表达式,使其在进行上述计算时只考虑 Rows Count=1。
作为示例,我有一些如下所示的记录,每行的 QualityKPI 应该产生此结果,并且公式 return 完全相同:
但是在聚合级别(假设我想计算所有产品的 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 )
).
感谢任何帮助。
在 MDX 中,WHERE 条件通常是针对属性而不是度量来完成的。因此,最好的方法是从行数列创建一个属性(即,使其成为维度的一部分)。
然后,您可以按原样保留您的计算,使用户能够执行他们自己的 where 条件,即。 e.通过将行数拖到过滤器或行或列中以查看按行数细分。
如果您想在计算本身中进行过滤,然后将行计数过滤器添加到计算中,您可以在当前仅使用度量的任何地方使用元组,例如。 G。 (假设该属性在多维数据集中被称为 [Dim1].[Row Count]
,因此第 1 行的成员将是 [Dim1].[Row Count].&[1]
),您将使用
([Measures].[Rows Count], [Dim1].[Row Count].&[1]) <> 0
而不是
[Measures].[Rows Count] <> 0
您的表达中提到的所有措施都类似。
您也可以使用度量(假设 Row Count
是您的立方体中的一个)作为条件,但这在立方体设计和您需要编写的 MDX 中更复杂,例如。 G。您将不得不考虑使用聚合,而且效率也低得多,因此导致查询速度变慢。