SSRS - 如何总计一行

时间:2016-03-31 15:40:56

标签: reporting-services ssrs-grouping totals

Report Month         Booked Month          Hours     Available Hours    Reported Hours
2015-12-01 00:00:00 2015-10-01 00:00:00     3.5       97                   172
2015-12-01 00:00:00 2015-10-01 00:00:00     0.75      97                   172
2015-12-01 00:00:00 2015-10-01 00:00:00     6.85      97                   172
2015-12-01 00:00:00 2015-10-01 00:00:00     3         97                   172
2015-11-01 00:00:00 2015-10-01 00:00:00     3.5       97                   185
2015-11-01 00:00:00 2015-10-01 00:00:00     0.75      97                   185
2015-11-01 00:00:00 2015-10-01 00:00:00     6.85      97                   185
2015-11-01 00:00:00 2015-10-01 00:00:00     3         97                   185

在我的SSRS报告中,我想要总计报告时间列。这个人在12月份预订了172个小时,在11月份预定了185个小时,因此他今年的总数应该是185 + 172 = 357.

在我当前的报告中,它将所有行加在一起。我怎样才能每月选择一行报告的小时数?

由于

1 个答案:

答案 0 :(得分:0)

在SSRS中没有固定的方法。

通常,您会将查询包装在另一个使用 ROW_NUMBER 的查询中,并按月分组。然后,如果row_numnber = 1,则仅添加小时数。

How do I use ROW_NUMBER()?

不幸的是,这并不总是可行的。我写了一些代码来添加基于另一个字段的唯一记录。我这样做是为了获得各个供应商的支票金额。

对于表达式,您将使用:

=Code.SUMVendors(Report_Month & "|" & Fields!Reported_Hours.Value)

将Visual BASIC添加到报告的 CODE

FUNCTION SUMVendors(BYVAL ITEMS AS OBJECT()) AS DECIMAL
'Returns Sum of unique vendors. Use as Code.SUMVendors(Vendor & "|" & Amount)
IF ITEMS IS NOTHING THEN 
    RETURN NOTHING
    GOTO EXITSUB
END IF

DIM TEMP AS STRING
DIM VENDORS AS STRING = ""
DIM VENDOR AS STRING = ""
DIM VALUE AS DECIMAL 

FOR EACH ITEM AS OBJECT IN ITEMS

    TEMP = CONVERT.TOSTRING(ITEM)

    VENDOR = "|" & LEFT(TEMP, InStr(TEMP, "|"))

    VALUE = CDEC(MID(TEMP, InStr(TEMP, "|") + 1, LEN(TEMP)))

    IF InStr(VENDORS, VENDOR) = 0 Then  
        VENDORS = VENDORS + VENDOR 
        SUMVendors = SUMVendors + VALUE
    End If

NEXT

EXITSUB:
END FUNCTION