按列分组&表达式的一部分中的行,仅在表达式

时间:2016-03-16 20:59:24

标签: reporting-services ssrs-2012 reportbuilder3.0

我试图找到一种方法来使用Group By功能来创建一个表,其中分数的分子按列和行分组,分母只按列分组。

这是我现有的表达方式:

=Round(Sum(Fields!Days_In_Step.Value)/CountDistinct(Fields!ID.Value),1, MidpointRounding.AwayFromZero)

按行(groupName)和列(月/年)分组时,分子(Sum(Fields!Days_In_Step.Value))为我提供了良好的数据,但分母(CountDistinct(Fields!ID.Value))也按行(groupName)分组,我不想要那个。

我有一个SQL解决方案,但如果可能的话,我试图在SSRS表达式中完成整个过程。

修改 样本数据:

enter image description here

看起来像这样。背景是这些分组是天数和"所有"是票数,所以我们试图看看谁的票更长。

这是一个模型,包括使用数据透视表的示例数据集:

enter image description here

修改2

以下是完整的示例数据集:

https://docs.google.com/spreadsheets/d/1rYPMcrLNB-FZN64Fn2-y3FtnM2iQo2VMH7YTdfiVnKM/edit?usp=sharing

我需要按月和年分组,我不想看到"排除"在组行中,但是如果没有从总体中移除它们,则不能将它们从Tablix中过滤掉,这是分母所必需的。

1 个答案:

答案 0 :(得分:1)

您的问题是由聚合函数的范围引起的。使用聚合函数时,它们在默认情况下放置在Tablix中的范围内运行。在您的情况下,Sum()CountDistinct()函数在两个行组(所有者组)和列组(月组)中运行。

幸运的是,您可以指定聚合函数计算聚合的范围,只需在函数中添加组名称:

CountDistinct(Fields!ID.Value,"MonthGroup")

整个表达式是这样的:

=Round(Sum(Fields!Days_In_Step.Value)/
CountDistinct(Fields!ID.Value, "MonthGroup"),1, MidpointRounding.AwayFromZero)
  

"MonthGroup"替换为列中实际的组名   基。

这是使用您提供的样本数据的结果:

enter image description here

我已经用这个表达式向你展示了它是如何产生的:

=Sum(Fields!Days.Value) & "/" 
& CountDistinct(Fields!Ticket.Value,"MonthGroup") & "=" &
Sum(Fields!Days.Value)/CountDistinct(Fields!Ticket.Value,"MonthGroup")
  

请注意,我的列组名为MonthGroup

更新:在CountDistinct函数中确定多个组的范围。

首先我没有过滤数据集,我更喜欢使用Exclude窗口的Hidden属性中的以下表达式隐藏Row Visibility行:

=IIF(Fields!Group.Value="Exclude" OR Fields!Group.Value="-1",true,false)

enter image description here

要按月和年计算不同的ID分组,而不是按组计算,您可以在Month组下创建子组,如下所示:

enter image description here

我的小组名为Group2,我在Group on文本框中使用了此表达式。

enter image description here

=Fields!End_Month.Value & "-" & Fields!End_Year.Value

它将为每个Month-Year组合创建一个组。创建组时,它将作为列组添加,因此您必须删除该行,以便系统提示您是否要删除组和行或仅删除行。仅删除离开该组的行。

现在您必须使用的表达式是

=Round(Sum(Fields!Days.Value)/CountDistinct(Fields!ID.Value, "Group2"),1,MidpointRounding.AwayFromZero)
  

Group2替换为您案例中创建的组的名称。

这是您的场景的全部重现:

enter image description here

如果有帮助,请告诉我。