我是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 是我不同的 datset
我知道这可能是我犯的一些基本错误,但如果有人能指出我的错误,我将不胜感激。
不幸的是,我认为你的方法是错误的。我理解你想做什么,但据我所知,像这样在数据集之间切换是不可能的,因为没有上下文。通常,仅当要将整个数据集用作表达式的一部分时,才会将数据集指定为范围。因此,对于 exmaple,您可以将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)