SSRS矩阵条件格式

问题描述 投票:0回答:1

我花了一些时间,但似乎无法完成此操作。我有一个非常简单的矩阵报表,如果与以前的日期不同,我想突出显示“金额”列。我的报表设计器屏幕和所需的输出屏幕(突出显示为04/15/2020),请参见下文,因为金额与04/14/2020不同。 (对不起,我圈了一下,而不是高亮了它)。

谢谢您的任何建议。

enter image description here

enter image description here

enter image description here

enter image description here

reporting-services ssrs-2008
1个回答
1
投票

您可以直接在SSRS中执行此操作,但是它很凌乱,如果您使用的列数是动态的,则几乎不会给出完美的结果,这几乎总是这种情况。

您最终不得不使用一些VBA代码来跟踪最后一个值,但是例如,如果在背景颜色表达式中使用该值,则会使事情变得混乱。

像这样有很多问题,大多数都无法回答,或者取决于您提前知道日期值是什么。


NOTE:我在这里使用了窗口函数,我认为这在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

© www.soinside.com 2019 - 2024. All rights reserved.