防止聚合措施溢出

本文关键字:溢出 施溢出 | 更新日期: 2023-09-27 18:30:01

根据下面的链接,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执行此更改。

防止聚合措施溢出

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

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

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