SSAS度量值每次处理后返回随机求和值问题求助
OLAP Cube求和度量值异常问题排查
问题描述
创建的OLAP Cube包含rowId、TransId、TransValue等维度属性,属性值均正确,但将TransValue设为求和度量值后,每次处理Cube得到的求和结果完全随机,与合理值不符。示例数据如下:
rowId TransId TransValue SumTransValue 1 trans1 12345 6234 2 trans2 11111 412 3 trans2 11111 412 4 trans2 11111 412 5 trans3 -55 -894 6 trans3 -55 -894
在Excel中查看计算逻辑时,正确值应为-1020,却出现182703,54这样的异常值,对应的MDX查询语句如下:
("[Measures].[ACCOUNTINGCURRENCYAMOUNT]";$A$1;"[dim]. [MAINACCOUNTVALUE]";"[dim].[MAINACCOUNTVALUE].&[3011000]";"[dim]. [JOURNALNUMBER]";"[dim].[JOURNALNUMBER].&[PAF-004642550]";"[dim].[My Key]";"[dim].[My Key].&[6402387]";"[dim].[ACCOUNTINGCURRENCYAMOUNT]";" [dim].[ACCOUNTINGCURRENCYAMOUNT].&[-1.02E3]&[PAF-004642550]")
可能的原因
- 维度与度量值角色混淆:将
TransValue同时作为维度属性和度量值,导致聚合逻辑混乱。维度属性用于切片分组,度量值用于聚合计算,把数值型字段放在维度中,会让Cube错误地按维度离散值关联,而非对事实表原始行求和。 - 重复行聚合粒度错误:未基于事实表唯一主键
rowId设置聚合粒度,而是错误地按TransId维度分组后重复计算。同一TransId的多行记录需要按行级累加,而非按维度成员重复统计。 - MDX查询筛选逻辑错误:查询中错误地将度量值字段
[dim].[ACCOUNTINGCURRENCYAMOUNT]作为维度筛选条件,把聚合目标当成维度成员过滤,完全打乱了求和逻辑。正确做法是仅用维度属性(如TransId、rowId)做筛选,度量值只出现在Measures区域。 - Cube粒度与事实表不匹配:Cube的维度粒度设置与事实表存储粒度不一致。如果维度粒度设为
TransId,但事实表按rowId存储,聚合时会错误地对TransId对应的重复值额外计算,而非按行级求和。 - 数据类型异常:
TransValue可能被存储为字符串类型而非数值型,导致求和时发生字符串拼接或错误数值解析,产生随机异常值。
内容的提问来源于stack exchange,提问作者Tweene
相关产品推荐
相关产品推荐

