表达式根据2个日期之间的另一个计算来计算值

时间:2015-11-16 13:16:57

标签: sql-server reporting-services

我非常坚持试图让表达式来处理SSRS报告。 好了解决这个问题我从业务对象的起源重新创建了这个报告,这包含了很多变量。

我的报告中有3列基于这些变量,所以创建了以下内容并且看起来工作正常。

=sum(Fields!No_of_cash_raised.Value)

=sum(Fields!No_of_cash_raised.Value) \ CountDistinct(Fields!TCY_REFNO.Value)

=sum(IIF((Fields!ARA_CODE.Value = "CASH" or  Fields!ARA_CODE.Value = "PYMT") AND  Fields!TCY_START_DATE.Value >= DateAdd("d",-28,Parameters!P_TCY_START_DATE_TO.Value),1,0))

现在这是我遇到下一个表达式问题的地方。我试图根据2个日期之间的计算来计算参考编号。

=count(Fields!TCY_REFNO.Value, IIF(Fields!TCY_START_DATE.Value >= DateAdd("d",-28,Parameters!P_TCY_START_DATE_TO.Value),1,0))

当我尝试运行此报告时,我得到" scope参数对聚合函数无效"我已经调查了这个错误,但无法找到解决方案。除了上一个表达式中列出的参数字段之外,我可以说所有引用的字段都可以在我的数据集中使用。我使用的是Tablix,我在一个列上进行分组,上面没有引用。

提前致谢

1 个答案:

答案 0 :(得分:0)

查看Sum函数的MSDN reference,您正在使用格式

  

总和(表达式,范围)

scope

的位置
  

(String)可选。包含要应用聚合函数的报表项的数据集,组或数据区域的名称。如果未指定范围,则使用当前范围。

您似乎将此范围的值设置为iif语句,该语句返回1或0,而不是数据集(例如“DataSet1”)。无法使用iif(聚合函数)作为求和表达式的范围。

<强>更新

查看计数功能的MSDN reference,您使用的格式为

  

计数(表达式,范围)

scope

的位置
  

(字符串)包含要应用聚合函数的报表项的数据集,组或数据区域的名称。如果未指定范围,则使用当前范围。

仍然似乎将此范围的值设置为iif语句,该语句返回1或0,而不是数据集(例如“DataSet1”) 。您无法使用iif(聚合函数)作为计数表达式的范围。

<强>解

您需要执行Sumiif才能获得所需的行为。

=Sum(
    IIF(Fields!TCY_START_DATE.Value >= 
        DateAdd("d",-28,Parameters!P_TCY_START_DATE_TO.Value)
    , 1
    , 0)

这样,如果TCY_START_DATE大于P_TCY_START_DATE_TO - 28

,则计数仅包含在总和中