Я не уверен, что вы можете сделать это с помощью RunningValue, другие люди могут знать способ.
То, что я сделал, это переместил логи c в запрос.
I воспроизвел некоторые данные в соответствии с номерами вашего окончательного отчета (данные вашего образца не соответствуют выводу образца отчета).
Вот примеры данных, которые я использовал.
DECLARE @t TABLE(Region varchar(10), City varchar(10), MonthID int, Amount int)
INSERT INTO @t VALUES
('Asia', 'Tokyo', 4, 1000),
('Asia', 'Tokyo', 4, 500),
('Asia', 'Tokyo', 5, 2000),
('Asia', 'Tokyo', 5, -2000),
('Asia', 'Tokyo', 6, 1000),
('Asia', 'Tokyo', 6, -500),
('Asia', 'Bangkok', 4, 500),
('Asia', 'Bangkok', 4, 500),
('Asia', 'Bangkok', 5, 3000),
('Asia', 'Bangkok', 5, -500),
('Asia', 'Bangkok', 6, -750),
('Asia', 'Bangkok', 6, 750)
SELECT
*
, ROW_NUMBER() OVER(PARTITION BY Region, City ORDER BY MonthID) as RowN1
, ROW_NUMBER() OVER(PARTITION BY (CASE Amount WHEN 0 THEN 0 ELSE 1 END), Region, City ORDER BY MonthID) as RowN2
FROM
(
SELECT
Region, City, MonthID
, SUM(Amount) AS Amount
FROM @t
GROUP BY Region, City, MonthID
) x
ORDER BY Region, City DESC, MonthID
Я использовал функцию ROW_NUMBER, чтобы назначьте номера строк для обоих отчетов.
Первый «RowN1» - это простой номер строки в городе
Второй «RowN2» делает то же самое, но разделяет любые нулевые значения так, они не находятся в одном разделе с другими данными.
Это дает нам следующий набор данных
Теперь вы можете использовать простую таблицу для отображения результата в вашем первом отчете, используя RowN1
Во втором отчете используйте RowN2 с выражением
=IIF(Fields!Amount.Value=0, Nothing, Fields!RowN2.Value)
. Это просто заставляет отображаться пробел, если сумма равна нулю.
Я сделал это и получил следующие результаты. * 102 8 *
Примечание. Я использовал номер месяца в данных, чтобы упростить сортировку. В отчете я использовал =MonthName(Fields!MonthID.Value)
, чтобы показать фактическое имя.