2016-10-21 2 views
0

Я получил запрос от клиента при использовании службы отчетов SSRS. Я как бы новичок в SSRS. надеюсь, что кто-то может помочь мне с проблемой ниже.SSRS 2012 Dynamic Column Number

Я использую общий пример, чтобы показать проблему.

В SSRS DataSet1, данные, как следует

StuId   StuSubject 
-------------------------------- 
1    "Math" 
1    "Geography" 
2    "Science" 
3    "Math" 
3    "History" 
3    "Music" 

В SSRS dataset2, данные как этот

StuId   StuName  
------------------------ 
    1   "Tom" 
    2   "Joseph" 
    3   "Linda" 

В SSRS DataSet3, было бы как

StuId    StuInt 
-------------------------- 
1    "Swim" 
2    "Chess" 
2    "Swim" 
2    "Running" 
3    "Game" 

То, что я хочу в отчете SSRS, будет таким, как этот

StuId StuName StuSubject StuSubject StuSubject StuInt StuInt StuInt


1 "Том" "Математика" "География" NULL "Swim" NULL NULL

2 "Джозеф" "Наука" NULL NULL "Шахматы" «плавать» «Бег»

3 «Линда» «Математика» «История» «Музыка» «Игра» NULL NULL

Хитрость в том, что я не знаю, что это максимальное количество StuSubject для все эти студенты, или, точнее, Мне не нравится устанавливать предел столбцов «StuSubject», потому что в реальном случае может быть сто столбцов. Я подумал о функции LookupSet, но, похоже, используя LookupSet, вы можете присоединить только несколько значений StuSubjects с помощью «,» в одной ячейке.

Любые советы/предложение было бы оценено и спасибо заранее

Edit: я мог бы использовать матрицу управления для одного «присоединиться к» ситуации, но это можно «объединить» несколько наборов данных в один финал один?

+0

Какова цель объединения с использованием функций SSRS? Вы пытаетесь решить проблему с помощью инструмента, который не предназначен для решения таких проблем. Я не говорю, что это невозможно (хотя я не уверен), я просто хочу указать, что лучший способ - решить эту проблему с помощью соответствующего инструмента. – grafgenerator

ответ

0

Решение для вас - использовать элемент отчета Matrix - он позволяет выполнять группировку данных по строкам и столбцам. Ваши данные, возвращенные из БД, должны быть совокупностью этих двух наборов данных, которые у вас есть, - это должно быть множество строк в формате (StuId, StuName, StuSubject). Затем вы можете добавить группировку строк StuId (и группировку дочерних строк по StuName, но это необязательно) и добавить группу столбцов StuSubject. Подробная ячейка будет просто выводить StuSubject.

enter image description here

Обратите внимание, что хотя Lookup * функции позволяют делать объединить данные при обработке отчета, они выполняются при обработке отчета SSRS и, таким образом, конечно, менее эффективны (из моего опыта выражение почти всегда имеет очень плохо влияние на производительность отчета). Кроме того, выполнение отчета об обработке whikle не является каноническим способом разработки отчета, а не лучшим способом использования механизма SSRS, который работает хорошо, когда вам нужна простая группировка или вообще не нужна группировка. Наилучший подход заключается в том, чтобы сгенерировать результат SQL так же близко к тому, что вы хотите отобразить, насколько это возможно, учитывая контекст отчета и здравого смысла.

0

Выполните следующие действия:

Используйте свой DataSet1 в вашей матрице как предложенный подход от LINK.

Ваш запрос будет похож на ниже:

Select StuId,StuSubject 
'StuSubject' + Cast(row_number() over (partition by id order by score) as INT) StuSubjectVal 
from table 

Вы должны получить результат, как показано ниже (после использования матрицы).

StuId  StuSubject1  StuSubject2  StuSubject3...... 

Добавить столбец в вашу матрицу и использовать Lookup from DataSet1 для DataSet2.

=Lookup(Fields!StuId.Value, Fields!StuId.Value, Fields!StuName.Value, "DataSet2") 

Не проверял его, но он должен работать.

+0

, который будет работать, если использовать только набор данных StuSubject, что, если есть еще один набор данных для объединения на основе ключа StuId, тогда как мне это сделать. – Lee

+0

Используйте поиск, как указано в нижней части моего ответа, чтобы объединить несколько наборов данных. – p2k