C# 防止聚合度量溢出

C# 防止聚合度量溢出,c#,sql-server,ssas,C#,Sql Server,Ssas,根据以下链接,SSA存在一个问题,在聚合度量上产生无声溢出: 有没有办法通过根据度量值的AggregationFunction属性以编程方式更改源的数据类型来防止这种情况?我的意图是在需要时将类型“转换”到另一个更大的类型。也就是说,我想知道是否需要对每个AggregationFunction执行此更改。任何地方都没有自动机制来阻止此更改。您只需要知道聚合产生的最大值是否可能大于您使用的数据类型所允许的值,例如。G如果使用smallint,如果所有聚合值都在-2^15(-32768)和2^1

根据以下链接,SSA存在一个问题,在聚合度量上产生无声溢出:


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

任何地方都没有自动机制来阻止此更改。您只需要知道聚合产生的最大值是否可能大于您使用的数据类型所允许的值,例如。G如果使用
smallint
,如果所有聚合值都在
-2^15(-32768)
2^15-1(32767)
之间,或者在
-2^31(-2147483648)
2^31-1(2147483647)
之间(对于
整数
。所有数据类型都有其限制

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

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