在SSRS 2008中为具有其他列的条件总和的列创建组小计

时间:2018-01-31 17:04:54

标签: sql-server reporting-services ssrs-2008

这很难解释,并且很难找到答案。

我的数据集包含员工工作单的信息,包括估算的成本,然后是基于已完成任务的实际成本。查询看起来像

Employee  WorkOrder  Planned  Task  Actual
John      j101       500      1     300
John      j101       500      2     300
John      J102       500      1     100
John      j101       500      2     200
Chris     C201       300      1     150
Chris     C201       300      2     150
Chris     C202       400      1     200
Chris     C202       400      2     100
Chris     C202       400      3     100
Chris     C202       400      4     100

我正在尝试创建一个类似于此的报告:Sample report

每个工单都在标题级别具有估计成本,并与其任务的实际成本之和进行比较。 “预期成本”列采用计划成本的最大值和实际总成本。

该表达式正常工作,看起来像

IIf(Fields!PlannedCost.Value >= Sum(Fields!TaskActualCost.Value),
           Fields!PlannedCost.Value,Sum(Fields!TaskActualCost.Value))

我现在必须按员工小计这些预期成本,然后按总计整数数据集。

我一直在尝试将IIF包装在另一个SUM表达式中,但它给了我的价值高于应有的价值。我在某处找不到(找不到链接)我必须使用范围作为总和,但它没有帮助。

我尝试了以下方法,但价值仍然比应该高出3-4倍

Sum(
    IIf(Fields!PlannedCost.Value >= Sum(Fields!TaskActualCost.Value, "table1_Details_Group"), 
        Fields!PlannedCost.Value,
        Sum(Fields!TaskActualCost.Value, "table1_Details_Group")
        )
    )

实现这一目标的最佳方法是什么?我希望我只是错过了一些简单的东西,因为这看起来应该很简单。

1 个答案:

答案 0 :(得分:0)

我终于在this blog post

的帮助下找出了问题

我原以为是导致问题的是我的任务SUM表达式,但它实际上是PlannedCost列。当我将其包装在另一个SUM中时,它会为数据中的每一行计算它,现在看起来很明显。

无论如何,工作订单小计保持不变。

员工小计更改为(注意“最大”功能

=FormatCurrency(
Sum(
    IIf(Max(Fields!PlannedCost.Value,"table1_WONum") >= Sum(Fields!TaskActualCost.Value, "table1_WONum"), 
            Max(Fields!PlannedCost.Value,"table1_WONum"),
            Sum(Fields!TaskActualCost.Value, "table1_WONum")
        )
    )
,2)

总计表达式与员工小计相同。

希望这有助于将来的其他人。