Изменение заполнения поля максимального значения в группах столбцов в SSRS 2014 - PullRequest
0 голосов
/ 06 мая 2020

У меня есть таблица в SSRS, в которой есть как группы строк, так и столбцы.

Для каждой группы строк [Cat] мне нужно выделить наивысшее значение в группе столбцов, которое является суммой всех подсчетов для этой категории в данном месяце.

Не могу, хоть убей, разобраться, так что если бы кто-нибудь мог помочь, это было бы здорово!

Спасибо

Пример набора данных

Это то, к чему я стремлюсь

Таблица в представлении «Дизайн»

Текущий результат

Ответы [ 2 ]

0 голосов
/ 06 мая 2020

Вот ответ, который, я думаю, подходит вам:

declare @Table as table
(
    [Cat] char(1),
    [Sector] tinyint,
    [Counts] int,
    [Date] date
);
insert into @Table
(
    [Cat],
    [Sector],
    [Counts],
    [Date]
)
values
('A', 1, 4103, '2017-10-01'), 
('A', 1, 3001, '2017-11-01'),
('A', 1, 1128, '2017-12-01'),
('A', 1, 5917, '2018-01-01'),
('A', 1, 9594, '2018-02-01'),
...

Итак, вы знаете, откуда берутся данные.

with [AggregatedData] as
(
    select 
        t.Cat,
        t.Sector,
        t.Counts,
        t.[Date],
        sum(t.Counts) over (partition by t.Cat, t.[Date]) as [SumCounts]
    from @Table as [t]
)
select 
    ad.Cat,
    ad.Sector,
    ad.Counts,
    ad.[Date],
    ad.SumCounts,
    max(ad.SumCounts) over (partition by ad.[Date]) as [MaxSumCounts]
from [AggregatedData] as [ad]

Затем в SSRS вы можете использовать:

=iif(IsNothing(Fields!SumCounts.Value) = FALSE AndAlso Fields!SumCounts.Value = Fields!MaxSumCounts.Value, "Yellow", "Transparent")

Что дает: Output

0 голосов
/ 06 мая 2020

Проблема, с которой вы столкнетесь, заключается в том, что вам придется попытаться использовать вложенные агрегаты с определенными областями действия. Это могло бы быть возможным (но я не думаю, что это ...)

Однако есть довольно простой способ исправить это. Я не могу дать точный ответ, так как не знаю, как выглядит ваш набор данных, но обычно вам придется внести некоторые изменения в свой набор данных, тогда все просто.

Итак, если ваш набор данных выглядит примерно так

Cat    myDate    counts
A      20171001  90
A      20171001  6
B      20171001  18
C      20171001  1
A      20171101  100
A      20171101  20
....
....

Затем агрегируйте все, чтобы в отчете не было реальной агрегации с чем-то вроде

SELECT 
*
, max(counts) OVER(PARTITION BY Cat) as maxInCat
FROM (
        SELECT 
            Cat, myDate
            , SUM(counts) as counts
        FROM myTable 
        GROUP BY Cat, myDate
    ) x

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

Выражение может быть примерно таким:

=IIF(SUM(Fields!counts.Value)>0 and SUM(Fields!counts.Value) = Fields!maxInCat.Value, "Yellow", Nothing)

EDIT

Я обновил фактическое выражение заднего цвета, поскольку оно не учитывает пробелы / нули

Игнорируя тот факт, что столбцы не отсортированы, так как у меня нет времени, вот результат

enter image description here

...