Как представить неизвестное количество столбцов в SSRS?

Я работаю над довольно сложным отчетом в Sql Server Reporting Services. Мой SP возвращает динамическое количество столбцов, каждый из которых имеет динамическое имя.

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

У меня есть ИП, который все это возвращает. Он делает это, выполняя немного динамического SQL с оператором exec (уродливо, я знаю, но я использую SQL 2000, поэтому опция PIVOT не будет работать)

У меня может быть неограниченное количество ведер, и все или все могут отображаться.

Я нашел это - http://www.codeproject.com/KB/reporting-services/DynamicReport.aspx - что полезно, но в этом примере у него есть конечное количество столбцов, и он просто скрывает или показывает их в зависимости от того, какие из них имеют значения. В моем случае у меня есть переменное количество столбцов, поэтому мне почему-то нужен отчет для добавления столбцов.

Есть предположения?


person JoshReedSchramm    schedule 20.05.2009    source источник
comment
могли бы мы увидеть пример или два ваших данных? есть вероятность, что то, что вы делаете с динамическими столбцами, может стать постоянными столбцами или строками данных.   -  person DForck42    schedule 21.05.2009
comment
Я сейчас не на работе, но у меня было составлено две версии этого. Один использует динамические столбцы, другой - более реляционная версия, где я извлекаю каждый из своего собственного набора данных, и они связаны с другим. Это очень возможно, но я не могу найти способ в SSRS представить эти строки данных в виде столбцов (по сути, их поворот)   -  person JoshReedSchramm    schedule 25.05.2009


Ответы (5)


Если вы знаете максимальное количество столбцов, это можно делать по-своему.

Сначала назовите столбцы с результатом вашего запроса, чтобы вы могли либо передать его в запрос, либо получить его оттуда. Во-вторых, просто создайте отчет, как если бы в нем было максимальное количество столбцов, и скройте их, если они пусты.

Например, мне нужно было создать отчет, в котором будут представлены ежемесячные данные о продажах за период до года, но месяцы не обязательно начинались в январе. Я вернул название месяца в одном столбце, а затем цифры для моего отчета. В .rdl я построил 12 наборов столбцов, по одному на каждый возможный месяц, и просто использовал выражение, чтобы скрыть столбец, если он был пуст. В результате отчет увеличивается до необходимого количества столбцов.

Конечно, это не совсем динамично в том смысле, что оно может расширяться настолько, насколько вам нужно, не зная верхней границы.

person Dan    schedule 12.08.2010
comment
это именно то, чем я закончил. К сожалению, проект был отменен, поэтому я никогда не обновлял этот ответ и забыл, что я сделал. Спасибо. - person JoshReedSchramm; 14.08.2010

Это можно сделать. Я сделал это, и он отлично работает. В моем подходе вам не нужно знать максимальное количество столбцов или показывать и скрывать столбцы. Используйте матрицу и измените свой sp, чтобы возвращать динамические данные в структуру, упомянутую в этом сообщении блога http://sonalimendis.blogspot.com/2011/07/dynamic-column-rdls.html

person SonaliM    schedule 16.07.2011
comment
Это тот самый. Спасибо - person echo; 08.06.2016

Создайте 2 связанных набора данных, первый для содержимого отчета, а второй для списка его меток столбцов.

Набор данных содержимого отчета должен иметь фиксированное количество столбцов и имя. Вы можете выделить максимальное количество столбцов.

В этом примере у меня есть первые 2 столбца как фиксированные или всегда видимые, и максимум 4 столбца должны отображаться по выбору с помощью многозначного параметра или в зависимости от условий запроса. И, как обычно, у нас может быть и общая сумма. Итак, это может выглядеть так:

Fixed01, Fixed02, Dyna01, Dyna02, Dyna03, Dyna04, Total

Второй набор данных со своими значениями будет выглядеть так:

Name    Label
----    -----
Dyna01  Label01
Dyna02  Label02
Dyna03  Label03

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

Теперь создайте параметр с именем, скажем, @columns; заполните его доступные значения и значения по умолчанию вторым набором данных.

Для каждого из этих 4 динамических столбцов установите видимость столбца с помощью следующего выражения:

=IIf(InStr(join(Parameters!columns.Value,","),"Dyna01"),false,true)

И для каждого текстового поля заголовка столбца используйте следующее выражение:

=Lookup("Dyna01", Fields!Name.Value, Fields!Label.Value, "dsColumns")

Что касается Total, вот выражение его видимости:

=       IIf(InStr(join(Parameters!columns.Value, ","), "Dyna01"), false, true)
AndAlso IIf(InStr(join(Parameters!columns.Value, ","), "Dyna02"), false, true)
AndAlso IIf(InStr(join(Parameters!columns.Value, ","), "Dyna03"), false, true)
AndAlso IIf(InStr(join(Parameters!columns.Value, ","), "Dyna04"), false, true)

А вот и его значения:

= IIf(InStr(join(Parameters!columns.Value, ","), "Dyna01"), Fields!C01.Value, 0)
+ IIf(InStr(join(Parameters!columns.Value, ","), "Dyna02"), Fields!C02.Value, 0)
+ IIf(InStr(join(Parameters!columns.Value, ","), "Dyna03"), Fields!C03.Value, 0)
+ IIf(InStr(join(Parameters!columns.Value, ","), "Dyna04"), Fields!C04.Value, 0)

Это все, надеюсь, это поможет.

Бонус в том, что второй набор данных dsColumns может также содержать другие атрибуты столбца, такие как цвет, ширина, шрифты и т. Д.

person Irawan Soetomo    schedule 10.05.2012

Я думаю, что лучший способ сделать это - добавить все столбцы в вашу таблицу и отредактировать ее свойство видимости с помощью аргументов, которые вы получаете от своего SP ... это решит задачу динамического столбца, но при просмотре отчета вы получит много белого пространства, которое вы можете решить с помощью SSRS - Сохранить ширину таблицы при динамическом скрытии столбцов? и ваш отчет будет готов

person Ankit Gupta    schedule 18.10.2012

Мне приходилось делать это в прошлом, и я пришел к выводу: «Вы не можете», однако я не уверен в этом. Если вы найдете решение, я хотел бы услышать об этом.

Проблема, которая приходит на ум, заключается в том, что вам необходимо определить отчет, используя имена столбцов, которые вы собираетесь получить обратно из сохраненной процедуры, и если вы не знаете этих имен или их количества, как можно вы определяете отчет?

Единственная идея, которая у меня была о том, как это сделать, - это динамически создать определение отчета (файл .rdl) через C #, но в то время мне не удалось найти для этого MS API, и я сомневаюсь, что он существует сейчас. . Я нашел проект с открытым исходным кодом, но не пошел по этому пути.

person Casey Williams    schedule 20.05.2009
comment
Пометка как правильный ответ, потому что, ну, мы так и не смогли решить этот вопрос, учитывая платформу, на которой мы были, и ограничения. В итоге мы изменили требование. - person JoshReedSchramm; 24.06.2010