以百分比计算行值之间的差异

时间:2017-12-11 12:49:23

标签: sql-server reporting-services ssrs-2012

我的表中有一个总销售额。这将重复5年的数据。

Year | Sales £
_____|___________
2013 | £100,000
2014 | £150,000
2015 | £135,000
2016 | £200,000

我想添加一个新列,显示每行之间的差异。

Year | Sales £  | % diff
_____|__________|_________
2013 | £100,000 |
2014 | £150,000 |   50
2015 | £135,000 |  (10)
2016 | £200,000 |   48.1

使用MDX查询返回数据。

我想在报告中使用表达式执行此操作,这可能吗?

我感谢任何建议,但想知道这是否可以在报告级别完成。

由于

3 个答案:

答案 0 :(得分:2)

表达式如下:

select t.*,
       100 * (sales - lag(sales) over (order by year)) / lag(sales*1.0) over (order by year)
from t;

您可以在应用程序级别格式化数字。

此表达式可简化为:

    select t.*,
           100 * (-1 + sales / lag(sales*1.0) over (order by year))
from t;

答案 1 :(得分:0)

在数据集中更容易实现,而不是报表中的表达式。使用LAG

WITH CTE AS (
    SELECT *
    FROM (VALUES (2013,100000),(2014,150000),(2015,135000),(2016,200000)) V([Year],Sales))
SELECT [Year], Sales,
       CONVERT(decimal(12,4),CONVERT(decimal(12,4),Sales) / LAG(Sales) OVER (ORDER BY [Year])) - 1 AS Diff
FROM CTE;

答案 2 :(得分:0)

试试这个:

declare @x table ([Year] int, Sales int)
insert into @x values 
(2013, 100000),
(2014, 150000),
(2015, 135000),
(2016, 200000)

select [YEAR],
       Sales,
       cast(round(100.00*(Sales - LAG(Sales, 1) over (order by Year))/LAG(Sales, 1) over (order by Year), 2) as float) as [% diff]
from @x