Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reporting services 如何在SSRS报表生成器中按日期范围分组?_Reporting Services_Grouping_Date Range - Fatal编程技术网

Reporting services 如何在SSRS报表生成器中按日期范围分组?

Reporting services 如何在SSRS报表生成器中按日期范围分组?,reporting-services,grouping,date-range,Reporting Services,Grouping,Date Range,我有一份健康计划的个人订户名单。每个认购人都有一系列日期,以表明该计划的资格。为了帮助说明,以下是2018-Q1期间合格订阅者的模拟记录列表,使用T-SQL for MS SQL Server编写: -- qryEligibleSubscribers2018-Q1Simple WITH S AS ( -- MOCK LIST OF SUBSCRIBERS TO HEALTH PLAN -- WITH ELIGIBILITY TIME FRAMES SELECT -- CONTI

我有一份健康计划的个人订户名单。每个认购人都有一系列日期,以表明该计划的资格。为了帮助说明,以下是2018-Q1期间合格订阅者的模拟记录列表,使用T-SQL for MS SQL Server编写:

-- qryEligibleSubscribers2018-Q1Simple

WITH
    S
AS
(
-- MOCK LIST OF SUBSCRIBERS TO HEALTH PLAN
-- WITH ELIGIBILITY TIME FRAMES
    SELECT
-- CONTINUOUSLY ELIGIBLE SINCE 2017
        '0001' AS ID,
        'MOUSE' AS LASTNAME,
        'MICKEY' AS FIRSTNAME,
        '1/1/2017' AS EFFECTIVE,
        NULL AS TERM
    UNION ALL SELECT
-- CURRENT SUBSCRIBER SINCE FEB. 2018
        '0002' AS ID,
        'MOUSE' AS LASTNAME,
        'MINNIE' AS FIRSTNAME,
        '2/1/2018' AS EFFECTIVE,
        NULL AS TERM
    UNION ALL SELECT
-- SUBSCRIBED TO PLAN FOR JAN. 2018 ONLY
        '0003' AS ID,
        'DUCK' AS LASTNAME,
        'DONALD' AS FIRSTNAME,
        '1/1/2018' AS EFFECTIVE,
        '1/31/2018' AS TERM
    UNION ALL SELECT
-- SUBSCRIBED TO PLAN STARTING IN 2018-Q2
        '0004' AS ID,
        'GOOF' AS LASTNAME,
        'GOOFY' AS FIRSTNAME,
        '4/1/2018' AS EFFECTIVE,
        NULL AS TERM
)
-- LIST OF SUBSCRIBERS
-- WHO WERE ELIGIBLE IN 2018-Q1 ONLY
SELECT
    S.ID,
    S.LASTNAME,
    S.FIRSTNAME,
    S.EFFECTIVE,
    S.TERM
FROM
    S
WHERE
-- LIMIT LIST TO 2018-Q1
    S.EFFECTIVE <= '3/31/2018'
AND
    ISNULL(S.TERM,GETDATE()) >= '1/1/2018'
-- qryEligibleSubscribers2018-Q1Complex

WITH
-- LIST OF MONTHS IN 2018-Q1
    R(BOR,EOR)
AS
(
-- FIXED RANGE OF MONTHS IN 2018-Q1
    SELECT
        DATEADD(M,DATEDIFF(M,0,'1/1/2018'),0) AS BOR,
        DATEADD(M,DATEDIFF(M,0,'3/31/2018'),0) AS EOR
-- RECURSIVELY ADD A MONTH
    UNION ALL SELECT
        DATEADD(M,1,R.BOR) AS BOR,
        R.EOR
    FROM
        R
    WHERE
        R.BOR < R.EOR
),
    S
AS
(
-- MOCK LIST OF SUBSCRIBERS TO HEALTH PLAN
-- WITH ELIGIBILITY TIME FRAMES
    SELECT
-- CONTINUOUSLY ELIGIBLE SINCE 2017
        '0001' AS ID,
        'MOUSE' AS LASTNAME,
        'MICKEY' AS FIRSTNAME,
        '1/1/2017' AS EFFECTIVE,
        NULL AS TERM
    UNION ALL SELECT
-- CURRENT SUBSCRIBER SINCE FEB. 2018
        '0002' AS ID,
        'MOUSE' AS LASTNAME,
        'MINNIE' AS FIRSTNAME,
        '2/1/2018' AS EFFECTIVE,
        NULL AS TERM
    UNION ALL SELECT
-- SUBSCRIBED TO PLAN FOR JAN. 2018 ONLY
        '0003' AS ID,
        'DUCK' AS LASTNAME,
        'DONALD' AS FIRSTNAME,
        '1/1/2018' AS EFFECTIVE,
        '1/31/2018' AS TERM
    UNION ALL SELECT
-- SUBSCRIBED TO PLAN STARTING IN 2018-Q2
        '0004' AS ID,
        'GOOF' AS LASTNAME,
        'GOOFY' AS FIRSTNAME,
        '4/1/2018' AS EFFECTIVE,
        NULL AS TERM
),
    X
AS
(
-- EXTENDED LIST OF SUBSCRIBERS
-- WHO WERE ELIGIBLE IN 2018-Q1 ONLY
-- LISTING EACH MONTH OF ELIGIBILITY
    SELECT
        R.BOR AS MONTH,
        FORMAT(R.BOR,'MMMM yyyy') AS LABEL,
        S.ID,
        S.LASTNAME,
        S.FIRSTNAME,
        S.EFFECTIVE,
        S.TERM
    FROM
        S
    INNER JOIN
        R
    ON
        S.EFFECTIVE < DATEADD(M,1,R.BOR)
    AND
        ISNULL(S.TERM,GETDATE()) >= R.BOR
)
SELECT
    X.LABEL AS MONTH,
    COUNT(X.ID) AS TOTAL
FROM
    X
GROUP BY
    X.LABEL,
    X.MONTH
ORDER BY
    X.MONTH
-- qryEligibleSubscribers2018-Q1Detailed

WITH
-- LIST OF MONTHS IN 2018-Q1
    R(BOR,EOR)
AS
(
-- FIXED RANGE OF MONTHS IN 2018-Q1
    SELECT
        DATEADD(M,DATEDIFF(M,0,'1/1/2018'),0) AS BOR,
        DATEADD(M,DATEDIFF(M,0,'3/31/2018'),0) AS EOR
-- RECURSIVELY ADD A MONTH
    UNION ALL SELECT
        DATEADD(M,1,R.BOR) AS BOR,
        R.EOR
    FROM
        R
    WHERE
        R.BOR < R.EOR
),
    S
AS
(
-- MOCK LIST OF SUBSCRIBERS TO HEALTH PLAN
-- WITH ELIGIBILITY TIME FRAMES
    SELECT
-- CONTINUOUSLY ELIGIBLE SINCE 2017
        '0001' AS ID,
        'MOUSE' AS LASTNAME,
        'MICKEY' AS FIRSTNAME,
        '1/1/2017' AS EFFECTIVE,
        NULL AS TERM
    UNION ALL SELECT
-- CURRENT SUBSCRIBER SINCE FEB. 2018
        '0002' AS ID,
        'MOUSE' AS LASTNAME,
        'MINNIE' AS FIRSTNAME,
        '2/1/2018' AS EFFECTIVE,
        NULL AS TERM
    UNION ALL SELECT
-- SUBSCRIBED TO PLAN FOR JAN. 2018 ONLY
        '0003' AS ID,
        'DUCK' AS LASTNAME,
        'DONALD' AS FIRSTNAME,
        '1/1/2018' AS EFFECTIVE,
        '1/31/2018' AS TERM
    UNION ALL SELECT
-- SUBSCRIBED TO PLAN STARTING IN 2018-Q2
        '0004' AS ID,
        'GOOF' AS LASTNAME,
        'GOOFY' AS FIRSTNAME,
        '4/1/2018' AS EFFECTIVE,
        NULL AS TERM
)
-- EXTENDED LIST OF SUBSCRIBERS
-- WHO WERE ELIGIBLE IN 2018-Q1 ONLY
-- LISTING EACH MONTH OF ELIGIBILITY
SELECT
    FORMAT(R.BOR,'MMMM yyyy') AS LABEL,
    S.ID,
    S.LASTNAME,
    S.FIRSTNAME,
    S.EFFECTIVE,
    S.TERM
FROM
    S
INNER JOIN
    R
ON
    S.EFFECTIVE < DATEADD(M,1,R.BOR)
AND
    ISNULL(S.TERM,GETDATE()) >= R.BOR
ORDER BY
    R.BOR,
    S.ID
我们可以从结果中看出,米老鼠在2018-Q1的三个月内都有资格参加,米妮老鼠只在2月和3月参加,唐老鸭只在本季度的第一个月参加,高飞在2018-Q2参加了该计划,因此不包括在结果集中

我需要报告每个月的用户总数。我可以使用这个更复杂的查询来实现这一点,它也是用T-SQL for MS-SQL Server编写的:

-- qryEligibleSubscribers2018-Q1Simple

WITH
    S
AS
(
-- MOCK LIST OF SUBSCRIBERS TO HEALTH PLAN
-- WITH ELIGIBILITY TIME FRAMES
    SELECT
-- CONTINUOUSLY ELIGIBLE SINCE 2017
        '0001' AS ID,
        'MOUSE' AS LASTNAME,
        'MICKEY' AS FIRSTNAME,
        '1/1/2017' AS EFFECTIVE,
        NULL AS TERM
    UNION ALL SELECT
-- CURRENT SUBSCRIBER SINCE FEB. 2018
        '0002' AS ID,
        'MOUSE' AS LASTNAME,
        'MINNIE' AS FIRSTNAME,
        '2/1/2018' AS EFFECTIVE,
        NULL AS TERM
    UNION ALL SELECT
-- SUBSCRIBED TO PLAN FOR JAN. 2018 ONLY
        '0003' AS ID,
        'DUCK' AS LASTNAME,
        'DONALD' AS FIRSTNAME,
        '1/1/2018' AS EFFECTIVE,
        '1/31/2018' AS TERM
    UNION ALL SELECT
-- SUBSCRIBED TO PLAN STARTING IN 2018-Q2
        '0004' AS ID,
        'GOOF' AS LASTNAME,
        'GOOFY' AS FIRSTNAME,
        '4/1/2018' AS EFFECTIVE,
        NULL AS TERM
)
-- LIST OF SUBSCRIBERS
-- WHO WERE ELIGIBLE IN 2018-Q1 ONLY
SELECT
    S.ID,
    S.LASTNAME,
    S.FIRSTNAME,
    S.EFFECTIVE,
    S.TERM
FROM
    S
WHERE
-- LIMIT LIST TO 2018-Q1
    S.EFFECTIVE <= '3/31/2018'
AND
    ISNULL(S.TERM,GETDATE()) >= '1/1/2018'
-- qryEligibleSubscribers2018-Q1Complex

WITH
-- LIST OF MONTHS IN 2018-Q1
    R(BOR,EOR)
AS
(
-- FIXED RANGE OF MONTHS IN 2018-Q1
    SELECT
        DATEADD(M,DATEDIFF(M,0,'1/1/2018'),0) AS BOR,
        DATEADD(M,DATEDIFF(M,0,'3/31/2018'),0) AS EOR
-- RECURSIVELY ADD A MONTH
    UNION ALL SELECT
        DATEADD(M,1,R.BOR) AS BOR,
        R.EOR
    FROM
        R
    WHERE
        R.BOR < R.EOR
),
    S
AS
(
-- MOCK LIST OF SUBSCRIBERS TO HEALTH PLAN
-- WITH ELIGIBILITY TIME FRAMES
    SELECT
-- CONTINUOUSLY ELIGIBLE SINCE 2017
        '0001' AS ID,
        'MOUSE' AS LASTNAME,
        'MICKEY' AS FIRSTNAME,
        '1/1/2017' AS EFFECTIVE,
        NULL AS TERM
    UNION ALL SELECT
-- CURRENT SUBSCRIBER SINCE FEB. 2018
        '0002' AS ID,
        'MOUSE' AS LASTNAME,
        'MINNIE' AS FIRSTNAME,
        '2/1/2018' AS EFFECTIVE,
        NULL AS TERM
    UNION ALL SELECT
-- SUBSCRIBED TO PLAN FOR JAN. 2018 ONLY
        '0003' AS ID,
        'DUCK' AS LASTNAME,
        'DONALD' AS FIRSTNAME,
        '1/1/2018' AS EFFECTIVE,
        '1/31/2018' AS TERM
    UNION ALL SELECT
-- SUBSCRIBED TO PLAN STARTING IN 2018-Q2
        '0004' AS ID,
        'GOOF' AS LASTNAME,
        'GOOFY' AS FIRSTNAME,
        '4/1/2018' AS EFFECTIVE,
        NULL AS TERM
),
    X
AS
(
-- EXTENDED LIST OF SUBSCRIBERS
-- WHO WERE ELIGIBLE IN 2018-Q1 ONLY
-- LISTING EACH MONTH OF ELIGIBILITY
    SELECT
        R.BOR AS MONTH,
        FORMAT(R.BOR,'MMMM yyyy') AS LABEL,
        S.ID,
        S.LASTNAME,
        S.FIRSTNAME,
        S.EFFECTIVE,
        S.TERM
    FROM
        S
    INNER JOIN
        R
    ON
        S.EFFECTIVE < DATEADD(M,1,R.BOR)
    AND
        ISNULL(S.TERM,GETDATE()) >= R.BOR
)
SELECT
    X.LABEL AS MONTH,
    COUNT(X.ID) AS TOTAL
FROM
    X
GROUP BY
    X.LABEL,
    X.MONTH
ORDER BY
    X.MONTH
-- qryEligibleSubscribers2018-Q1Detailed

WITH
-- LIST OF MONTHS IN 2018-Q1
    R(BOR,EOR)
AS
(
-- FIXED RANGE OF MONTHS IN 2018-Q1
    SELECT
        DATEADD(M,DATEDIFF(M,0,'1/1/2018'),0) AS BOR,
        DATEADD(M,DATEDIFF(M,0,'3/31/2018'),0) AS EOR
-- RECURSIVELY ADD A MONTH
    UNION ALL SELECT
        DATEADD(M,1,R.BOR) AS BOR,
        R.EOR
    FROM
        R
    WHERE
        R.BOR < R.EOR
),
    S
AS
(
-- MOCK LIST OF SUBSCRIBERS TO HEALTH PLAN
-- WITH ELIGIBILITY TIME FRAMES
    SELECT
-- CONTINUOUSLY ELIGIBLE SINCE 2017
        '0001' AS ID,
        'MOUSE' AS LASTNAME,
        'MICKEY' AS FIRSTNAME,
        '1/1/2017' AS EFFECTIVE,
        NULL AS TERM
    UNION ALL SELECT
-- CURRENT SUBSCRIBER SINCE FEB. 2018
        '0002' AS ID,
        'MOUSE' AS LASTNAME,
        'MINNIE' AS FIRSTNAME,
        '2/1/2018' AS EFFECTIVE,
        NULL AS TERM
    UNION ALL SELECT
-- SUBSCRIBED TO PLAN FOR JAN. 2018 ONLY
        '0003' AS ID,
        'DUCK' AS LASTNAME,
        'DONALD' AS FIRSTNAME,
        '1/1/2018' AS EFFECTIVE,
        '1/31/2018' AS TERM
    UNION ALL SELECT
-- SUBSCRIBED TO PLAN STARTING IN 2018-Q2
        '0004' AS ID,
        'GOOF' AS LASTNAME,
        'GOOFY' AS FIRSTNAME,
        '4/1/2018' AS EFFECTIVE,
        NULL AS TERM
)
-- EXTENDED LIST OF SUBSCRIBERS
-- WHO WERE ELIGIBLE IN 2018-Q1 ONLY
-- LISTING EACH MONTH OF ELIGIBILITY
SELECT
    FORMAT(R.BOR,'MMMM yyyy') AS LABEL,
    S.ID,
    S.LASTNAME,
    S.FIRSTNAME,
    S.EFFECTIVE,
    S.TERM
FROM
    S
INNER JOIN
    R
ON
    S.EFFECTIVE < DATEADD(M,1,R.BOR)
AND
    ISNULL(S.TERM,GETDATE()) >= R.BOR
ORDER BY
    R.BOR,
    S.ID
要查看详细的/未汇总的结果,特别是哪个订阅者在哪个月内符合条件,我们可以运行同样用T-SQL for MS-SQL Server编写的查询:

-- qryEligibleSubscribers2018-Q1Simple

WITH
    S
AS
(
-- MOCK LIST OF SUBSCRIBERS TO HEALTH PLAN
-- WITH ELIGIBILITY TIME FRAMES
    SELECT
-- CONTINUOUSLY ELIGIBLE SINCE 2017
        '0001' AS ID,
        'MOUSE' AS LASTNAME,
        'MICKEY' AS FIRSTNAME,
        '1/1/2017' AS EFFECTIVE,
        NULL AS TERM
    UNION ALL SELECT
-- CURRENT SUBSCRIBER SINCE FEB. 2018
        '0002' AS ID,
        'MOUSE' AS LASTNAME,
        'MINNIE' AS FIRSTNAME,
        '2/1/2018' AS EFFECTIVE,
        NULL AS TERM
    UNION ALL SELECT
-- SUBSCRIBED TO PLAN FOR JAN. 2018 ONLY
        '0003' AS ID,
        'DUCK' AS LASTNAME,
        'DONALD' AS FIRSTNAME,
        '1/1/2018' AS EFFECTIVE,
        '1/31/2018' AS TERM
    UNION ALL SELECT
-- SUBSCRIBED TO PLAN STARTING IN 2018-Q2
        '0004' AS ID,
        'GOOF' AS LASTNAME,
        'GOOFY' AS FIRSTNAME,
        '4/1/2018' AS EFFECTIVE,
        NULL AS TERM
)
-- LIST OF SUBSCRIBERS
-- WHO WERE ELIGIBLE IN 2018-Q1 ONLY
SELECT
    S.ID,
    S.LASTNAME,
    S.FIRSTNAME,
    S.EFFECTIVE,
    S.TERM
FROM
    S
WHERE
-- LIMIT LIST TO 2018-Q1
    S.EFFECTIVE <= '3/31/2018'
AND
    ISNULL(S.TERM,GETDATE()) >= '1/1/2018'
-- qryEligibleSubscribers2018-Q1Complex

WITH
-- LIST OF MONTHS IN 2018-Q1
    R(BOR,EOR)
AS
(
-- FIXED RANGE OF MONTHS IN 2018-Q1
    SELECT
        DATEADD(M,DATEDIFF(M,0,'1/1/2018'),0) AS BOR,
        DATEADD(M,DATEDIFF(M,0,'3/31/2018'),0) AS EOR
-- RECURSIVELY ADD A MONTH
    UNION ALL SELECT
        DATEADD(M,1,R.BOR) AS BOR,
        R.EOR
    FROM
        R
    WHERE
        R.BOR < R.EOR
),
    S
AS
(
-- MOCK LIST OF SUBSCRIBERS TO HEALTH PLAN
-- WITH ELIGIBILITY TIME FRAMES
    SELECT
-- CONTINUOUSLY ELIGIBLE SINCE 2017
        '0001' AS ID,
        'MOUSE' AS LASTNAME,
        'MICKEY' AS FIRSTNAME,
        '1/1/2017' AS EFFECTIVE,
        NULL AS TERM
    UNION ALL SELECT
-- CURRENT SUBSCRIBER SINCE FEB. 2018
        '0002' AS ID,
        'MOUSE' AS LASTNAME,
        'MINNIE' AS FIRSTNAME,
        '2/1/2018' AS EFFECTIVE,
        NULL AS TERM
    UNION ALL SELECT
-- SUBSCRIBED TO PLAN FOR JAN. 2018 ONLY
        '0003' AS ID,
        'DUCK' AS LASTNAME,
        'DONALD' AS FIRSTNAME,
        '1/1/2018' AS EFFECTIVE,
        '1/31/2018' AS TERM
    UNION ALL SELECT
-- SUBSCRIBED TO PLAN STARTING IN 2018-Q2
        '0004' AS ID,
        'GOOF' AS LASTNAME,
        'GOOFY' AS FIRSTNAME,
        '4/1/2018' AS EFFECTIVE,
        NULL AS TERM
),
    X
AS
(
-- EXTENDED LIST OF SUBSCRIBERS
-- WHO WERE ELIGIBLE IN 2018-Q1 ONLY
-- LISTING EACH MONTH OF ELIGIBILITY
    SELECT
        R.BOR AS MONTH,
        FORMAT(R.BOR,'MMMM yyyy') AS LABEL,
        S.ID,
        S.LASTNAME,
        S.FIRSTNAME,
        S.EFFECTIVE,
        S.TERM
    FROM
        S
    INNER JOIN
        R
    ON
        S.EFFECTIVE < DATEADD(M,1,R.BOR)
    AND
        ISNULL(S.TERM,GETDATE()) >= R.BOR
)
SELECT
    X.LABEL AS MONTH,
    COUNT(X.ID) AS TOTAL
FROM
    X
GROUP BY
    X.LABEL,
    X.MONTH
ORDER BY
    X.MONTH
-- qryEligibleSubscribers2018-Q1Detailed

WITH
-- LIST OF MONTHS IN 2018-Q1
    R(BOR,EOR)
AS
(
-- FIXED RANGE OF MONTHS IN 2018-Q1
    SELECT
        DATEADD(M,DATEDIFF(M,0,'1/1/2018'),0) AS BOR,
        DATEADD(M,DATEDIFF(M,0,'3/31/2018'),0) AS EOR
-- RECURSIVELY ADD A MONTH
    UNION ALL SELECT
        DATEADD(M,1,R.BOR) AS BOR,
        R.EOR
    FROM
        R
    WHERE
        R.BOR < R.EOR
),
    S
AS
(
-- MOCK LIST OF SUBSCRIBERS TO HEALTH PLAN
-- WITH ELIGIBILITY TIME FRAMES
    SELECT
-- CONTINUOUSLY ELIGIBLE SINCE 2017
        '0001' AS ID,
        'MOUSE' AS LASTNAME,
        'MICKEY' AS FIRSTNAME,
        '1/1/2017' AS EFFECTIVE,
        NULL AS TERM
    UNION ALL SELECT
-- CURRENT SUBSCRIBER SINCE FEB. 2018
        '0002' AS ID,
        'MOUSE' AS LASTNAME,
        'MINNIE' AS FIRSTNAME,
        '2/1/2018' AS EFFECTIVE,
        NULL AS TERM
    UNION ALL SELECT
-- SUBSCRIBED TO PLAN FOR JAN. 2018 ONLY
        '0003' AS ID,
        'DUCK' AS LASTNAME,
        'DONALD' AS FIRSTNAME,
        '1/1/2018' AS EFFECTIVE,
        '1/31/2018' AS TERM
    UNION ALL SELECT
-- SUBSCRIBED TO PLAN STARTING IN 2018-Q2
        '0004' AS ID,
        'GOOF' AS LASTNAME,
        'GOOFY' AS FIRSTNAME,
        '4/1/2018' AS EFFECTIVE,
        NULL AS TERM
)
-- EXTENDED LIST OF SUBSCRIBERS
-- WHO WERE ELIGIBLE IN 2018-Q1 ONLY
-- LISTING EACH MONTH OF ELIGIBILITY
SELECT
    FORMAT(R.BOR,'MMMM yyyy') AS LABEL,
    S.ID,
    S.LASTNAME,
    S.FIRSTNAME,
    S.EFFECTIVE,
    S.TERM
FROM
    S
INNER JOIN
    R
ON
    S.EFFECTIVE < DATEADD(M,1,R.BOR)
AND
    ISNULL(S.TERM,GETDATE()) >= R.BOR
ORDER BY
    R.BOR,
    S.ID
通过原始的简单查询,结果集提供了三条记录,在2018-Q1的整个感兴趣日期范围内,每个合格订户一条记录

ID      LASTNAME    FIRSTNAME   EFFECTIVE   TERM
-----------------------------------------------------
0001    MOUSE       MICKEY      1/1/2017
0002    MOUSE       MINNIE      2/1/2018
0003    DUCK        DONALD      1/1/2018    1/31/2018
-----------------------------------------------------
通过更复杂、更详细的查询,结果集将提供六条记录,其中一条记录用于订阅方有资格在感兴趣季度中的特定月份

MONTH           ID      LASTNAME    FIRSTNAME   EFFECTIVE   TERM
---------------------------------------------------------------------
January 2018    0001    MOUSE       MICKEY      1/1/2017
January 2018    0003    DUCK        DONALD      1/1/2018    1/31/2018
February 2018   0001    MOUSE       MICKEY      1/1/2017
February 2018   0002    MOUSE       MINNIE      2/1/2018
March 2018      0001    MOUSE       MICKEY      1/1/2017
March 2018      0002    MOUSE       MINNIE      2/1/2018
---------------------------------------------------------------------
实际上,我们有几十万用户。要使用更复杂的查询,会产生一个笨拙的结果集。例如,在12个月的时间内,数十万条记录中的每一条都可以被多次使用12次。。。每月一次。我需要将我的简单查询作为驱动SSRS报告的引擎。使用简单结果集…:

ID      LASTNAME    FIRSTNAME   EFFECTIVE   TERM
-----------------------------------------------------
0001    MOUSE       MICKEY      1/1/2017
0002    MOUSE       MINNIE      2/1/2018
0003    DUCK        DONALD      1/1/2018    1/31/2018
-----------------------------------------------------
。。。在SSRS中,我似乎不知道如何构建一个能够逐月提供用户总数的报告。换句话说,我希望并且需要SSRS Reporting Services将记录乘以/拆分/复制到相应的合格月份,而不是底层SQL查询:

MONTH       TOTAL
-----------------
January 2018    2
February 2018   2
March 2018      2
-----------------
问题的实质是,如果可能的话,找出如何在SSR中对日期范围进行拆分和分组,就像我在更复杂的SQL查询中所做的那样

我曾尝试在报表生成器中使用各种类型的查找,但它们需要一对一的匹配,例如,多重查找从数据集中检索名称-值对的一组值,其中每对具有1对1的关系

在我的示例中,季度中的特定月份必须与订户集中月份范围内的特定月份匹配。在这里,正如我们在这个简单的查询中所看到的,订阅者可以在几个月内获得资格。我相信我可以在report Builder中成功构建一个SSRS报告,前提是存在一些不同的查找,这些查找取决于一个数据集中的特定键是否存在,例如,2018年1月是否存在于另一个数据集中的键范围内2016年8月至2018年5月,而不是精确的1对1匹配


结果的格式无关紧要。可以是图表或表格。如果可能的话,现在只是想得到结果。

不-不幸的是,我想不出一种简单的方法让SSR按月分组,并根据需要计算每个月

如果您只是想避免运行多个查询,那么可能适合您的情况的方法是使用临时表

第一个数据集将把细节数据放在临时表中,并从表中选择细节

第二个数据集将使用第一个数据集中的detail temp表来汇总您的月度总数。对于使用先前数据集中创建的临时表的数据集,需要在“字段”选项卡中手动输入字段名


选中数据源属性中的“使用单一事务”框,使其保留临时表。

我将尝试一下。非常感谢分享您的见解!为什么整个报告必须基于一个数据集?如果有多个数据集只返回呈现报表不同元素所需的数据,即使多个元素基于相同的源数据,您将看到显著的性能优势。请重新阅读您的问题,使用更复杂的查询作为数据集源有什么错?只需在查询本身中聚合上面的结果并返回聚合?可以使用原始数据集中的额外字段进行分组,然后使用报表中的表达式进行分组,但是,通过使用SQL进行聚合可以获得最佳性能。