我有一张表,其中包含年份,月份,产品,尝试次数和成功尝试次数。
数据按年份分组,然后是月份,然后是产品。
我需要按产品添加%成功(成功/尝试),然后按月添加分组,然后按年分组。
在我在一个领域有一年和一个月之前。所以我能够使用Sum(success.value,“period”)/ Sum(attempts.value,“period”)来做到这一点。
但是如果有嵌套组怎么办呢?
我确实看到了一些关于添加参数“recursive”的内容,但还没有让它工作。
答案 0 :(得分:0)
聚合在当前级别的范围内隐式发生。通常只需要=SUM(Fields!Amount.Value)
,Reporting Services会自动处理聚合。
如果您有以下分组,如果您只使用=SUM(Fields!Amount.Value)
,则以下是隐式工作的方式:
Year Month Product Aggregation
2013 Sums all products for all months for 2013
January Sums all products for January 2013
Widget Sums all Widgets for January 2013
Gadget Sums all Gadgets for January 2013
February Sums all products for February 2013
Widget Sums all Widgets for February 2013
Gadget Sums all Gadgets for February 2013
2014 Sums all products for all months for 2014
January Sums all products for January 2014
Widget Sums all Widgets for January 2014
Gadget Sums all Gadgets for January 2014
February Sums all products for February 2014
Widget Sums all Widgets for February 2014
Gadget Sums all Gadgets for February 2014
在您的情况下,无论嵌套量多少,隐式聚合都应该正常工作 - Reporting Services将为您全力以赴。所以这个表达式应该适用于每个分组级别:
=Sum(Fields!Success.Value) / Sum(Fields!Attempts.Value)
SUM
将在当前分组级别的范围内隐式执行。如果没有发生这种情况,您的分组操作可能不正确。查看组属性并查看该组级别实际分组的内容;外部组应为Year,下一组为Month,最后为最内组Product。
这并不是将所有Januarys组合在一起,它表示当该字段更改时,它应该打印前一组的组页脚和下一组的组头。 2013年,当1月份更改为2月份时,它会触发群体变更,同样当1月份更改为2014年2月份时。不同的Januarys,在年度更高级别的分组范围内。
您需要确保数据符合分组所需的顺序,方法是在SQL语句中使用ORDER BY [Year], [Month], [Product]
或在Tablix上实现排序。否则,字段将不是正确的顺序,并且由于字段是随机顺序,因此将不断触发组更改。
如果要在当前范围之外进行聚合,则只需显式定义范围。例如,如果我想添加每行占数据集总数的百分比,那么我需要明确使用数据集作为聚合范围,因此我将在详细行中使用此计算:
=SUM(Fields!Amount.Value) / SUM(Fields!Amount.Value, "MyDataset")
请注意,recursive parameter仅用于具有分层数据的表 - 即父/子关系,例如员工的组织结构图。