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

问题描述 投票:0回答:1

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

我知道这可能是我犯的一些初级错误,但如果有人能指出我的错误,我将非常感激。

reporting-services ssrs-2012 reportbuilder3.0
1个回答
0
投票

很不幸,我认为你的方法是错误的。我明白你想做什么,但据我所知,像这样在数据集之间切换是不可能的,因为没有上下文。通常情况下,只有当你想使用整个数据集作为表达式的一部分时,你才会指定数据集作为你的范围。所以,对于示例,你可以将 "数据集 "与 "范围 "交换。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)
© www.soinside.com 2019 - 2024. All rights reserved.