SSRS - 基于组值的动态表达式

问题描述:

问:如何在SSRS中创建引用列中单元格值的动态表达式?SSRS - 基于组值的动态表达式

表:该表是按日期使用列分组构建的。

使用的软件:使用Visual Studio 2015报表服务器项目。

示例:查看截图。

  1. 这是SSRS设计视图:[![此处输入图像的描述] [1]]

[1]

  1. 这是结果:
  2. enter image description here

    1. 这数据集的一个例子。请注意,初始余额是在第一天,然后我希望它继续到第二天minis其余ID的总和。 [enter image description here3
    开始=>
开始=>
+0

有可能是一种方式,SSRS表达式来做到这一点,但我的直觉是做这在你的数据集,所以你将有两个结束新的'地区''开始'和'全部'。如果您需要帮助,请发送您的数据样本或当前数据集查询。 –

+0

我不认为这在SSRS中是可行的。最好的办法是在SQL端弄清楚这一点。 – ViKiNG

+0

我添加了数据集的图像。 – mkalan44

也许这可以帮助你

DECLARE @TestData TABLE 
    (
     DateColumn DATE , 
     ID INT , 
     Type NVARCHAR(100) , 
     Ammount DECIMAL(18, 2) 
    ); 

INSERT INTO @TestData ( DateColumn , 
          ID , 
          Type , 
          Ammount 
        ) 
VALUES ('8/2/2017', 1, N'1_BeginningCash', 1797791) , 
    ('8/4/2017', 2, N'2_AR', 41526.23) , 
    ('8/4/2017', 5, N'5_PaymentOther', -19863.21) , 
    ('8/5/2017', 3, N'3_Vendor_Rebates', 1200) , 
    ('8/7/2017', 2, N'2_AR', 12163.94) , 
    ('8/9/2017', 2, N'2_AR', 179236.8) , 
    ('8/9/2017', 4, N'4_Payment_Supplier', -1066266.32); 

WITH FirstLevel 
AS (SELECT DateColumn , 
      ID , 
      Type , 
      Ammount , 
      SUM(Ammount) OVER (PARTITION BY DateColumn) AS DateTotal , 
      SUM(Ammount) OVER (ORDER BY DateColumn , 
             ID 
          ) AS RunningTotal 
    FROM @TestData 
    ) , 
    SecondLevel 
AS (SELECT FirstLevel.DateColumn , 
      FirstLevel.ID , 
      FirstLevel.Type , 
      FirstLevel.Ammount , 
      FirstLevel.DateTotal , 
      FirstLevel.RunningTotal , 
      LAG(FirstLevel.RunningTotal, 1, 0) OVER (ORDER BY FirstLevel.DateColumn , 
                   FirstLevel.ID 
                ) LastRunningTotal 
    FROM FirstLevel 
    ) , 
    ThirdLevel 
AS (SELECT SecondLevel.DateColumn , 
      SecondLevel.ID , 
      SecondLevel.Type , 
      SecondLevel.Ammount , 
      SecondLevel.DateTotal 
      + FIRST_VALUE(SecondLevel.LastRunningTotal) OVER (PARTITION BY SecondLevel.DateColumn 
                   ORDER BY SecondLevel.DateColumn , 
                     SecondLevel.ID 
                  ) AS DateTotal , 
      FIRST_VALUE(SecondLevel.LastRunningTotal) OVER (PARTITION BY SecondLevel.DateColumn 
                  ORDER BY SecondLevel.DateColumn , 
                     SecondLevel.ID 
                  ) AS Beginning 
    FROM SecondLevel 
    ) 
SELECT * 
FROM ThirdLevel;