【问题标题】:Getting [BC30205] end of statement expected error获取 [BC30205] 语句结束预期错误
【发布时间】:2020-06-15 09:26:18
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    不幸的是,我认为您的方法是错误的。我了解您要做什么,但是据我所知,在这样的数据集之间切换是不可能的,因为没有上下文。通常,仅当您想将整个数据集用作表达式的一部分时,您才会将数据集指定为您的范围。因此,例如,您可以将 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)
    

    【讨论】:

    • 啊,我明白了。我已经使用单个数据集完成了我需要的事情,并且只是在探索其他方法来完成同样的事情。感谢您的建议,我的解决方案也类似。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-03
    • 1970-01-01
    相关资源
    最近更新 更多