SSRS 矩阵条件格式
SSRS Matrix conditional formatting
我花了一些时间,但似乎无法完成这个。我有这个非常简单的矩阵报告,如果它与以前的日期不同,我想突出显示金额列。请在下面查看我的报告设计器屏幕和我想要的输出屏幕,其中突出显示了 04/15/2020,因为金额与 04/14/2020 不同。 (对不起,我把它圈起来而不是突出显示它)。
提前感谢您的任何建议。
您可以直接在 SSRS 中执行此操作,但如果您使用动态数量的列(几乎总是如此),它会很混乱并且很少会给出完美的结果。
您最终不得不使用一些 VBA 代码来跟踪最后一个值,但是如果您在背景颜色表达式中使用它,它会把事情搞砸。
像这样的问题很多,大多数要么没有答案,要么依赖于您提前知道日期值是多少。
注意:我在这里使用了窗口函数,我认为这在 SQL 2008 中可用,但不能确定。
首先我创建了一些测试数据
然后我将其汇总到临时 table(假设您需要按项目和日期进行汇总?),在这里我使用窗口函数来获取行号。我们需要这个以防日期有差距。
最后我将临时 table 加入到自身偏移 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")
这为我们提供了最终输出。
我花了一些时间,但似乎无法完成这个。我有这个非常简单的矩阵报告,如果它与以前的日期不同,我想突出显示金额列。请在下面查看我的报告设计器屏幕和我想要的输出屏幕,其中突出显示了 04/15/2020,因为金额与 04/14/2020 不同。 (对不起,我把它圈起来而不是突出显示它)。
提前感谢您的任何建议。
您可以直接在 SSRS 中执行此操作,但如果您使用动态数量的列(几乎总是如此),它会很混乱并且很少会给出完美的结果。
您最终不得不使用一些 VBA 代码来跟踪最后一个值,但是如果您在背景颜色表达式中使用它,它会把事情搞砸。
像这样的问题很多,大多数要么没有答案,要么依赖于您提前知道日期值是多少。
注意:我在这里使用了窗口函数,我认为这在 SQL 2008 中可用,但不能确定。
首先我创建了一些测试数据
然后我将其汇总到临时 table(假设您需要按项目和日期进行汇总?),在这里我使用窗口函数来获取行号。我们需要这个以防日期有差距。
最后我将临时 table 加入到自身偏移 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")
这为我们提供了最终输出。