Reporting services 使用LookUnder时出现表达式错误?

Reporting services 使用LookUnder时出现表达式错误?,reporting-services,Reporting Services,我有一份SSRS 2012报告,其中有一个表达我很纠结 我的报表由存储过程运行。存储过程中的每一行都返回一条资金记录。每个资金记录都附加到一个任务记录。每个任务都可以有一个或多个资金记录。每个资金记录可能有也可能没有与之关联的资金公司。 这意味着我的数据看起来像这样 TaskID | FundingID | RCPFundingCompany 100 1000 Intel 100 1001 IBM 100 1002 TI

我有一份SSRS 2012报告,其中有一个表达我很纠结

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

TaskID | FundingID | RCPFundingCompany
100      1000        Intel 
100      1001        IBM 
100      1002        TI 
101      1003        Intel 
101      1004        <null>
101      1005        <null>
102      1006        <null>
我的第一个想法是使用lookupper函数将这些值连接到每行的单个单元格中。 所以,我用这个表达式:

=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正在创建一个数组,所以它收集空值,然后连接将它们全部连接起来。嘘


怎么办

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

因此,我的数据如下所示:

        Task ID     RCPFundingCompany
Row1    Task 100    Intel, IBM, TI
Row2    Task 101    Intel
Row3    Task 102    
TaskID | FundingID | RCPFundingCompany
100      1000        Intel, 
100      1001        IBM, 
100      1002        TI, 
101      1003        Intel, 
101      1004        <null>
101      1005        <null>
102      1006        <null>
此表达式首先测试连接的数据集是否长于0。如果没有,则不会打印任何内容。如果是,则将字符串连接在一起,并删除最后一个逗号。我的数据现在看起来很完美


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

很遗憾,我最初提交的答案不起作用,因为它没有消除重复项。因此,我的一些行将如下所示: IBM,IBM,TI,TI,英特尔

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

=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)))