代码之家  ›  专栏  ›  技术社区  ›  mal88

如何组合来自两个数据集SSRS的字段?

  •  1
  • mal88  · 技术社区  · 6 年前

    我正在编写一份报告,显示员工工作的总小时数。我们公司通过服务请求和工单跟踪工时,因此我需要将每个工时的总计计入报告中。

    我创建了两个数据集——一个用于工作订单,另一个用于服务请求。理想情况下,我希望将工单总小时数与服务请求总小时数相结合,并显示由employeeID列出的数字,因为这两个数据集都有employeeID字段。

    我想这很简单:

    =(SUM(Fields!TOTALHOURS_WO.Value, "DataSet1") + SUM(Fields!TOTALHOURS_SR.Value, "DataSet2")) 
    

    我没有得到错误,但是,我得到了一个数字,每个员工都会重复这个数字,所以我知道我做错了什么。

    非常感谢您的帮助。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Lucky    6 年前

    马尔,

    正如@StevenWhite所提到的,查找可能是您正在寻找的功能。

    这里有一个例子。对于示例数据集:

    EmployeeID | TOTALHOURS_WO
    -----------------------------------
    123        |   12
    456        |    3
    
    EmployeeNum| TOTALHOURS_SR
    -----------------------------------
    123        |    2
    456        |    5
    

    您将注意到,SSRS报告中的每个表都需要为其分配一个数据集。我假设您的表使用的是我们的第一个数据集,我们将其命名为“DataSet1”。上面的第二个数据集是“DataSet2”。

    对于总小时数,您将使用表达式。应该是这样的:

    =TOTALHOURS_WO + LOOKUP(Fields!EmployeeID.Value, Fields!EmployeeNum.Value, Fields!TOTALHOURS_SR.Value, "DataSet2")
    

    因此,您将把本地数据集中的TOTALHOURS\u WO添加到查找函数的结果中。查找所做的是从本地数据集中获取第一个字段,在提供给函数的数据集中查找匹配项(作为字符串),然后从匹配的行返回字段。最后一个参数是要搜索的数据集。

    以防你出错。。。最好将数据转换为您想要使用的类型,以防出错。所以

    =CINT(TOTALHOURS_WO) + CINT(LOOKUP(Fields!EmployeeID.Value, Fields!EmployeeNum.Value, Fields!TOTALHOURS_SR.Value, "DataSet2"))
    

    这假设您对员工ID有一对一的匹配。如果必须对两个字段求和,可以尝试以下操作:

    =SUM(CINT(TOTALHOURS_WO)) + SUM(LOOKUPSET(Fields!EmployeeID.Value, Fields!EmployeeNum.Value, CINT(Fields!TOTALHOURS_SR.Value), "DataSet2"))
    

    TOTALHOURS\u WO的总和将为您提供当前表组中的总和(因此请确保您在表中按员工ID分组)。然后将其添加到LOOKUPSET的总和中。LOOKUPSET的工作原理与lookup相同,但返回一个匹配数组,而不是第一个匹配数组。

    希望这有帮助。