Ssrs 2008 SSRS 2008中的分组-筛选

Ssrs 2008 SSRS 2008中的分组-筛选,ssrs-2008,Ssrs 2008,我是SSRS新手。我想按customerid对事务表进行分组,并计算每个customerid有多少事务。我能做到 但是,我想按该计数排序,和/或按该计数过滤。你怎么知道的 谢谢 要在行组上设置排序和筛选,请右键单击行组 您可以在此处访问组排序和筛选属性。它们都应该允许您根据计数列的名称设置规则。选项1 如果不需要在报告中显示事务,那么应该在查询中的数据库级别执行聚合,而不是由SSR执行聚合。您将获得以下好处: 更快的渲染。 通过网络发送的数据将减少。 SSRS引擎需要处理的数据将更少,因此任何订

我是SSRS新手。我想按customerid对事务表进行分组,并计算每个customerid有多少事务。我能做到

但是,我想按该计数排序,和/或按该计数过滤。你怎么知道的


谢谢

要在行组上设置排序和筛选,请右键单击行组

您可以在此处访问组排序和筛选属性。它们都应该允许您根据计数列的名称设置规则。

选项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
它不允许我按聚合排序。你可以按聚合排序。我一直都在做。如果你一直都在做,也许你可以为新手提供一个带有函数的示例。。