虽然这可能直接在 SSRS 中实现,但我通常会直接在数据集查询中计算,然后报告非常简单。
如果您使用的是存储过程并且由于任何原因无法更改它,您仍然可以这样做,我将在下面显示存储过程版本
纯查询版本
我为两个租户模拟了一些数据,每个租户有两个楼层,数据与您的示例相似
然后我只是使用子查询来返回租户的总建筑面积,因此您可以直接在 SSRS 中使用此字段,并使用 FIRST() 或 MAX() 等。
declare @t TABLE(Tenant varchar(20), FloorReference varchar(10), TotalArea float, Value float)
INSERT INTO @t VALUES
('Customer A', 'Lv 1', 4081, 100),
('Customer A', 'Lv 1', 4081, 110),
('Customer A', 'Lv 1', 4081, 120),
('Customer A', 'Lv 1', 4081, 130),
('Customer A', 'Lv 1', 4081, 140),
('Customer A', 'Lv 1', 4081, 150),
('Customer A', 'Lv 2', 4075, 160),
('Customer A', 'Lv 2', 4075, 170),
('Customer A', 'Lv 2', 4075, 180),
('Customer B', 'Lv 1', 1000, 190),
('Customer B', 'Lv 2', 1500, 200)
SELECT
t.*, fa.TenantFloorArea
FROM @t t
JOIN (SELECT Tenant, TenantFloorArea = SUM(TotalArea) FROM (SELECT DISTINCT Tenant, FloorReference, TotalArea FROM @t) x GROUP BY Tenant) fa
ON t.Tenant = fa.Tenant
这将为您提供以下结果
存储过程版本
即使您无法更改存储过程,您仍然可以获得结果,然后像这样扩展它们...
CREATE TABLE #t(Tenant varchar(20), FloorReference varchar(10), TotalArea float, Value float)
INSERT INTO #t
EXEC myStoredProc
SELECT
t.*
, fa.TenantFloorArea
FROM #t t
JOIN (SELECT Tenant, TenantFloorArea = SUM(TotalArea) FROM (SELECT DISTINCT Tenant, FloorReference, TotalArea FROM #t) x GROUP BY Tenant) fa
ON t.Tenant = fa.Tenant
这将给出完全相同的结果。