群组

时间:2017-11-29 15:22:28

标签: sql-server reporting-services ssrs-grouping

我正在尝试对SSRS报告进行分组,以便每个页面在11英寸标记附近自然断开。

看起来您无法动态设置Interactive Height属性,因此我将其设置为0并将分页符应用于数据集。

我假设大约每3个用户占用大约一整页。我希望在每3个EmployeeID分组后中断。我只看到了考虑RowCount的中断,这在我的数据集中每个用户都不一致。用户可以有1行或多行。

  

如何在SSRS子组出现3次后中断?

以下是我当前分组的图片: SSRS Grouping

我需要在每个新页面上显示标题(标题,句号和空白行)。 在每个页面上,我想尽可能多地占用11英寸,但我愿意只是说明我们将在EmployeeID组的每3次出现后中断。

EmployeeID2组可能没有必要,它是在我尝试RowNumber休息时实施的。

我发现我的问题有两种可能的解决方案:

  1. 有人告诉我如何设置每11英寸的参数化分页符
  2. 有人告诉我如何在每个n次SSRS子群出现时设置参数化分页符
  3. 最后,进一步澄清:

      

    我需要一个切换PageBreak的参数。如果PageBreak Parameter设置为False,则标题只会出现一次,所有员工都会显示InterActive Height = 0。如果PageBreak Parameter设置为True,则标题将显示在每个新页面的顶部,每个页面将包含3个员工。

    我尝试在我的Stored Procedure中实现一个分组字段,它使用下面的代码为每个3个员工分配一个递增的组ID,但是这个在3秒内运行的查询现在冻结SSRS,所以我希望实现使用SSRS功能进行分组。

    TSQL分组逻辑:

    ,EmpRank AS (
        SELECT DISTINCT
            EmployeeID
            ,DENSE_RANK() OVER(ORDER BY FormattedName) AS 'EmpCounter'
        FROM FilteredData
    )
    
    ,EmpGrouping AS (
        SELECT
            EmployeeID
            ,((EmpCounter -1 ) / 3) AS 'EmpGroup'
        FROM EmpRank
        GROUP BY ((EmpCounter - 1) / 3)
            ,EmployeeID
    )
    
    SELECT
        FilteredData.*
        ,EmpGrouping.EmpGroup
    FROM FilteredData
        LEFT OUTER JOIN EmpGrouping
            ON EmpGrouping.EmployeeID = FilteredData.EmployeeID
    ORDER BY EmpGroup, EmployeeID
    

    提前谢谢

1 个答案:

答案 0 :(得分:0)

TSQL分组逻辑最终起作用。当我昨天尝试分组时,Visual Studio一直在崩溃,但今天它不是......

无论如何,解决方案是创建一个新的字段,按照我的意愿对员工进行分组,然后我在SSRS中对其进行分组。我仍然不知道如何根据页面高度进行分组,但至少我能够根据子组的出现进行分组