占列总数的百分比 SSRS 矩阵
% of Column Total SSRS Matrix
我正在尝试将 SSRS 行子组值显示为其按行子组分组的列总数的百分比。
我的目标:
注意红色值如何显示为 RowSubGroupTotal 中值的百分比,而 RowSubGroupTotal 显示为 ColumnGroup 总数的百分比。
我目前拥有的:
红色值显示为 ColumnGroup 总数的百分比(就像 RowSubGroupTotals 所做的那样)。
如何将这些红色值更改为汇总到 100% - 它们的值占 RowSubGroupTotal 的百分比?
我的矩阵:
原始数据:RawData
我希望红色值是 RowSubGroupTotal 的百分比(3/4 = 75%,1/4 = 25%)。我希望 RowSubGroupTotal 是列小计的百分比(4/25 = 16%,9/25 = 36%)。
假设该字段名为 Amount
,您的外部行组名为 BlueRowGroup
,您的数据集名为“DataSet1”,那么红色行的表达式类似于
=SUM(Fields!Amount.Value) / SUM(Fields!Amount.Value, "BlueRowGroup")
蓝色行是
=SUM(Fields!Amount.Value) / SUM(Fields!Amount.Value, "DataSet1")
表达式的第一部分没有说明范围,因为这将是表达式所在的文本框的范围。第二部分说明了我们要除以的总金额的范围,所以对于红色行,我们要将金额除以下一组的总金额 (BlueRowGoup
)。对于蓝色行,我们希望将金额除以整个数据集的总数,因此我们使用数据集名称作为范围。
这是一个有效的例子....
我创建了一些数据来反映您的示例数据,只是更改了名称以避免将字段与 groups/scopes 混淆。
DECLARE @t TABLE(RowGroup varchar(10), SubGroup varchar(10), Amount int)
INSERT INTO @t VALUES
('Alpha', 'Red', 2),
('Alpha', 'Red', 1),
('Alpha', 'Green', 0),
('Alpha', 'Blue', 1),
('Bravo', 'Red', 1),
('Bravo', 'Green', 0),
('Bravo', 'Blue', 4),
('Bravo', 'Blue', 4),
('Charlie', 'Red', 0),
('Charlie', 'Green', 4),
('Charlie', 'Blue', 2),
('Charlie', 'Blue', 6)
SELECT * FROM @t
我添加了一个简单的 tablix,显示了实际的基础数字和百分比,看起来像这样。
我在这个答案中设置了表达式。
这给出了以下结果...
通常,您可以使用 ReportItems 表达式来创建比率。
在任何情况下,您都不需要原始值,您可以使用隐藏列进行计算
你的表情可能像
vs rowgroup1 总计(黄色)
=Sum(Fields!val.Value) / ReportItems!Textbox9.Value
vs rowgroup2 总计(橙色)
=Sum(Fields!val.Value) / ReportItems!Textbox12.Value
对于 ReportItem 引用,请使用相关的单元格名称
我正在尝试将 SSRS 行子组值显示为其按行子组分组的列总数的百分比。
我的目标:
注意红色值如何显示为 RowSubGroupTotal 中值的百分比,而 RowSubGroupTotal 显示为 ColumnGroup 总数的百分比。
我目前拥有的:
红色值显示为 ColumnGroup 总数的百分比(就像 RowSubGroupTotals 所做的那样)。
如何将这些红色值更改为汇总到 100% - 它们的值占 RowSubGroupTotal 的百分比?
我的矩阵:
原始数据:RawData
我希望红色值是 RowSubGroupTotal 的百分比(3/4 = 75%,1/4 = 25%)。我希望 RowSubGroupTotal 是列小计的百分比(4/25 = 16%,9/25 = 36%)。
假设该字段名为 Amount
,您的外部行组名为 BlueRowGroup
,您的数据集名为“DataSet1”,那么红色行的表达式类似于
=SUM(Fields!Amount.Value) / SUM(Fields!Amount.Value, "BlueRowGroup")
蓝色行是
=SUM(Fields!Amount.Value) / SUM(Fields!Amount.Value, "DataSet1")
表达式的第一部分没有说明范围,因为这将是表达式所在的文本框的范围。第二部分说明了我们要除以的总金额的范围,所以对于红色行,我们要将金额除以下一组的总金额 (BlueRowGoup
)。对于蓝色行,我们希望将金额除以整个数据集的总数,因此我们使用数据集名称作为范围。
这是一个有效的例子....
我创建了一些数据来反映您的示例数据,只是更改了名称以避免将字段与 groups/scopes 混淆。
DECLARE @t TABLE(RowGroup varchar(10), SubGroup varchar(10), Amount int)
INSERT INTO @t VALUES
('Alpha', 'Red', 2),
('Alpha', 'Red', 1),
('Alpha', 'Green', 0),
('Alpha', 'Blue', 1),
('Bravo', 'Red', 1),
('Bravo', 'Green', 0),
('Bravo', 'Blue', 4),
('Bravo', 'Blue', 4),
('Charlie', 'Red', 0),
('Charlie', 'Green', 4),
('Charlie', 'Blue', 2),
('Charlie', 'Blue', 6)
SELECT * FROM @t
我添加了一个简单的 tablix,显示了实际的基础数字和百分比,看起来像这样。
我在这个答案中设置了表达式。
这给出了以下结果...
通常,您可以使用 ReportItems 表达式来创建比率。 在任何情况下,您都不需要原始值,您可以使用隐藏列进行计算
你的表情可能像
vs rowgroup1 总计(黄色)
=Sum(Fields!val.Value) / ReportItems!Textbox9.Value
vs rowgroup2 总计(橙色)
=Sum(Fields!val.Value) / ReportItems!Textbox12.Value
对于 ReportItem 引用,请使用相关的单元格名称