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

时间:2018-04-05 18:32:17

标签: reporting-services dataset

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

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

我认为这很简单:

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

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

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

Mal,

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

以下是您的示例。对于示例数据集:

EmployeeID | TOTALHOURS_WO
-----------------------------------
123        |   12
456        |    3

EmployeeNum| TOTALHOURS_SR
-----------------------------------
123        |    2
456        |    5

您将注意到SSRS报告中的每个表都需要分配给它的DataSet。我假设你的表正在使用我们的第一个DataSet,我们将其命名为#34; DataSet1"。上面的第二个数据集将是" DataSet2"。

您的总小时数将使用表达式。看起来应该是这样的:

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

因此,您将从本地数据集添加TOTALHOURS_WO到LOOKUP函数的结果。查找正在执行的操作是从本地数据集中获取第一个字段,在提供给函数的数据集中找到匹配项(作为字符串),并从匹配的行返回字段。最后一个参数是要搜索的数据集。

万一你遇到错误......如果出现错误,将数据转换为你想要使用的类型总是一个好主意。所以......

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

这假设您与员工ID一对一匹配。如果你必须SUM这两个字段,你可以试试这个:

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

TOTALHOURS_WO的SUM将在当前表组中为您提供SUM(因此请确保按表中的人员ID进行分组)。然后它会将它添加到LOOKUPSET的SUM中。 LOOKUPSET与lookup相同,但返回匹配数组而不是第一个。

希望这有帮助。