SSRS Matrix условное форматирование - PullRequest
0 голосов
/ 16 апреля 2020

Я провел некоторое время, но, кажется, не могу этого сделать sh. У меня очень простой матричный отчет, и я хотел бы выделить столбец Сумма, если он отличается от предыдущей даты. Пожалуйста, см. Ниже для моего экрана дизайнера отчетов и моего желаемого экрана вывода с выделенным 15.04.2020, так как сумма отличается от 14.04.2020. (извините, я обвел его, выделив его).

Заранее благодарю за любые предложения.

enter image description here

enter image description here

enter image description here

enter image description here

1 Ответ

1 голос
/ 16 апреля 2020

Вы можете сделать это напрямую в SSRS, но он беспорядочный и редко даст превосходные результаты, если вы используете динамическое c количество столбцов, что почти всегда так.

В конечном итоге вам придется использовать немного кода VBA для отслеживания последнего значения, но если вы используете его, например, в выражении цвета фона, это может испортить ситуацию.

Существует множество подобных вопросов, большинство из которых либо остаются без ответа, либо полагаются на вас. зная, какие значения даты заранее.


ПРИМЕЧАНИЕ : я использовал здесь оконную функцию, я думаю, что она доступна в SQL 2008, но не может быть уверенной.

Итак, для начала я создал несколько тестовых данных

Затем я суммирую это во временную таблицу (при условии, что вам нужно выполнить суммирование по проекту и дате?), Здесь я использую оконную функцию, чтобы получить номер строки. Это необходимо в случае, если в датах есть пробелы.

Наконец, я присоединяю временную таблицу к себе, смещая ее на 1 строку (используя номер строки)

Вот полный код, который я использовал в мой набор данных.

-- create some sample data
DECLARE @t TABLE(dt date, project varchar(10), amount float)
INSERT INTO @t VALUES
('2020-04-01', 'A', 10),('2020-04-01', 'A', 10),('2020-04-01', 'B', 10),('2020-04-01', 'C', 10),('2020-04-01', 'C', 10),
('2020-04-02', 'A', 20),('2020-04-02', 'A', 20),('2020-04-02', 'B', 10),('2020-04-02', 'C', 20),('2020-04-02', 'C', 20),
('2020-04-04', 'A', 25),('2020-04-04', 'A', 15),('2020-04-04', 'B', 10),('2020-04-04', 'C', 25),('2020-04-04', 'C', 25)

-- summarise and add a row number
SELECT project, dt, SUM(amount) as amount , ROW_NUMBER() OVER(PARTITION BY project ORDER BY dt) as RowN
    into #x 
    FROM @t 
    GROUP BY project, dt 

-- join #x to itself offseting by 1 row and calc diff vs previous amount
SELECT 
        cur.*
       , cur.amount - ISNULL(prv.amount, cur.amount) as diff -- if there is no previous amount compare to current amount to difference is zero
    FROM #x cur 
        LEFT JOIN #x prv
            ON cur.project = prv.project
            and cur.RowN = prv.RowN + 1

Это дает нам следующие результаты ...

enter image description here

Теперь все, что нам нужно сделать, это использовать в нашей матрице и установите для свойства BackgroundColor текстового поля что-то вроде

=IIF(Fields!diff.Value = 0, Nothing, "#ff8c8c")

Это даст нам это в качестве окончательного результата.

enter image description here

...