Фактически у вас есть две проблемы:
- Отчет о промежуточных итогах, поступающих из базы данных, не рассчитывается
- Динамически скрывать и открывать строки сведений
ВыЭто можно сделать с помощью стандартного табличного отчета следующим образом:
- Промежуточные итоги базы данных отчетов
Вы можете сделать это простым 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 из нашего набора данных, а не из фактического промежуточного итога.
- Динамически скрывать и открывать строки
Создатьгруппа в вашем столе.Здесь вы можете сообщить о 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.
Сейчас я смоделировал этот отчет, и он работает так, как вы описываете - то, что выглядит как промежуточные итоги, на самом деле является полями базы данных, а описание отображается в строке группы.