Значение выражения CountDistinct и Logi c Выражение? - PullRequest
1 голос
/ 13 марта 2020

У меня есть такие исходные данные.

Исходные данные

enter image description here

Мне нужно создать два отчет с ним, это первый отчет:

Первый отчет

enter image description here

Рабочее значение может быть достигается с помощью этого выражения RunningValue(Fields!City.Value+Fields!Month.Value,CountDistinct,"Region")

Второй мне нужен следующий отчет:

Второй отчет

enter image description here

Что я могу сделать, чтобы добавить logi c к текущему значению, чтобы избежать нумерации строк с нулевой суммой (суммой)?

1 Ответ

1 голос
/ 13 марта 2020

Я не уверен, что вы можете сделать это с помощью 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» делает то же самое, но разделяет любые нулевые значения так, они не находятся в одном разделе с другими данными.

Это дает нам следующий набор данных enter image description here

Теперь вы можете использовать простую таблицу для отображения результата в вашем первом отчете, используя RowN1

Во втором отчете используйте RowN2 с выражением

=IIF(Fields!Amount.Value=0, Nothing, Fields!RowN2.Value)

. Это просто заставляет отображаться пробел, если сумма равна нулю.

Я сделал это и получил следующие результаты. * 102 8 *

enter image description here

Примечание. Я использовал номер месяца в данных, чтобы упростить сортировку. В отчете я использовал =MonthName(Fields!MonthID.Value), чтобы показать фактическое имя.

...