防止汇总措施溢出

时间:2013-09-03 21:02:08

标签: c# sql-server ssas

根据以下链接,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/

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

1 个答案:

答案 0 :(得分:0)

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

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

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