获取 [BC30205] 语句结束预期错误

Getting [BC30205] end of statement expected error

我是 SSRS 的新手,正在尝试应用 "if then else logic" 以根据参数输入值将来自不同数据集的数据显示到 table 上。以下是我的表达式代码:

=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 是我的不同数据集

我知道这可能是我犯的一些基本错误,但如果有人能指出我的错误,我将不胜感激。

不幸的是,我认为您的方法是错误的。我了解您正在尝试做什么,但据我所知,在这样的数据集之间切换是不可能的,因为没有上下文。通常,仅当您想将整个数据集用作表达式的一部分时,您才会将数据集指定为范围。因此,例如,您可以将 Fields!company_name.Value, "HRMS_DS_AllEmployees"FIRST(Fields!company_name.Value,"HRMS_DS_AllEmployees") 交换,但这总是 return 整个数据集中的第一个 company_name。

我认为你需要改变你的方法。

你能不能结合你的数据集查询来给你一个单一的数据集,其中包含所有员工以及由状态列或某种类型指示的加入者和离职者?然后您的报告可以根据参数过滤该列。

更好的是,根据参数将您的报告数据集查询更改为仅return您需要的数据。

所以您的数据集查询可能看起来像(只是制定了条件,但您明白了)

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)