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 子句确定,在本例中为行号。
我有一个 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 子句确定,在本例中为行号。