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
相关产品推荐
相关产品推荐

