- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一份健康计划个人订阅者列表。每个订阅者都有一个日期范围来表明该计划的资格。为了帮助说明,这里是 2018 年第一季度符合条件的订阅者的模拟记录列表,用 T-SQL 为 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'
运行时的结果是这三个(四个中的)订阅者:
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
-----------------------------------------------------
从结果中我们可以看出,米老鼠在 2018-Q1 的所有三个月都符合条件,米妮老鼠仅在 2 月和 3 月符合条件,唐老鸭仅在本季度的第一个月符合条件,而高飞则获得了资格2018-Q2 的计划,因此未包含在结果集中。
我需要报告每个月的订阅者总数。我可以使用这个更复杂的查询来做到这一点,它也是用 T-SQL 为 MS-SQL Server 编写的:
-- 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
运行结果显示,第一季度每个月共有两名订阅者符合条件:
MONTH TOTAL
-----------------
January 2018 2
February 2018 2
March 2018 2
-----------------
要查看详细/未汇总的结果——具体来说,哪个订阅者在哪个月份符合条件,我们可以运行此查询(也用 T-SQL 编写用于 MS-SQL Server):
-- 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
详细的逐月结果是:
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
---------------------------------------------------------------------
通过最初的简单查询,结果集提供了三个记录,每个符合条件的订阅者在整个感兴趣的日期范围内(2018 年第一季度)都有一个。
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
-----------------------------------------------------
通过更复杂、更详细的查询,结果集会提供 6 条记录,每个月一条,订阅者有资格在感兴趣的季度的特定月份使用。
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
-----------------
问题的本质是找出(如果可能的话)如何在 SSRS 中拆分和分组一个日期范围,就像我在更复杂的 SQL 查询中所做的那样。
我尝试在 Report Builder 中使用各种风格的 Lookup(),但这些都需要一对一匹配,例如,MultiLookup() 从名称-值对的数据集中检索一组值,其中每个pair 具有一对一的关系。
在我的示例中,季度中的特定月份必须与订阅者集中的特定月份(在一定范围内)相匹配。在这里,正如我们在简单查询中看到的那样,订户可以在一定范围内符合条件。我相信我可以在 Report Builder 中成功构建一个 SSRS 报告,如果存在 Lookup() 的一些变体,它打开了一个数据集中的特定键(例如,2018 年 1 月)是否存在于另一个数据集(2016 年 8 月)的一系列键中- 2018 年 5 月),而不是精确的一对一匹配。
结果的格式无关紧要。可以是图表或 tablix。如果可能的话,现在只是想得到结果。
最佳答案
不 - 不幸的是,我想不出一种简单的方法让 SSRS 按月分组并根据需要计算每个月。
如果您只是想避免运行多个查询,适合您的情况的方法是使用临时表。
您的第一个数据集会将详细数据放在临时表中,然后从表中选择详细信息。
第二个数据集将使用第一个数据集中的详细信息临时表来汇总您的每月总计。对于使用在先前数据集中创建的临时表的数据集,您需要在字段 选项卡中手动输入字段名称。
选中 Data SOURCE 属性中的Use Single Transaction 框,以便它保留临时表。
关于reporting-services - 如何在 SSRS Report Builder 中按日期范围分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50105940/
我有一个大型 SSRS 2008 服务器报告项目(超过 200 个报告)。目前我公司的策略已经改变,我们希望将这些服务器报告转换为客户端报告。 所有服务器报告都使用存储过程(或在某些情况下来自 SQL
我有一个 SSRS 2008 R2 报告,它在表格中使用了这个表达式: =Lookup(Fields!DataSet1Date.Value, Fields!DataSet2Date.Value, Fi
我在 SSRS 报告上有一个 tablix,它从存储过程中获取数据。 当没有数据存在时,我试图向用户显示一条消息,例如“**此报告没有数据* ”。我可以通过在 **NoRowsMessage 中指定此
我试图让这个专栏聊天的标 checkout 现在专栏基地,就像下面的第二张图片一样。然而,该解决方案并不完全有效,因为它歪曲了其余信息。 有没有人知道实现这一目标的适当方法,这不是直截了当的,这很令人
如何获取 SSRS 报告以显示网页 View ? 当我转到 SSRS 报告页面时,它没有显示网页 View 。它显示了数据源、数据集和报告文件夹的列表。 进入报告文件夹后,我可以通过单击它们来调用报告
我正在寻找一种方法来从我的 SSRS 报告中获取版本信息。我有几个环境,希望能够比较在这些环境中部署了哪个报告版本。在 SSIS 中,这非常容易,因为每个 SSIS 包在修改和保护后都会获得一个新版本
我有一个作为 SSRS 报告后端运行的存储过程(它对值进行透视和反透视)。用户提供 2 个输入(BeginRange 和 EndRange)。 结果会根据用户输入而变化,因此我也需要在报告中反射(re
我一直在网上寻找一种在 SSRS (2008 R2) 中完全组合数据集的方法。 基本上,我需要创建一个由多个不同数据集(都具有如下相同的列)组成的表和图,这些数据集是从多个 sql 服务器检索的(防止
我有一份包含多个数据集的报告。不同数据集中的不同字段用于报告的不同位置。 在报告的一部分中,我需要使用两个不同数据集中的字段进行计算。这在表达式中可能吗? 我可以以某种方式在表达式中引用该字段所在的数
我在 Business Intelligence Studio 2008 中内置了一个 RDL 报告,但遇到了不需要的分页符问题。 我有一个数据集,其中包含一个带有一些汇总数据的单表。我已经添加了一个
解决方案 SSRS - How to build a simple multi-column report? 表示报表属性下有一个布局选项卡。我已经用谷歌搜索了这个主题,并且在多个地方都提到了相同的菜
我在 Sql Server Reporting Services (SSRS) 2008 R2 中运行报表时遇到问题。 在设置站点、创建一些用户并上传一些报告之后,我选择了一个要运行的报告,输入我的参
我有一个包含多个行组的矩阵的 SSRS (2008 R2) 报告。我需要扩展所有其他组,同时只有一个切换项。我隐藏所有必要的组,并在我需要的文本框中设置切换项。它在 VisualStudio 中运行良
我在 SSRS 中有报告,我可以使用以下表达式交替行颜色: =IIF(ROWNUMBER(NOTHING) MOD 2, "LightSteelBlue","WhiteSmoke") 这很好用。但是,
啊啊! 受不了,我自己也想不通...... 我在报告中的数字格式中使用了它: '€' #,0.00;('€' #,0.00) 格式为 € 1,212.89 这不完全是我想要的,因为我想要 € 1.21
我有一个简单的 SSRS 报告,显示一个表中的数据。我想要做的是在下拉列表中显示与该表不同的列表,供用户选择。如果我只使用一个数据集,我可以让它显示,但它会多次显示该列中的值。 示例 Bob Bob
SSRS 2008 已经运行了很长时间。 我们已经在同一台服务器上安装了 SSRS 2012,它似乎有点破坏了 SSRS 2008 共享点模式。 所有 .rdl 和 .rsds 文件不再与服务器“关联
我们正在从 Crystal Reports 迁移我们的报告至 SSRS .在 Crystal 报表中,我们使用 变量 至 动态 生成我们的文件名,以便当报告通过电子邮件发送时,文件具有报告名称和执行日
我想将一些文本加粗并加下划线,如果我的数据库中的字段值为“HD” 我的意思是,我在数据库中有两个文件。文本 1 和标题。我在报告中显示 Text1,如果 Header 的值为“HD”,则 Text1
我正在使用 BIDS 和 SQL Server Reporting Services (SSRS) 2008 R2 来构建报告。我希望每个类别都显示为单独的表格/网格。 重要提示:列(CELERY、E
我是一名优秀的程序员,十分优秀!