【问题标题】:'iif' condition is not working with Calculated Field in SSRS“iif”条件不适用于 SSRS 中的计算字段
【发布时间】:2019-04-08 13:35:51
【问题描述】:

对于 SSRS 报告中的数据集,我使用以下表达式创建了一个计算字段,它工作正常。

=(Fields!SalesAmount.Value+Fields!TaxAmt.Value)*Fields!Factor.Value

但有时我们可以将因子值设为 0。因此,我将上面的表达式修改为:

=iif(Fields!Factor.Value = 0,(Fields!SalesAmount.Value+Fields!TaxAmt.Value)*1,(Fields!SalesAmount.Value+Fields!TaxAmt.Value)*Fields!Factor.Value)

但这会引发以下异常: 文本运行“Textbox2.Paragraphs[0].TextRuns[0]”的值表达式对不同数据类型的数据使用聚合函数。除 First、Last、Previous、Count 和 CountDistinct 之外的聚合函数只能聚合单一数据类型的数据。

有人可以帮忙解决这个问题吗?

【问题讨论】:

  • 试试这个...=(Fields!SalesAmount.Value+Fields!TaxAmt.Value)* IIF(Fields!Factor.Value=0,1,Fields!Factor.Value)它可能会给你同样的错误。

标签: if-statement reporting-services expression calculated-field


【解决方案1】:

这似乎不是 IIF 的问题,但数据类型似乎不匹配。我有一些建议可以尝试。首先,您可以尝试将真实值乘以 1.0,因为我假设数据类型是十进制或双精度。另一种选择是使用CInt 之类的东西将值转换为正确的数据类型。 CInt 可能不适合小数,因为它会四舍五入任何十进制值,但想法是一样的。由于您的表达式不使用任何聚合并且仅使用普通运算符,因此它必须与 IIF 以外的其他内容相关。

Here's a useful link 分解数据类型和转换方法。选择最合适的转换并将其应用于1

编辑:表达式应如下所示。

=iif(Fields!Factor.Value = 0.00,
(Fields!SalesAmount.Value+Fields!TaxAmt.Value)*CDbl(1),
(Fields!SalesAmount.Value+Fields!TaxAmt.Value)*Fields!Factor.Value) 

【讨论】:

  • 感谢史蒂夫的建议。根据您的建议,我修改了以下条件,但错误仍然相同: =iif(Convert.ToDouble(Fields!Factor.Value) = 0.00,(Fields!SalesAmount.Value+Fields!TaxAmt.Value)*1,(Fields! SalesAmount.Value+Fields!TaxAmt.Value)*Convert.ToDouble(Fields!Factor.Value))
  • @MohsinA。修改了我的答案以包含我认为应该有效的表达式。
  • 史蒂夫,我的问题通过以下修改后的表达式解决了:=iif(len(Fields!Factor.Value) = 0,(convert.ToDouble(Fields!SalesAmount.Value) + convert.ToDouble(Fields!TaxAmt.Value))*1,(convert.ToDouble(Fields!SalesAmount.Value) + convert.ToDouble(Fields!TaxAmt.Value) )*convert.ToDouble(Fields!Factor.Value))
  • @MohsinA。很高兴听到您的问题得到解决。我要补充一点,如果您想节省一些空间,可以将 convert.ToDouble 缩短为 CDbl
  • convert.ToDouble()CDbl()有什么区别吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-07
  • 2020-06-22
  • 1970-01-01
  • 2021-05-08
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
相关资源
最近更新 更多