在表达式的一部分按列和行分组,在表达式的另一部分仅按列分组
Group by column & row in one part of expression, group by column only in another part of expression
我正在尝试找到一种使用 Group By
功能创建 table 的方法,其中分数的分子按列和行分组,而分母仅按列。
这是我现有的表达式:
=Round(Sum(Fields!Days_In_Step.Value)/CountDistinct(Fields!ID.Value),1, MidpointRounding.AwayFromZero)
按行 (groupName) 和列 (month/year) 分组时,分子 (Sum(Fields!Days_In_Step.Value)
) 提供了良好的数据,但分母 (CountDistinct(Fields!ID.Value)
) 也按行分组(groupName) 我不想这样。
我有一个 SQL 解决方案,但如果可能的话,我正在尝试在 SSRS 表达式中完成整个过程。
编辑
示例数据:
看起来像这样。背景是这些分组是天数,"all" 是票数,所以我们试图看看谁在票上坐的时间更长。
这是一个模型,包括使用数据透视表的示例数据集 table:
编辑 2
这是一个完整的示例数据集:
https://docs.google.com/spreadsheets/d/1rYPMcrLNB-FZN64Fn2-y3FtnM2iQo2VMH7YTdfiVnKM/edit?usp=sharing
我需要按月和年进行分组,我不想在组行中看到 "Exclude",但是如果不从总体中删除它们就无法从 tablix 中过滤掉,这是分母所必需的。
您的问题是由聚合函数的作用域引起的。当您使用聚合函数时,它们 运行 在默认情况下放置在 tablix 中的范围内。在您的情况下,Sum()
和 CountDistinct()
函数在行组(所有者组)和列组(月组)中都是 运行ning。
幸运的是,您可以指定聚合函数计算聚合的范围,只需在函数中添加组名即可:
CountDistinct(Fields!ID.Value,"MonthGroup")
整个表达式是这样的:
=Round(Sum(Fields!Days_In_Step.Value)/
CountDistinct(Fields!ID.Value, "MonthGroup"),1, MidpointRounding.AwayFromZero)
Replace "MonthGroup"
by the actual name of your group in columns
group.
这是使用您提供的样本数据的结果:
我用这个表达式来告诉你它是如何产生的:
=Sum(Fields!Days.Value) & "/"
& CountDistinct(Fields!Ticket.Value,"MonthGroup") & "=" &
Sum(Fields!Days.Value)/CountDistinct(Fields!Ticket.Value,"MonthGroup")
Note my column group is named MonthGroup
.
更新: 在 CountDistinct 函数中限定多个组。
首先我没有过滤数据集,我更喜欢在 Row Visibility
属性 的 Hidden
属性 window 中使用以下表达式隐藏 Exclude
行]:
=IIF(Fields!Group.Value="Exclude" OR Fields!Group.Value="-1",true,false)
要按月和年而不是按组计算不同的 ID 分组,您可以在月组下面创建一个子组,如下所示:
我的群组名为 Group2
,我在 Group on
文本框中使用了这个表达式。
=Fields!End_Month.Value & "-" & Fields!End_Year.Value
它将为每个 Month-Year
组合创建一个组。当您创建组时,它将作为列组添加,因此您必须删除该行,因此系统会提示您是要删除组和行还是仅删除行。仅删除离开组的行。
现在你必须使用的表达方式是
=Round(Sum(Fields!Days.Value)/CountDistinct(Fields!ID.Value, "Group2"),1,MidpointRounding.AwayFromZero)
Replace Group2
by the name of the created group in your case.
这是您场景的完整重现:
如果有帮助请告诉我。
我正在尝试找到一种使用 Group By
功能创建 table 的方法,其中分数的分子按列和行分组,而分母仅按列。
这是我现有的表达式:
=Round(Sum(Fields!Days_In_Step.Value)/CountDistinct(Fields!ID.Value),1, MidpointRounding.AwayFromZero)
按行 (groupName) 和列 (month/year) 分组时,分子 (Sum(Fields!Days_In_Step.Value)
) 提供了良好的数据,但分母 (CountDistinct(Fields!ID.Value)
) 也按行分组(groupName) 我不想这样。
我有一个 SQL 解决方案,但如果可能的话,我正在尝试在 SSRS 表达式中完成整个过程。
编辑 示例数据:
看起来像这样。背景是这些分组是天数,"all" 是票数,所以我们试图看看谁在票上坐的时间更长。
这是一个模型,包括使用数据透视表的示例数据集 table:
编辑 2
这是一个完整的示例数据集:
https://docs.google.com/spreadsheets/d/1rYPMcrLNB-FZN64Fn2-y3FtnM2iQo2VMH7YTdfiVnKM/edit?usp=sharing
我需要按月和年进行分组,我不想在组行中看到 "Exclude",但是如果不从总体中删除它们就无法从 tablix 中过滤掉,这是分母所必需的。
您的问题是由聚合函数的作用域引起的。当您使用聚合函数时,它们 运行 在默认情况下放置在 tablix 中的范围内。在您的情况下,Sum()
和 CountDistinct()
函数在行组(所有者组)和列组(月组)中都是 运行ning。
幸运的是,您可以指定聚合函数计算聚合的范围,只需在函数中添加组名即可:
CountDistinct(Fields!ID.Value,"MonthGroup")
整个表达式是这样的:
=Round(Sum(Fields!Days_In_Step.Value)/
CountDistinct(Fields!ID.Value, "MonthGroup"),1, MidpointRounding.AwayFromZero)
Replace
"MonthGroup"
by the actual name of your group in columns group.
这是使用您提供的样本数据的结果:
我用这个表达式来告诉你它是如何产生的:
=Sum(Fields!Days.Value) & "/"
& CountDistinct(Fields!Ticket.Value,"MonthGroup") & "=" &
Sum(Fields!Days.Value)/CountDistinct(Fields!Ticket.Value,"MonthGroup")
Note my column group is named
MonthGroup
.
更新: 在 CountDistinct 函数中限定多个组。
首先我没有过滤数据集,我更喜欢在 Row Visibility
属性 的 Hidden
属性 window 中使用以下表达式隐藏 Exclude
行]:
=IIF(Fields!Group.Value="Exclude" OR Fields!Group.Value="-1",true,false)
要按月和年而不是按组计算不同的 ID 分组,您可以在月组下面创建一个子组,如下所示:
我的群组名为 Group2
,我在 Group on
文本框中使用了这个表达式。
=Fields!End_Month.Value & "-" & Fields!End_Year.Value
它将为每个 Month-Year
组合创建一个组。当您创建组时,它将作为列组添加,因此您必须删除该行,因此系统会提示您是要删除组和行还是仅删除行。仅删除离开组的行。
现在你必须使用的表达方式是
=Round(Sum(Fields!Days.Value)/CountDistinct(Fields!ID.Value, "Group2"),1,MidpointRounding.AwayFromZero)
Replace
Group2
by the name of the created group in your case.
这是您场景的完整重现:
如果有帮助请告诉我。