Показать / скрыть группы строк без подытога в SSRS 2005? - PullRequest
0 голосов
/ 05 мая 2011

У меня есть матричный отчет в SSRS 2005, и строки имеют определенные разделы.Представьте себе слева серию

1    $100
2    $400
3    $150
4    $650
5    $500
6    $400
7    $900

И я хочу, чтобы некоторые строки могли быть скрыты.Например, строка 7 - это итоги строк 5 и 6, поэтому я бы хотел +/- рядом со строкой 7, которая будет отображать / скрывать строки 5 и 6. (Обратите внимание, что я не вычисляю эти суммы, они были сделаныбухгалтером, и важно, чтобы я использовал значения в базе данных и не вычислял итоги самостоятельно.)

Теперь у меня есть это отношение "родитель / ребенок" в базе данных, и я мог бы добавить, чтокак группа в строке

       4  1    $100
       4  2    $400
       4  3    $150
   -   4  4    $650
       7  5    $500
       7  6    $400
   -   7  7    $900

И затем я мог бы добавить переключатель к этому первому столбцу, НО я не хочу, чтобы значения были подытогены, когда они свернуты.Я просто хочу, чтобы строки 5/6 исчезли и показывали только строку 7. Вид новинки в SSRS, поэтому любые предложения будут полезны.

Итак, с одной группой переключено:

   +   4  4    $650
       7  5    $500
       7  6    $400
   -   7  7    $900

Другие группыtoggled:

   +   4  4    $650
   +   7  7    $900

И т. д.

       4  1    $100
       4  2    $400
       4  3    $150
   -   4  4    $650
   +   7  7    $900

Как мне сделать это так, чтобы я не пересчитывал родительские строки (строки 4 и 7 в этом примере)?

Если в ASP.NET есть бесплатный веб-элемент управления, который может сделать это, я был бы рад услышать об этом.У меня тонущее чувство, что мне придется самому написать AJAX для достижения этой цели.Я как бы подумал, есть ли какой-нибудь хак для вставки некоторого javascript в отчет, который мог бы этого добиться.

Ответы [ 2 ]

1 голос
/ 06 мая 2011

Фактически у вас есть две проблемы:

  1. Отчет о промежуточных итогах, поступающих из базы данных, не рассчитывается
  2. Динамически скрывать и открывать строки сведений

ВыЭто можно сделать с помощью стандартного табличного отчета следующим образом:

  1. Промежуточные итоги базы данных отчетов

Вы можете сделать это простым SQL (D - таблица сведений, а G - таблица подробностей.Таблица группы):

SELECT D.ParentId, D.ChildId, 
D.Description as DetailDescription, D.Amount AS DetailAmount, 
G.GroupDescription, G.GroupAmount
FROM MyTable D INNER JOIN 
    (SELECT ChildId AS GroupId, Max(Description) as GroupDescription, MAX(Amount) AS GroupAmount 
    FROM MyTable 
    GROUP BY ChildId 
    WHERE ChildId IN (SELECT DISTINCT ParentId FROM MyTable)) G ON GroupId = D.ParentId
WHERE D.ChildId NOT IN (SELECT DISTINCT ParentId FROM MyTable)

Таким образом, мы получаем все строки, которые не являются промежуточными итогами (то есть, строки, в которых ChildId не является ParentId), и во вложенном выборе мы такжепоместив промежуточный итог в каждую строку детализации.Теперь в группе в таблице мы можем просто сообщить поле GroupTotal из нашего набора данных, а не из фактического промежуточного итога.

  1. Динамически скрывать и открывать строки

Создатьгруппа в вашем столе.Здесь вы можете сообщить о GroupTotal просто как поле, а не как итог (хотя вы можете MAX или MIN его, если хотите).

Щелкните правой кнопкой мыши группу деталей и выберите «Изменить».На вкладке «Видимость» установите флажок «Видимость» с помощью другого элемента отчета и выберите имя текстового поля первого текстового поля в группе выше.Установите начальную видимость либо на видимую, либо на скрытую, как требуется.

С макушки головы и непроверенный, но вы должны понять.

Изменить для лучшего объяснения макета (Примечание: SQL выше также отредактирован для отображения описаний)

Я работаю с таблицей, а не с матрицей.

Компоновка будет выглядеть следующим образом (первый столбец показывает, в какой группе вы находитесь):

Table Header                 Parent Id               Child Id   Description                                                    Amount
Group1 Header   =Fields!ParentId.Value                          =Last(Fields!GroupDescription.Value)   =Max(Fields!GroupAmount.Value)
Details Group   =Fields!ParentId.Value  =Fields!ChildId.Value   =Fields!DetailDescription.Value            =Fields!DetailAmount.Value

Для Group1 установлено значение Group on ParentId, отображается только заголовок (без нижнего колонтитула) и текстовое поле ParentIdв этой группе называется ParentIdGroup.Для группы «Подробности» установлен флажок «Видимость может быть переключена другим элементом», а для параметра «Элемент отчета» установлено значение ParentIdGroup.

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

0 голосов
/ 07 мая 2011

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

Поэтому мой матричный отчет выглядит примерно так:

                                            Amount
ParentLineNumber       ChildLineNumber      =Last(Fields!Amount.Value)

У меня все еще есть отдельная проблема, но это отдельный вопрос.

...