SSRS - 使用特定的行号

SSRS - Using specific Row Number

我有一个 SQL 查询,我在其中获取每个部门和每个月在月初和月末的员工计数的行号。为此,我使用每周一次的工资单结束日期。所以本质上我有 4 个显示员工人数的日期。有些月份有 5 个日期,这使得该月份的行计数为 5 而不是 4。

然后我需要构建一个 SSRS 报告以仅显示每个部门每月的第一名员工人数和最后一名员工人数。自从我使用 =IIF(Fields!RowNumber.Value = 1, Fields!EMPCOUNT.Value, 0)

以来,我有了第一个号码

我现在遇到的问题是获取我需要有条件地 select 的最后一个员工计数,其中行号需要为 5(如果存在)或 4(如果不存在)。我不确定如何让表达式在 SSRS 中工作。示例数据如下。

PRCo    EMPCOUNT    udDivision    PREndDate         ROWNUM  Type
 1       89          Civil     2018-01-06 00:00:00    1       1
 1       97          Civil     2018-01-13 00:00:00    2       1
 1       97          Civil     2018-01-20 00:00:00    3       1
 1       97          Civil     2018-01-27 00:00:00    4       1
 1       16         Colorado   2018-01-06 00:00:00    1       1
 1       18         Colorado   2018-01-13 00:00:00    2       1
 1       14         Colorado   2018-01-20 00:00:00    3       1
 1       10         Colorado   2018-01-27 00:00:00    4       1
 1       94          Civil     2018-02-03 00:00:00    1       2
 1       91          Civil     2018-02-10 00:00:00    2       2
 1       92          Civil     2018-02-17 00:00:00    3       2
 1       91          Civil     2018-02-24 00:00:00    4       2
 1       16         Colorado   2018-02-03 00:00:00    1       2
 1       16         Colorado   2018-02-10 00:00:00    2       2
 1       18         Colorado   2018-02-17 00:00:00    3       2
 1       19         Colorado   2018-02-24 00:00:00    4       2
 1       92          Civil     2018-03-03 00:00:00    1       3
 1       91          Civil     2018-03-10 00:00:00    2       3
 1       88          Civil     2018-03-17 00:00:00    3       3
 1       92          Civil     2018-03-24 00:00:00    4       3
 1       90          Civil     2018-03-31 00:00:00    5       3
 1       19         Colorado   2018-03-03 00:00:00    1       3
 1       26         Colorado   2018-03-10 00:00:00    2       3
 1       25         Colorado   2018-03-17 00:00:00    3       3
 1       27         Colorado   2018-03-24 00:00:00    4       3
 1       24         Colorado   2018-03-31 00:00:00    5       3

我会在您的查询中执行此操作,而不是尝试让它直接在 SSRS 中运行。可能有比这更简单的方法,但这只是基于您现有的查询。

请注意,这是未经测试的,只是我的头脑所以它可能需要一些编辑才能起作用。

SELECT * INTO #t FROM YOUR_EXISTING_QUERY

SELECT DISTINCT
        PRCo
        , udDivision
        , YEAR(PREndDate) AS Yr
        , MONTH(PREndDate) AS Mnth
        , FIRST_VALUE(EMPCOUNT) OVER(PARTITION BY PRCo, udDivision, YEAR(PREndDate), MONTH(PREndDate) ORDER BY ROWNUM) AS OpeningEMPCOUNT
        , LAST_VALUE(EMPCOUNT) OVER(PARTITION BY PRCo, udDivision, YEAR(PREndDate), MONTH(PREndDate) ORDER BY ROWNUM) AS CLosing_EMPCOUNT
FROM #t

你可能需要包括 Type 不确定这是做什么的,但希望你明白了。

FIRST_VALUE 和 LAST_VALUE 函数只是在定义的分区内获取 first/last 值,在您的情况下是 PRCo、udDivision,然后只是工资单结束的年份和月份部分日期,第一个和最后一个位置由 order 子句确定,在本例中为行号。