Проблема области данных таблицы вложенного отчета SSRS

Я пытаюсь выбрать данные из других наборов данных для включения в свою таблицу. Это выражение, которое у меня есть до сих пор:

=iif(ReportItems!ID.Value=1
, (First(Fields!NumbBreaker.Value, "sp_Permit11"))
,iif(ReportItems!ID.Value=3
, (First(Fields!MoldProd.Value, "sp_PermitASMoldProd"))
,iif(ReportItems!ID.Value =4
, (First(Fields!MoldProd.Value, "sp_PermitASMoldProd"))
,iif(ReportItems!ID.Value =5
, (First(Fields!Thermal.Value, "sp_PermitThermalSand"))
,iif(ReportItems!ID.Value=6
, ((First(Fields!Steel20T.Value, "sp_Permit11")) + (First(Fields!Steel9T.Value, "sp_Permit11")) + (First(Fields!Ductile.Value, "sp_Permit11")))
,iif(ReportItems!ID.Value=7
, ((First(Fields!Steel20T.Value, "sp_Permit11")) + (First(Fields!Steel9T.Value, "sp_Permit11")))
,iif(ReportItems!ID.Value=8
, (First(Fields!IMF.Value, "sp_Permit11"))
,iif(ReportItems!ID.Value=9
, (First(Fields!Ductile.Value, "sp_Permit11"))
,iif(ReportItems!ID.Value = 10
, (First(Fields!DM1.Value, "sp_PermitDM1"))
,iif(ReportItems!ID.Value = 12
, (First(Fields!Zircon.Value, "sp_PermitZircon"))
,iif(ReportItems!ID.Value = 14
, (First(Fields!CMN.Value, "sp_PermitCMN"))
,iif(ReportItems!ID.Value = 15
, (First(Fields!A270.Value, "sp_Permit270"))
,iif(ReportItems!ID.Value= 16
, (First(Fields!A290.Value, "sp_Permit290"))
,iif(ReportItems!ID.Value = 17
, (First(Fields!CM8.Value, "sp_PermitCM8"))
,iif(ReportItems!ID.Value = 20
, (First(Fields!NT.Value, "sp_PermitNT")),"")))))))))))))))

Как я могу сделать это без использования First? Первый только вводит первое значение, но без него я получаю:

Выражения элемента отчета могут ссылаться только на поля в пределах текущей области набора данных или, если внутри агрегата, в указанной области набора данных.


person Bob    schedule 24.09.2014    source источник
comment
Почему вы не хотите использовать в первую очередь? Что ты пытаешься сделать?   -  person Tab Alleman    schedule 24.09.2014
comment
Потому что есть 3 строки значений, которые я хочу отобразить, а не только первая.   -  person Bob    schedule 25.09.2014
comment
Итак, в зависимости от значения ReportItems!ID.Value вы хотите, чтобы в таблице отображались 3 строки из одного из различных наборов данных?   -  person Chris Latta    schedule 25.09.2014
comment
Да, это именно то, что я хочу   -  person Bob    schedule 25.09.2014
comment
Единственный известный мне способ сделать то, что вы хотите, — это объединить все ваши наборы данных в один.   -  person Tab Alleman    schedule 25.09.2014
comment
Я надеялся уйти без необходимости пробовать это. Хранимые процедуры уже довольно длинные, и объединить их все будет некрасиво.   -  person Bob    schedule 25.09.2014
comment
Хорошо, это дало мне правильную информацию, в которой я нуждался!!! Но это также дало мне другую проблему. При первой загрузке подотчета он дает мне 3 строки данных просто отлично, следующая загрузка подотчета дает мне 6 строк, а затем 9 и так далее. Он повторяет правильные 3 строки данных снова и снова. Любая подсказка, что может быть причиной этого?   -  person Bob    schedule 25.09.2014


Ответы (1)


Вы не можете выбрать данные из другого набора данных, не указав, какие данные вам нужны. Вот почему вам нужна функция First — это самый простой способ указать, что выбрать из другого набора данных.

