使[BC30205]语句结尾出现预期错误

时间:2020-06-15 09:26:18

标签: reporting-services ssrs-2012 reportbuilder3.0

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

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

1 个答案:

答案 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)
相关问题