【问题标题】:Expression error when using LookupSet?使用 LookupSet 时出现表达式错误?
【发布时间】:2014-11-12 23:59:54
【问题描述】:

我有一份 SSRS 2012 报告,其中包含我正在努力解决的问题。

我的报告通过存储过程运行。存储过程中的每一行都返回一个 Funding 记录。每个资助记录都附加到任务记录。每个任务可以有一个或多个资金记录。每个资助记录可能有也可能没有与之关联的资助公司。 这意味着我的数据看起来像这样。

TaskID | FundingID | RCPFundingCompany
100      1000        Intel 
100      1001        IBM 
100      1002        TI 
101      1003        Intel 
101      1004        <null>
101      1005        <null>
102      1006        <null>

RDL 显示按 TaskID 分组的详细信息行,有效地为每个 TaskID 显示一行。所有这些工作正常。我想要完成的是让 FundingCompany 在报告的一个单元格中显示为逗号分隔的列表,如下所示:

        Task ID     RCPFundingCompany
Row1    Task 100    Intel, IBM, TI
Row2    Task 101    Intel
Row3    Task 102    

我的第一个想法是使用 LookupSet 函数将这些值连接到每行的单个单元格中。 所以,我使用这个表达式:

=LookupSet(Fields!TaskID.Value, Fields!TaskID.Value, Fields!RCPCompanies.Value, "TaskReviewSummary")

当我预览我的报告时,我收到了这个错误:

Warning 1   [rsInvalidExpressionDataType] The Value expression used in textrun ‘Textbox10.Paragraphs[0].TextRuns[0]’ returned a data type that is not valid.

我做错了什么? 啊哈,我忘记加入了!

=(Join(LookupSet(Fields!TaskID.Value, Fields!TaskID.Value, Fields!RCPCompanies.Value, "TaskReviewSummary"), ", "))

不幸的是,这会导致以下结果:

        Task ID     RCPFundingCompany
Row1    Task 100    Intel, IBM, TI
Row2    Task 101    Intel, 
Row3    Task 102    , , ,

因为 LookupSet 正在创建一个数组(如果我理解正确的话),它会收集 NULL,然后连接将它们全部连接起来。嘘。

怎么办?

【问题讨论】:

    标签: reporting-services


    【解决方案1】:

    由于 Join 导致 LookupSet 中的 NULL 出现问题,我决定通过将逗号放入存储过程中来消除 Join。

    所以我的数据现在看起来像这样:

    TaskID | FundingID | RCPFundingCompany
    100      1000        Intel, 
    100      1001        IBM, 
    100      1002        TI, 
    101      1003        Intel, 
    101      1004        <null>
    101      1005        <null>
    102      1006        <null>
    

    然后我把我的表达改写成这样:

    =IIF(Len(Join(LookupSet(Fields!TaskID.Value, Fields!TaskID.Value, 
    Fields!RCPCompanies.Value, "TaskReviewSummary"), ""))= 0, 
    "",
    Left((Join(LookupSet(Fields!TaskID.Value, Fields!TaskID.Value, 
    Fields!RCPCompanies.Value, "TaskReviewSummary"), "")),
    abs(Len(Join(LookupSet(Fields!TaskID.Value, Fields!TaskID.Value, 
    Fields!RCPCompanies.Value, "TaskReviewSummary"), ""))-2)))
    

    此表达式首先测试 Concatenated 数据集是否长于 0。如果不是,则不打印任何内容。如果是这样,它将字符串连接在一起,并删除最后一个逗号。我的数据现在看起来很完美!!

    那么,我做错了吗?有没有更好、更明显、更简单的解决方案?

    【讨论】:

      【解决方案2】:

      不幸的是,我最初提交的答案不起作用,因为它没有消除重复。所以我的一些行看起来像这样: IBM、IBM、TI、TI、英特尔

      此时最快的解决方案是使用存储过程中的 For XML Path 功能来连接值,并消除在 SSRS 中使用表达式来连接值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-07-16
        • 1970-01-01
        • 2018-07-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多