我是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_AllEmployeesHRMS_DS_JoiningEmployeesHRMS_DS_LeavingEmployees是我的不同数据集。
我知道这可能是我犯的一些初级错误,但如果有人能指出我的错误,我将非常感激。
很不幸,我认为你的方法是错误的。我明白你想做什么,但据我所知,像这样在数据集之间切换是不可能的,因为没有上下文。通常情况下,只有当你想使用整个数据集作为表达式的一部分时,你才会指定数据集作为你的范围。所以,对于示例,你可以将 "数据集 "与 "范围 "交换。Fields!company_name.Value,
"HRMS_DS_AllEmployees"
与 FIRST(Fields!company_name.Value,"HRMS_DS_AllEmployees")
但这总是会从整个数据集中返回第一个公司名称。
我认为你需要改变你的方法。
你能不能把你的数据集查询组合起来,给你一个单一的数据集,这个数据集包含了所有的员工,其中有加入者和离开者,用一个状态列或某种状态来表示?然后,你的报表就可以根据参数过滤该列。
更好的办法是,改变你的报表数据集查询,只根据参数返回你需要的数据。
因此,你的数据集查询可能看起来像(只是编造了标准,但你懂的)。
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)