【问题标题】:Calculate the difference between row values as a percentage以百分比计算行值之间的差异
【发布时间】:2017-12-11 12:49:23
【问题描述】:

我有一个表格,其中包含一个总列中的销售数字。这会重复 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 查询返回数据。

我想在报告中使用表达式,这可能吗?

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

谢谢

【问题讨论】:

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


    【解决方案1】:

    表达式如下所示:

    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;
    

    【讨论】:

      【解决方案2】:

      在数据集中执行此操作比在报表中的表达式要容易得多。使用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;
      

      【讨论】:

        【解决方案3】:

        试试这个:

        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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-11-27
          • 1970-01-01
          • 1970-01-01
          • 2021-12-24
          • 2022-11-29
          • 2021-06-17
          相关资源
          最近更新 更多