我是SSRS的新手,并尝试应用“ if then else逻辑”以根据参数输入值将数据从不同的数据集中显示到表上。以下是我的表达代码:
=iif(Parameters!ReportType.Value = "AE", Fields!company_name.Value,
"HRMS_DS_AllEmployees"), iif(Parameters!ReportType.Value = "JE",
Fields!company_name.Value, "HRMS_DS_JoiningEmployees"),
iif(Parameters!ReportType.Value = "LE", Fields!company_name.Value,
"HRMS_DS_LeavingEmployees","")
HRMS_DS_AllEmployees / HRMS_DS_JoiningEmployees / HRMS_DS_LeavingEmployees是我不同的数据集
我知道这可能是我犯的一些基本错误,但如果有人能指出我的错误,将不胜感激。
答案 0 :(得分:0)
不幸的是,我认为您的方法是错误的。我了解您要尝试执行的操作,但据我所知,由于没有上下文,因此无法在这样的数据集之间进行切换。通常,仅当您要使用整个数据集作为表达式的一部分时,才将数据集指定为范围。因此,例如,您可以将Fields!company_name.Value,
"HRMS_DS_AllEmployees"
与FIRST(Fields!company_name.Value,"HRMS_DS_AllEmployees")
交换,但这将始终返回整个数据集中的第一个company_name。
我认为您需要更改方法。
您是否不能将数据集查询合并为一个单一的数据集,该数据集包含状态栏或某种类型的所有员工以及入职和离职人员?然后,您的报告可以根据该参数过滤该列。
更好的是,更改报表数据集查询,使其仅根据参数返回所需的数据。
因此,您的数据集查询可能看起来像(只是组成了条件,但您明白了)
SELECT * FROM myEmployeesTable e
WHERE
(@ReportType = 'AE')
OR
(@ReportType = 'JE' AND DATEDIFF(d , e.JoinDate, getdate()) < 30)
OR
(@ReportType = 'LE' AND DATEDIFF(d , e.LeaveDate, getdate()) < 30)