我花了一些时间,但似乎无法完成此操作。我有一个非常简单的矩阵报表,如果与以前的日期不同,我想突出显示“金额”列。我的报表设计器屏幕和所需的输出屏幕(突出显示为04/15/2020),请参见下文,因为金额与04/14/2020不同。 (对不起,我圈了一下,而不是高亮了它)。
谢谢您的任何建议。
您可以直接在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
这给我们以下结果...
现在我们要做的就是在矩阵中使用它,并将文本框的BackgroundColor
属性设置为类似的内容
=IIF(Fields!diff.Value = 0, Nothing, "#ff8c8c")
这为我们提供了最终输出。