2014-11-06 33 views
0

我有一个SSRS 2012报告,其中有一个我正在努力的表达。使用LookupSet时表达式错误?

我的报告由存储过程运行。存储过程中的每一行都会返回一个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"), ", ")) 

Unfortuntely,这将导致以下结果:

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

因为LookupSet是创建一个数组(如果我理解正确的话),它收集的NULL,然后加入连接它们的所有。嘘。

怎么办?

回答

0

由于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))) 

这个表达式第一次测试,看是否级联组数据是长如果不是,它不打印任何东西。如果是这样,它将字符串连接在一起,并删除最后一个逗号。我的数据现在看起来完美!

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

0

好吧,不幸的是,我最初提交的答案不起作用,因为它不会消除重复。因此,我的一些行如下所示: IBM,IBM,TI,TI,Intel

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