Службы отчетов SQL Server: как вставить вычисляемую «промежуточную» строку

#reporting-services

#службы отчетов

Вопрос:

предположим, у меня есть следующий отчет:

 Code, Year, Jan, Febr, March.... December, Total
 ABC  2011  13  883   2828      ....       3000
 ABC  2012  20  888   ....

 XYZ  2011 ....
 XYZ  2012 ....
  

Мне нужно вставить «дельта-строку» каждые 2 строки (2 года) для каждого кода, чтобы иметь мой отчет

  Code, Year, Jan, Febr, March.... December, Total
 ABC  2011  13  883   2828      ....       3000
 ABC  2012  20  888   ....
 Delta       7   5  .... 

 XYZ  2011 ....
 XYZ  2012 ....
 Delta ....
  

Как это сделать с помощью служб отчетов Sql Server?

Спасибо

Ответ №1:

Один из способов получить это:

  1. Вставьте вторую строку в самую внутреннюю группу строк, возможно, в группу сведений.
  2. Сделайте видимость этой строки скрытой =IIF(Previous(Fields!Code.Value,"RowGroupNameGoesHere") = Fields!Code.Value , false, true ) [Я знаю, излишне, чтобы IIF возвращал значение true или false, но это упрощает устранение неполадок и делает их более гибкими.]
  3. Используйте предыдущую функцию в ячейках этой строки, чтобы получить разницу между этим и предыдущим элементом, что-то вроде =SUM(Fields.QuantitySold.Value) - Previous(Sum(Fields!QuantitySold.Value),"RowGroupNameGoesHere")

[Я предполагаю, что вы выполняете поворот с помощью табликса и что в вашем наборе данных нет разных столбцов для каждого месяца. Если это произойдет, то сработает тот же подход, но в формуле на шаге 3 используются соответствующие имена полей без суммы.

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

Комментарии:

1. Ваш ответ правильный, но у меня другая проблема: как, если у меня не будет каждый раз строки за 2 года (для каждой группы)? Если я использую предыдущую, я получил неправильные данные…

2. Настройте свою формулу видимости, чтобы скрыть эти строки, или измените математику, чтобы обрабатывать эти значения по-другому (Поля!Код. Значение»RowGroupNameGoesHere») = 2 должно дать вам старт.