2014-11-06 2 views
0

У меня есть отчет SSRS 2012 с выражением, с которым я борюсь.Ошибка выражения при использовании LookupSet?

В моем отчете выполняется хранимая процедура. Каждая строка хранимой процедуры возвращает отчет о финансировании. Каждая запись о финансировании привязана к записи задачи. Каждая Задача может иметь одну или несколько записей Финансирования. Каждая запись Финансирования может иметь или не иметь связанную с ней Финансирующую компанию. Это означает, что мои данные выглядят так.

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. 

Что я делаю неправильно? A-ha, я забыл Присоединиться!

=(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 создает массив (если я правильно понимаю), она собирает NULLs, а затем присоединиться к Объединяет их всех. Бу.

Что делать?

ответ

0

С тех пор, как Join вызвал проблемы с NULL в LookupSet, я решил исключить 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. Если нет, он ничего не печатает. Если это так, он соединяет строку вместе и удаляет последнюю запятую. Теперь мои данные выглядят отлично!

Итак, я сделал это неправильно? Было ли лучшее, более очевидное, менее сложное решение?

0

Ну, к сожалению, ответ, который я изначально представил, не работает, потому что он не устраняет дубликатов. Поэтому некоторые из моих строк выглядели бы так: IBM, IBM, TI, TI, Intel

Самое быстрое решение на данном этапе состояло в том, чтобы использовать функцию «Использовать путь к XML» в Хранимой процедуре, чтобы объединить значения и устранить использование выражения в SSRS для конкатенации значений.

Смежные вопросы