Вопрос по parameters, reporting-services, multivalue, sql-server-2005 – Службы Reporting Services - запрос с несколькими значениями параметров, не дающий результатов

2

Используя SSRS (SQL Server 2005), я настроил два отчета. Для простоты объяснения давайте назовем ихMAIN_REPORT а такжеSUB_REPORT.

MAIN_REPORT запускает запрос, который возвращает набор областей с несколькими тегами в каждой области:

AREA    Tagname
----------
A1        T1
A1        T2
A2        T3
A3        T4

Если вы выберете одну из ячеек области, она откроетсяSUB_REPORT и передает параметр@ParentTagNames с помощьюJoin(Parameters!ResultsOfSearch.Value,","). ResultsOfSearch равно столбцу тэгов выше (пока не выяснил, как ограничить тэги только в выбранной области, но об этом я буду беспокоиться позже).

SUB_REPORT принимает переданный параметр и запрашивает массивную базу данных для тэга и возвращает минимальное, максимальное и среднее из доступных значений:

SELECT
h.TagName as TagName,
Minimum = convert(decimal(38, 2), Min(h.Value)), 
Maximum = convert(decimal(38, 2), Max(h.Value)), 
Average = convert(decimal(38, 2), Avg(h.Value)) 
FROM INSQL.Runtime.dbo.History h 
WHERE h.TagName in (@ParentTagNames)
AND h.wwVersion = 'LATEST'
AND h.wwRetrievalMode = 'Cyclic'
AND h.wwResolution = '60000'
AND h.Value > '-1.0'
AND h.DateTime >= '2009-09-01 12:00:00'
AND h.DateTime <= '2009-09-02 16:00:00'
GROUP BY h.TagName

Однако если@ParentTagNames равно более чем одному значению, он не возвращает данных. Если он равен одному тегу, он возвращает данные. Я подумал, что это как-то связано с форматированием данных в@ParentTagNames как оно прошло отMAIN_REPORT, но это, похоже, не имеет значения.

Я пробовал следующие форматы:

T1,T2,T3,T4,T5,T6
'T1','T2','T3','T4','T5','T6'

Я убедился, что мульти-значение проверяется на параметр@ParentTagNames, Google успешно подвел меня.

Кто-нибудь?

РЕДАКТИРОВАТЬ: Профилировщик магии!

exec sp_executesql N'SELECT
    h.TagName as TagName,
    Minimum = convert(decimal(38, 2), Min(h.Value)), 
    Maximum = convert(decimal(38, 2), Max(h.Value)), 
    Average = convert(decimal(38, 2), Avg(h.Value)) 
FROM INSQL.Runtime.dbo.History h 
WHERE h.TagName in (@ParentTagNames)
AND h.wwVersion = ''LATEST''
AND h.wwRetrievalMode = ''Cyclic''
--AND h.wwResolution = @Resolution
AND h.wwResolution = ''60000''
AND h.Value > ''-1.0''
--AND h.DateTime >= @StartTime
--AND h.DateTime <= @EndTime

AND h.DateTime >= ''2009-09-01 12:00:00''
AND h.DateTime <= ''2009-09-02 16:00:00''

GROUP BY h.TagName',N'@ParentTagNames nvarchar(46)',@ParentTagNames=N'M12_CPM_Filling_250.Value,M8_Filling_391.Value'
Добавлен профиль магии Jimfletcha
Ох, может быть, моя проблема в самом СОЕДИНЕНИИ; это делает это в одном поле? Jimfletcha
Это ваш запрос в хранимой процедуре или в текстовом виде в отчете? Nick Heidke
Можете ли вы выполнить запрос непосредственно к базе данных с помощью Management Studio? Кроме того, вы знаете, что такое определение столбца для h.TagName? Nick Heidke
В самом отчете; на данный момент нет сохраненных процедур. Jimfletcha

Ваш Ответ

1   ответ
1

что вам может понадобиться вызов SPLIT для MAIN_REPORT, чтобы заставить SSRS принять входящий параметр и поместить его в массив.

Ссылка:http://www.stuffthatjustworks.com/HowToPassMultivalueReportParametersToSubreportsInReportBuilder.aspx

Это должно сделать это, дайте мне знать о любых других необходимых изменениях.
Следующий шаг - выяснить, как двойка заставит его пройти только T1 и T2, когда я нажму A1, а не T1, T2, T3, T4. Следующее препятствие, надеюсь, не будет слишком плохим. Jimfletcha
Ну, сделайте это на MAIN_REPORT. Jimfletcha
Woot! Огромный успех! Jimfletcha
Поверните его, и если вы боретесь, не стесняйтесь задавать отдельный вопрос. Вы проделали отличную работу по объяснению своей проблемы с этим вопросом, поэтому я не сомневаюсь, что вы получите большую помощь по дальнейшим вопросам.

Похожие вопросы