忽略SSAS计算成员中的关联NULL值

时间:2011-11-11 22:09:15

标签: ssas mdx bids

我正在Visual Studio BIDS中创建Analysis Services多维数据集,并且对计算成员中的求和有疑问。

该数据与商业房地产交易有关。我想要计算每个地区销售交易所涉及的建筑空间的平方英尺。我将在加权平均计算中使用该结果。但是,我只想对相应的建筑资本化率(上限率)成员具有非空值的交易的平方英尺求和。

以下是在立方体浏览器中向雅典深入研究:

BIDS browser

请注意,雅典有15个平方英尺的值,但只有5个上限值,反映了我的关系数据源,如下所示:

SQL Server query result

所以,我只想将具有相关上限率值的五平方英尺值相加。使用上面的关系查询结果进行数学运算可以看出这应该导致总和超过900K,而不是BIDS屏幕截图中显示的200万+总和。

我尝试这个计算:

sum(
descendants(
            [Property].[Property by Region].CurrentMember,
            [Property].[Property by Region].[Metro Area]
            ),
iif([Measures].[Cap Rate] is null or [Measures].[Sq Ft] is null, 0, 
    [Measures].[Sq Ft])
)

最终包括没有相应上限费率的平方英尺值,所以我最终仍然得到了2百万的价值。

为什么我的iff()子句无法正常工作?

2 个答案:

答案 0 :(得分:0)

我终于能够使用数据源视图(DSV)中的命名计算和计算成员(在多维数据集脚本中)的组合来创建加权平均计算。首先,我去了DSV并添加了一个名为xWeightedCapRt的命名计算,其公式如下:

CASE WHEN CapRate IS Null THEN Null Else CapRate * SqFt END

在立方体中,我添加了xWeightedCapRt作为新措施。我将其聚合函数设置为Sum,并将其Visible属性暂时设置为True。

我创建了另一个名为“xSqFt”的命名计算,定义为:

CASE WHEN CapRate IS Null THEN Null Else SqFt END

再次创建了相应的衡量标准。

在(计算器设计器的)计算选项卡上,我创建了一个新的计算成员,[按平方英尺计算的WAvg上限率],其公式如下:

[Measures].[x Weighted Cap Rt] / [Measures].[x Sq Ft]

在部署和处理多维数据集之后,我能够验证加权平均计算是否与我的电子表格编号相匹配。此时,我将两个中间度量的Visible属性设置为False并重新部署。

我所学到的是“行级”的计算最好通过DSV进行。然后,您可以使用它们在多维数据集中构建更复杂的计算。

(注意:需要在上述步骤中添加的一件事是用零处理除法的逻辑。)

答案 1 :(得分:0)

难道你不能围绕上限费率测量的后代做过非空吗?