更改 SSRS 2014 列组中最大值的字段填充
Changing field fill of max value in column groups on SSRS 2014
我在 SSRS 中有一个 table,它同时具有行组和列组。
对于每个行组 [Cat],我需要突出显示列组中的最大值,即给定月份该类别的所有计数的总和。
我这辈子都弄不明白,所以如果有人能提供帮助那就太好了!
谢谢
Example of dataset
This is what I'm aiming for
Table in Design View
Current outcome
您将面临的问题是您将不得不尝试使用定义了范围的嵌套聚合。这可能是可能的(但我不认为这是...)
虽然有一种相当简单的方法可以修复它。我不能给出确切的答案,因为我不知道您的数据集是什么样的,但通常您必须对数据集进行一些更改,然后很简单。
所以假设你的数据集看起来像这样
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)
编辑
我更新了实际的背景色表达式,因为它没有考虑 blanks/zeros
忽略列未排序的事实,因为我没有时间,这是结果
我认为这是您需要的答案:
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")
给出:
我在 SSRS 中有一个 table,它同时具有行组和列组。
对于每个行组 [Cat],我需要突出显示列组中的最大值,即给定月份该类别的所有计数的总和。
我这辈子都弄不明白,所以如果有人能提供帮助那就太好了!
谢谢
Example of dataset
This is what I'm aiming for
Table in Design View
Current outcome
您将面临的问题是您将不得不尝试使用定义了范围的嵌套聚合。这可能是可能的(但我不认为这是...)
虽然有一种相当简单的方法可以修复它。我不能给出确切的答案,因为我不知道您的数据集是什么样的,但通常您必须对数据集进行一些更改,然后很简单。
所以假设你的数据集看起来像这样
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)
编辑
我更新了实际的背景色表达式,因为它没有考虑 blanks/zeros
忽略列未排序的事实,因为我没有时间,这是结果
我认为这是您需要的答案:
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")
给出: