SSRS - 基于组值的动态表达式
问题描述:
问:如何在SSRS中创建引用列中单元格值的动态表达式?SSRS - 基于组值的动态表达式
表:该表是按日期使用列分组构建的。
使用的软件:使用Visual Studio 2015报表服务器项目。
示例:查看截图。
- 这是SSRS设计视图:[![此处输入图像的描述] [1]]
[1]
- 这是结果:
- 这数据集的一个例子。请注意,初始余额是在第一天,然后我希望它继续到第二天minis其余ID的总和。 [3
答
也许这可以帮助你
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;
有可能是一种方式,SSRS表达式来做到这一点,但我的直觉是做这在你的数据集,所以你将有两个结束新的'地区''开始'和'全部'。如果您需要帮助,请发送您的数据样本或当前数据集查询。 –
我不认为这在SSRS中是可行的。最好的办法是在SQL端弄清楚这一点。 – ViKiNG
我添加了数据集的图像。 – mkalan44