首页 > 解决方案 > SSRS % 计算返回为负数,除非使用 *-1

问题描述

我正在寻找一种更好的方法来处理这个表达式:

=IIf(Sum(Fields!DestElectronic.Value) > 0, 1 - Count(Fields!counter.Value) / Sum(IIf(Fields!DestElectronic.Value = 1, 1, 0)), 0) *-1

可以这么说:

Count(Fields!counter.Value) = 325

然后

=Sum(Fields!DestElectronic.Value) = 201

那应该是 62%,我的问题是,如果我去掉 *-1(乘以负 1),它将返回 -62%。这是有道理的。

如果我翻转等式,那么它会返回 38%(这也是有道理的。)

我对此的担心是*-1 只是挂在那里,我担心它会产生无法预料的结果。

我的目标是回报 62%。此值将与其他 3 个相加,总和应为 100。

那么这个可以写得更好吗?

标签: reporting-servicesssrs-2008ssrs-2012

解决方案


你说Sum(Fields!DestElectronic.Value)等于 201,但什么是Sum(IIf(Fields!DestElectronic.Value = 1, 1, 0))等于?

假设这也等于 201,这就是我认为您的意思,那么您所拥有的就是1 - 325 / 201等于1 - 1.61692,这就是您得到否定的原因。

在不知道数据集的其余部分是什么样子的情况下,您可以通过取出前导1 -并将分数翻转为

Sum(IIf(Fields!DestElectronic.Value = 1, 1, 0)) / Count(Fields!counter.Value)

但请确保使用数据集的其他值对其进行测试。或者,你可以做

Count(Fields!counter.Value) / Sum(IIf(Fields!DestElectronic.Value = 1, 1, 0)) - 1

请注意,这两个表达式返回的答案略有不同:前者返回0.61846,而后者返回0.616915。因此,根据您要完成的具体工作,其中一种方法可能不正确。后者为您提供了您之前得到的答案的正面版本,所以我认为这就是您正在寻找的。但是,如果不知道您要完成什么,就不可能说出来。


推荐阅读