首页 > 解决方案 > SSRS - 使用特定的行号

问题描述

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

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

我现在遇到的问题是获取最后一个员工计数,我需要有条件地选择一个计数,如果存在,则行号需要为 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

标签: sql-serverssrs-2012

解决方案


我会在您的查询中执行此操作,而不是尝试让它直接在 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 函数只需获取定义的分区内的第一个/最后一个值,在您的情况下是 PRCo、udDivision,然后只是工资单结束日期的年和月部分,第一个和最后一个位置由 order 子句确定,在本例行号。


推荐阅读