You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VS2012(SSRS)中如何结合两数据集IIF语句统计合格实习生数

解决跨数据集统计合格Trainee数量的问题

嗨,我来帮你搞定这个跨数据集统计的事儿!既然两个数据集有共同字段(比如员工ID这类唯一标识),咱们可以用SSRS里的关联函数把它们串起来,实现你要的统计需求。

情况1:每个Trainee在Dataset2里只有一条成绩记录

如果每个实习生在成绩数据集里只有一条记录,那用Lookup函数就够了,直接把两个数据集通过共同字段关联起来,然后判断条件:

试试这个表达式:

=SUM(
  IIF(
    Fields!Staff.Value = "Trainee" 
    AND 
    (Lookup(Fields!你的共同字段.Value, Fields!你的共同字段.Value, Fields!Grade.Value, "Dataset2") = "Pass" OR Lookup(Fields!你的共同字段.Value, Fields!你的共同字段.Value, Fields!Grade.Value, "Dataset2") = "Achieved"),
    1,
    0
  ),
  "Dataset1"
)

简单说下逻辑:

  • 先看Dataset1里当前记录是不是Trainee
  • 再通过共同字段,从Dataset2里拽出对应这个人的成绩
  • 如果成绩是Pass或者Achieved,就算1个有效数,最后把所有符合的加起来就行

情况2:一个Trainee在Dataset2里有多条成绩记录

要是同一个实习生有多次考核成绩,只要其中一次合格就算数,那得用LookupSet函数(它能返回所有匹配的成绩),再判断里面有没有合格的:

这里给你两种写法,选顺手的用:

写法1:把成绩拼成字符串检查

=SUM(
  IIF(
    Fields!Staff.Value = "Trainee" 
    AND 
    (Join(LookupSet(Fields!你的共同字段.Value, Fields!你的共同字段.Value, Fields!Grade.Value, "Dataset2"), ",") LIKE "*Pass*" OR Join(LookupSet(Fields!你的共同字段.Value, Fields!你的共同字段.Value, Fields!Grade.Value, "Dataset2"), ",") LIKE "*Achieved*"),
    1,
    0
  ),
  "Dataset1"
)

写法2:直接统计合格成绩的数量

=SUM(
  IIF(
    Fields!Staff.Value = "Trainee" 
    AND 
    (Count(LookupSet(Fields!你的共同字段.Value, Fields!你的共同字段.Value, IIF(Fields!Grade.Value = "Pass" OR Fields!Grade.Value = "Achieved", 1, Nothing), "Dataset2")) > 0),
    1,
    0
  ),
  "Dataset1"
)

这个逻辑更严谨:先把Dataset2里符合合格条件的成绩标记成1,其他设为空,然后统计数量,只要大于0就说明这个实习生有合格成绩,就计入总数。

几个要注意的小细节

  • 记得把表达式里的你的共同字段换成你实际的关联字段(比如StaffID、EmployeeID),而且两个数据集里这个字段的类型得一致,不然匹配不上
  • 如果Dataset2里没有某个Trainee的成绩记录,Lookup会返回空值,这时候不会被计数,完全符合咱们的需求

内容的提问来源于stack exchange,提问作者LJE

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:57:48