Ssrs 2008 SSRS 2008中的分组-筛选
我是SSRS新手。我想按customerid对事务表进行分组,并计算每个customerid有多少事务。我能做到 但是,我想按该计数排序,和/或按该计数过滤。你怎么知道的Ssrs 2008 SSRS 2008中的分组-筛选,ssrs-2008,Ssrs 2008,我是SSRS新手。我想按customerid对事务表进行分组,并计算每个customerid有多少事务。我能做到 但是,我想按该计数排序,和/或按该计数过滤。你怎么知道的 谢谢 要在行组上设置排序和筛选,请右键单击行组 您可以在此处访问组排序和筛选属性。它们都应该允许您根据计数列的名称设置规则。选项1 如果不需要在报告中显示事务,那么应该在查询中的数据库级别执行聚合,而不是由SSR执行聚合。您将获得以下好处: 更快的渲染。 通过网络发送的数据将减少。 SSRS引擎需要处理的数据将更少,因此任何订
谢谢 要在行组上设置排序和筛选,请右键单击行组 您可以在此处访问组排序和筛选属性。它们都应该允许您根据计数列的名称设置规则。选项1 如果不需要在报告中显示事务,那么应该在查询中的数据库级别执行聚合,而不是由SSR执行聚合。您将获得以下好处: 更快的渲染。 通过网络发送的数据将减少。 SSRS引擎需要处理的数据将更少,因此任何订购都可以更快地执行。 通过将最常见/期望的值放入基础查询的ORDER by子句中,可以对数据集进行“预排序”。 因此,任何渲染都可以提高速度。 任何过滤器都可以直接应用于查询返回的聚合数据,而无需尝试在SSR中执行复杂的表达式。 这也将在渲染时提高性能。 可以在聚合查询的HAVING子句中使用筛选器参数 同样,由于网络中的数据较少,需要处理,因此性能得到提升。 为您的报告提供一定程度的交互性,而不是试图预先定义用户喜好,并在表达式或“最佳猜测”上设置过滤条件。 实例 -将筛选出拥有2笔或更少交易的任何客户 将@Filter声明为int=2 ; 选择 客户ID ,COUNTTransactionId 从…起 交易 分组 客户ID 有 COUNTTransactionId>@过滤器 选择2 如果仍然需要显示事务,则向查询中添加一个额外的列,该列使用OVER子句和PARTITION BY customerid执行计数,如下所示:
COUNT(transactions) OVER (PARTITION BY customerid) AS CustomerTransactionCount
假设一个非常简单的表结构,您将得到如下查询结构:
选择
客户ID
,事务ID
,交易属性_1
,交易属性2
,交易属性_3
.
.
.
,交易属性
,COUNTTransactionId,按CustomerId作为CustomerTransactionCount划分
从…起
交易
您可以将CustomerTransactionCount用作SSRS中任何行/列组中的筛选和排序列
这种方法的缺点
窗口函数,即使用过分区。。。无法在包含子句时使用,因为未使用GROUP BY子句。这意味着任何过滤都必须由SSR执行。
解决方案选项
我们接受上面的查询并在其周围包装一个CTE。这将允许我们根据聚合结果进行筛选。
将聚合放在派生表中。
CTE示例
-过滤变量
将@Filter声明为int=2
;
使用数据集作为
-使用事务信息和聚合列构建数据集
选择
客户ID
,事务ID
,交易属性_1
,交易属性2
,交易属性_3
.
.
.
,交易属性
,COUNTTransactionId,按CustomerId作为CustomerTransactionCount划分
从…起
交易
-过滤和返回数据
挑选*
从数据集
其中CustomerTransactionCount>@过滤器
派生表示例
-过滤变量
将@Filter声明为int=2
;
选择
*
从…起
-使用事务信息和聚合列构建数据集
选择
客户ID
,事务ID
,交易属性_1
,交易属性2
,交易属性_3
.
.
.
,交易属性
,COUNTTransactionId,按CustomerId作为CustomerTransactionCount划分
从…起
交易
作为数据集
哪里
DataSet.CustomerTransactionCount>@Filter
它不允许我按聚合排序。你可以按聚合排序。我一直都在做。如果你一直都在做,也许你可以为新手提供一个带有函数的示例。。