我会分两部分来做这件事。首先我会计算你在 SQL 中需要的百分比
下面我已经复制了您的示例数据,然后将其返回并附加了 %。
DECLARE @t TABLE (Category varchar(10), [Period] varchar(4), [Type] varchar(20), Amount float)
INSERT INTO @t VALUES
('TTL_SALES', 'CURR', 'CLOTHES', 1234000),
('TTL_SALES', 'PRE', 'CLOTHES', 1355657),
('TTL_SALES', 'CURR', 'ACCESSORIES', 34000),
('TTL_SALES', 'PRE', 'ACCESSORIES', 36000),
('BG_SALES', 'CURR', 'CLOTHES', 550000),
('BG_SALES', 'PRE', 'CLOTHES', 575000),
('BG_SALES', 'CURR', 'ACCESSORIES', 12000),
('BG_SALES', 'PRE', 'ACCESSORIES', 9000)
SELECT * FROM @t
UNION ALL
SELECT
'BG_%' as Category
, t.[Period]
, t.[Type]
, b.Amount/t.Amount
FROM (SELECT * FROM @t WHERE Category = 'TTL_SALES') t
JOIN (SELECT * FROM @t WHERE Category = 'BG_SALES') b
ON t.[Period] = b.[Period] and t.[Type] = b.[Type]
这给了我们以下结果
我将此查询用作报告中的数据集查询。
我添加了一个包含两个行组的矩阵,一个用于Type,一个用于Category
我为Periodd 添加了一个列组
我将 [data] 单元格设置为 Amount
我在类型组中添加了一个空白行并删除了所有不必要的列。
最后我颠倒了行组的排序顺序,所以结果符合预期。
最终的设计是这样的……
另一个快速变化....
我将Amount 文本框的Format 属性设置为以下...
=IIF(Fields!Category.Value = "BG_%", "p2", "n0")
这会将 BG_% 行格式化为带有 2 位小数的百分比,并将任何其他行格式化为带有千位分隔符和零位小数的数字。
最终输出如下所示。