0

根据下面的链接,SSAS 存在一个问题,会在聚合度量上产生静默溢出​​:

http://gqbi.wordpress.com/2013/08/14/ssas-getting-a-negative-value-for-measure-that-has-been-used-in-a-sum/

http://social.msdn.microsoft.com/Forums/sqlserver/en-US/01dc2413-e2f8-4d40-88fa-2faeb4f5dd1b/

有没有办法通过根据度量的 AggregationFunction 属性以编程方式更改源的 DataType 来防止这种情况发生?我的意图是在需要时将类型“转换”为另一种更大的类型。也就是说,我想知道是否需要为每个 AggregationFunction 执行此更改。

4

1 回答 1

0

任何地方都没有自动化可以防止这种情况发生。您只需要知道聚合可能产生的最大值是否大于您使用的数据类型所允许的值,例如,如果您使用 a smallint,如果所有聚合值都在-2^15 (-32,768)and之间2^15-1 (32,767),或者在-2^31 (-2,147,483,648)and 2^31-1 (2,147,483,647)for之间integer。所有数据类型都有其限制。

在最常用的聚合sum的情况下,一个简单的情况是您只有正值或零值作为输入。在这种情况下,只需使用更大的数据类型将所有值相加,检查总和是否适合该类型。如果您有一些正值和一些负值,情况会更加复杂:您必须分别仅对正数和负数求和,以查看任何总和是否低于最小值或高于最大值。

而对于其他聚合,情况会有所不同。

于 2013-09-04T12:35:04.723 回答