Однако есть и другие способы выбора нужных данных. Я предполагаю, что каждый набор данных имеет уникальное поле ID, поэтому мы можем использовать функцию Lookup. Кроме того, давайте не будем использовать IIF и вместо этого будем использовать Switch, так как это немного удобнее для такого рода операторов.

Теперь ваше выражение будет выглядеть так:

=Switch(
  ReportItems!ID.Value = 1, Lookup(Fields!ID.Value, Fields!ID.Value, Fields!NumbBreaker.Value, "sp_Permit11"), 
  ReportItems!ID.Value = 3, Lookup(Fields!ID.Value, Fields!ID.Value, Fields!MoldProd.Value, "sp_PermitASMoldProd"),
  ReportItems!ID.Value = 4, Lookup(Fields!ID.Value, Fields!ID.Value, Fields!MoldProd.Value, "sp_PermitASMoldProd"),
  ReportItems!ID.Value = 5, Lookup(Fields!ID.Value, Fields!ID.Value, Fields!Thermal.Value, "sp_PermitThermalSand"),
  ReportItems!ID.Value = 6, Lookup(Fields!ID.Value, Fields!ID.Value, Fields!Steel20T.Value, "sp_Permit11") + Lookup(Fields!ID.Value, Fields!ID.Value, Fields!Steel9T.Value, "sp_Permit11") + Lookup(Fields!ID.Value, Fields!ID.Value, Fields!Ductile.Value, "sp_Permit11"), 
  ReportItems!ID.Value = 7, Lookup(Fields!ID.Value, Fields!ID.Value, Fields!Steel20T.Value, "sp_Permit11") + Lookup(Fields!ID.Value, Fields!ID.Value, Fields!Steel9T.Value, "sp_Permit11"),
  ReportItems!ID.Value = 8, Lookup(Fields!ID.Value, Fields!ID.Value, Fields!IMF.Value, "sp_Permit11"), 
  ReportItems!ID.Value = 9, Lookup(Fields!ID.Value, Fields!ID.Value, Fields!Ductile.Value, "sp_Permit11"), 
  ReportItems!ID.Value = 10, Lookup(Fields!ID.Value, Fields!ID.Value, Fields!DM1.Value, "sp_PermitDM1"), 
  ReportItems!ID.Value = 12, Lookup(Fields!ID.Value, Fields!ID.Value, Fields!Zircon.Value, "sp_PermitZircon"), 
  ReportItems!ID.Value = 14, Lookup(Fields!ID.Value, Fields!ID.Value, Fields!CMN.Value, "sp_PermitCMN"), 
  ReportItems!ID.Value = 15, Lookup(Fields!ID.Value, Fields!ID.Value, Fields!A270.Value, "sp_Permit270"), 
  ReportItems!ID.Value = 16, Lookup(Fields!ID.Value, Fields!ID.Value, Fields!A290.Value, "sp_Permit290"), 
  ReportItems!ID.Value = 17, Lookup(Fields!ID.Value, Fields!ID.Value, Fields!CM8.Value, "sp_PermitCM8"), 
  ReportItems!ID.Value = 20, Lookup(Fields!ID.Value, Fields!ID.Value, Fields!NT.Value, "sp_PermitNT"), 
  True, "")

Итак, мы ищем нужное значение в другом наборе данных на основе уникального ключа в текущем наборе данных и возвращаем любое поле из другого набора данных. Бит True, "" в конце фактически является условием else — это то, что возвращается, если никакое другое условие не выполняется.

person Chris Latta    schedule 25.09.2014
comment
Использование LookUp не работает для меня. ReportItems!ID.Value — это параметр, который отправляется из основного отчета. Поэтому на основе этого параметра мне нужно заполнить эту таблицу информацией из одного из моих наборов данных. Каждый набор данных содержит 3 строки информации. Я действительно только начал работать с отчетами, поэтому я надеюсь, что это имеет смысл. - person Bob; 25.09.2014