Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.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
Sql 有没有办法查询未来SSRS订阅计划?_Sql_Reporting Services_Subscriptions - Fatal编程技术网

Sql 有没有办法查询未来SSRS订阅计划?

Sql 有没有办法查询未来SSRS订阅计划?,sql,reporting-services,subscriptions,Sql,Reporting Services,Subscriptions,在我的办公室,我们中的许多人使用SSR来安排定期报告。我想查看未来几天或一周内即将运行的报告的时间表,以便我们可以看到是否有20个报告将尝试同时运行。我怎样才能做到这一点?我创建了显示订阅信息的t-sql报告,但它们只显示“上次运行”日期和时间。这对预测明天的瓶颈没有帮助。解决方案还应包括数据驱动订阅。SSRS将其所有数据存储在ReportServer数据库中,因此您需要一个对此数据库具有读取权限的帐户。这与在本机模式下运行的SSR完全相关。我也不确定这段代码是否能处理共享计划或数据驱动订阅,但

在我的办公室,我们中的许多人使用SSR来安排定期报告。我想查看未来几天或一周内即将运行的报告的时间表,以便我们可以看到是否有20个报告将尝试同时运行。我怎样才能做到这一点?我创建了显示订阅信息的t-sql报告,但它们只显示“上次运行”日期和时间。这对预测明天的瓶颈没有帮助。解决方案还应包括数据驱动订阅。

SSRS将其所有数据存储在ReportServer数据库中,因此您需要一个对此数据库具有读取权限的帐户。这与在本机模式下运行的SSR完全相关。我也不确定这段代码是否能处理共享计划或数据驱动订阅,但我非常确定它们会。我只是没有测试它们


请注意:他们可能会在下一版本或更新的SSRS中更改结构,您可能不会收到任何警告。Microsoft建议在需要查询有关reporting services的信息时始终使用


以下是与提取订阅信息相关的表:

  • Catalog—有关已部署报表的信息
  • dbo.ReportSchedule-与计划和计划相关的报告信息
  • Subscriptions-有关订阅的信息
  • 计划-有关计划的信息
下面的SQL提取所有报告的计划间隔信息。它不计算下一个运行日期,但通过计算计划应该运行的时间间隔,您可以编写另一个查询来生成实际日期

此SQL最初是为一个报告编写的,该报告只显示一个描述间隔的字符串,因此最终输出可能不是您想要的结果。不过,它应该为您提供一个良好的起点,因为它确实解决了所有的间隔细节

--these CTEs are used to match the bitmask fields in the schedule to determine which days & months the schedule is triggered on
WITH wkdays AS (
    SELECT 'Sunday' AS label, 1 AS daybit
    UNION ALL
    SELECT 'Monday', 2
    UNION ALL
    SELECT 'Tuesday', 4
    UNION ALL
    SELECT 'Wednesday', 8
    UNION ALL
    SELECT 'Thursday', 16
    UNION ALL
    SELECT 'Friday', 32
    UNION ALL
    SELECT 'Saturday', 64
),
monthdays AS (
    SELECT CAST(number AS VARCHAR(2)) AS label,
        POWER(CAST(2 AS BIGINT),number-1) AS daybit
    FROM master.dbo.spt_values
    WHERE type='P' AND number BETWEEN 1 AND 31
),
months AS (
    SELECT DATENAME(MM,DATEADD(MM,number-1,0)) AS label,
        POWER(CAST(2 AS BIGINT),number-1) AS mnthbit
    FROM master.dbo.spt_values
    WHERE type='P' AND number BETWEEN 1 AND 12
)
SELECT cat.path,
    cat.name,
    cat.creationdate,
    cat.modifieddate,
    subs.Description,
    subs.LastStatus,
    subs.LastRunTime,
    subs.InactiveFlags,
    CASE RecurrenceType
        WHEN 1 THEN 'Once'
        WHEN 2 THEN 'Hourly'
        WHEN 3 THEN 'Daily' --by interval
        WHEN 4 THEN
            CASE
                WHEN WeeksInterval>1 THEN 'Weekly'
                ELSE 'Daily' --by day of week
            END
        WHEN 5 THEN 'Monthly' --by calendar day
        WHEN 6 THEN 'Monthly' --by day of week
    END AS sched_type,
    sched.StartDate,
    sched.MinutesInterval,
    sched.RecurrenceType,
    sched.DaysInterval,
    sched.WeeksInterval,
    sched.MonthlyWeek,
    wkdays.label AS wkday,wkdays.daybit AS wkdaybit,
    monthdays.label AS mnthday,monthdays.daybit AS mnthdaybit,
    months.label AS mnth, months.mnthbit
INTO #t
FROM dbo.Catalog AS cat
LEFT JOIN dbo.ReportSchedule AS repsched ON repsched.ReportID=cat.ItemID
LEFT JOIN dbo.Subscriptions AS subs ON subs.SubscriptionID=repsched.SubscriptionID
LEFT JOIN dbo.Schedule AS sched ON sched.ScheduleID=repsched.ScheduleID
LEFT JOIN wkdays ON wkdays.daybit & sched.DaysOfWeek > 0
LEFT JOIN monthdays ON monthdays.daybit & sched.DaysOfMonth > 0
LEFT JOIN months ON months.mnthbit & sched.[Month] > 0
WHERE cat.ParentID IS NOT NULL --all reports have a ParentID


/* THE PREVIOUS QUERY LEAVES MULTIPLE ROWS FOR SUBSCRIPTIONS THAT HAVE MULTIPLE BITMASK MATCHES      *
 * THIS QUERY WILL CONCAT ALL OF THOSE FIELDS TOGETHER AND ACCUMULATE THEM IN A TABLE FOR USE LATER. */

CREATE TABLE #c (type VARCHAR(16) COLLATE Latin1_General_CI_AS_KS_WS, name VARCHAR(255) COLLATE Latin1_General_CI_AS_KS_WS, path VARCHAR(255) COLLATE Latin1_General_CI_AS_KS_WS, concatStr VARCHAR(2000) COLLATE Latin1_General_CI_AS_KS_WS);


WITH d AS (
    SELECT DISTINCT path,
        name,
        mnthday AS lbl,
        mnthdaybit AS bm
    FROM #t
)
INSERT INTO #c (type,path,name,concatStr)
SELECT 'monthday' AS type,
    t1.path,t1.name,
    STUFF((
        SELECT ', ' + CAST(lbl AS VARCHAR(MAX))
        FROM d AS t2
        WHERE t2.path=t1.path AND t2.name=t1.name
        ORDER BY bm
        FOR XML PATH(''),TYPE
    ).value('.','VARCHAR(MAX)'),1,2,'') AS concatStr
FROM d AS t1
GROUP BY t1.path,t1.name;

WITH d AS (
    SELECT DISTINCT path,
        name,
        wkday AS lbl,
        wkdaybit AS bm
    FROM #t
)
INSERT INTO #c (type,path,name,concatStr)
SELECT 'weekday' AS type,
    t1.path,t1.name,
    STUFF((
        SELECT ', ' + CAST(lbl AS VARCHAR(MAX))
        FROM d AS t2
        WHERE t2.path=t1.path AND t2.name=t1.name
        ORDER BY bm
        FOR XML PATH(''),TYPE
    ).value('.','VARCHAR(MAX)'),1,2,'') AS concatStr
FROM d AS t1
GROUP BY t1.path,t1.name;

WITH d AS (
    SELECT DISTINCT path,
        name,
        mnth AS lbl,
        mnthbit AS bm
    FROM #t
)
INSERT INTO #c (type,path,name,concatStr)
SELECT 'month' AS type,
    t1.path,t1.name,
    STUFF((
        SELECT ', ' + CAST(lbl AS VARCHAR(MAX))
        FROM d AS t2
        WHERE t2.path=t1.path AND t2.name=t1.name
        ORDER BY bm
        FOR XML PATH(''),TYPE
    ).value('.','VARCHAR(MAX)'),1,2,'') AS concatStr
FROM d AS t1
GROUP BY t1.path,t1.name;


/* PUT EVERYTHING TOGETHER FOR THE REPORT */

SELECT a.path,a.name,a.sched_type,
    a.creationdate,a.modifieddate,
    a.description AS sched_desc,
    a.laststatus AS sched_laststatus,
    a.lastruntime AS sched_lastrun,
    a.inactiveflags AS sched_inactive,
    CASE RecurrenceType
        WHEN 1 THEN 'Run once on '
        ELSE 'Starting on '
    END + CAST(StartDate AS VARCHAR(32)) + ' ' +
    CASE RecurrenceType
        WHEN 1 THEN ''
        WHEN 2 THEN 'repeat every ' + CAST(MinutesInterval AS VARCHAR(255)) + ' minutes.'
        WHEN 3 THEN 'repeat every ' + CAST(DaysInterval AS VARCHAR(255)) + ' days.'
        WHEN 4 THEN 
            CASE
                WHEN WeeksInterval>1 THEN 'repeat every ' + CAST(WeeksInterval AS VARCHAR(255)) + ' on ' + COALESCE(wkdays.concatStr,'')
                ELSE 'repeat every ' + COALESCE(wkdays.concatStr,'')
            END
        WHEN 5 THEN 'repeat every ' + COALESCE(mnths.concatStr,'') + ' on calendar day(s) '  + COALESCE(mnthdays.concatStr,'')
        WHEN 6 THEN 'run on the ' + CASE MonthlyWeek WHEN 1 THEN '1st' WHEN 2 THEN '2nd' WHEN 3 THEN '3rd' WHEN 4 THEN '4th' WHEN 5 THEN 'Last' END + ' week of ' + COALESCE(mnths.concatStr,'') + ' on ' + COALESCE(wkdays.concatStr,'')
    END AS sched_pattern
FROM (
    SELECT DISTINCT path,name,creationdate,modifieddate,description,laststatus,lastruntime,inactiveflags,sched_type,recurrencetype,startdate,minutesinterval,daysinterval,weeksinterval,monthlyweek
    FROM #t
) AS a
LEFT JOIN #c AS mnthdays ON mnthdays.path=a.path AND mnthdays.name=a.name AND mnthdays.type='monthday'
LEFT JOIN #c AS wkdays ON wkdays.path=a.path AND wkdays.name=a.name AND wkdays.type='weekday'
LEFT JOIN #c AS mnths ON mnths.path=a.path AND mnths.name=a.name AND mnths.type='month'

DROP TABLE #t,#c;

此过程将提供与报表订阅相关的所有值的列表

在这里你可以找到startdate。在此基础上,你可以完成你的任务

Create PROCEDURE [dbo].[GetSubscriptionData]
AS
BEGIN
SET NOCOUNT ON;
WITH
[Sub_Parameters] AS
(
    SELECT  [SubscriptionID], [Parameters] = CONVERT(XML,a.[Parameters])
    FROM [Subscriptions] a
),
[MySubscriptions] AS
(
    SELECT DISTINCT [SubscriptionID], [ParameterName] = QUOTENAME(p.value('(Name)[1]', 'nvarchar(max)')),   [ParameterValue] = p.value('(Value)[1]', 'nvarchar(max)')
    FROM [Sub_Parameters] a
        CROSS APPLY [Parameters].nodes('/ParameterValues/ParameterValue') t(p)
),
[SubscriptionsAnalysis] AS
(
    SELECT  a.[SubscriptionID], a.[ParameterName],  [ParameterValue] =  
        (
            SELECT  STUFF((SELECT [ParameterValue] + ', ' as [text()] 
            FROM [MySubscriptions]  
            WHERE   [SubscriptionID] = a.[SubscriptionID]   AND [ParameterName] = a.[ParameterName] 
                FOR XML PATH('')    ),1, 0, '') +''
        )
    FROM [MySubscriptions] a
    GROUP BY a.[SubscriptionID],a.[ParameterName]
)

SELECT
DISTINCT (a.[SubscriptionID]),
c.[UserName] AS Owner, 
b.Name as ReportName,
Convert(XML,a.[ExtensionSettings]).value('(//ParameterValue/Value[../Name="RENDER_FORMAT"])[1]','nvarchar(50)') as ReportExtension,
b.Path,
a.[Locale], 
a.[InactiveFlags], 
d.[UserName] AS Modified_by, 
a.[ModifiedDate], 
a.[Description], 
a.[LastStatus], 
a.[EventType], 
a.[LastRunTime], 
a.[DeliveryExtension],
a.[Version],
sch.StartDate,
--e.[ParameterName],
--LEFT(e.[ParameterValue],LEN(e.[ParameterValue])-1) as [ParameterValue],
SUBSTRING(b.PATH,2,LEN(b.PATH)-(CHARINDEX('/',REVERSE(b.PATH))+1)) AS ProjectName
FROM 
    [Subscriptions] a 
    INNER JOIN [Catalog] AS b ON a.[Report_OID] = b.[ItemID]
    Inner Join ReportSchedule as RS on rs.SubscriptionID = a.SubscriptionID
    INNER JOIN Schedule AS Sch ON Sch.ScheduleID = rs.ScheduleID
    LEFT OUTER JOIN [Users] AS c ON a.[OwnerID] = c.[UserID]
    LEFT OUTER JOIN [Users] AS d ON a.MODIFIEDBYID = d.Userid
    LEFT OUTER JOIN [SubscriptionsAnalysis] AS e ON a.SubscriptionID = e.SubscriptionID;
 END

下面的查询可以帮助您获取第二天报告的时间表,这是基于报表服务器数据库中的标准元数据表构建的

  • Catalog—有关已部署报表的信息
  • dbo.ReportSchedule-与计划和报告相关的信息
    时间表
  • Subscriptions-有关订阅的信息
  • 计划-有关计划的信息
查询:

将getDate()函数更改为具有特定的日期计划。

我回顾了一系列解决这个问题的不同方法。我终于找到了一个效果最好的

我的解决方案从Mike D的答案中的查询开始。起初不喜欢他的查询,因为它看起来很复杂,返回的数据太多,无法查看。但我选择修改他的查询,因为它提供的信息不仅仅是订阅(缓存计划/快照)

我修改了他的问题如下:

  • 排除不使用任何计划的服务器内容的结果

  • 根据口味改进了格式

  • 添加了一些有用的字段,这些字段提供有关如何使用计划的更多信息

    • 计划类型:
    • 用法:订阅/快照/缓存
    • SubscriptionType:如果不是订阅计划,则为NULL
    • 计划名称:
  • 已解决排序规则冲突错误消息:——

我的解决方案(已测试:SSRS2008和SSRS2016) 一旦我使用了其他功能,例如“数据驱动”订阅而不是“定时”订阅,我可能会在以后更新此功能 或者,如果我做了改进,我可能会更新这个

样本数据

注意:有一件事我不明白为什么会有2个TimedSubscriptions(第7-8行),因为我查看了门户,但只看到了那里(第8行有共享计划)。有人知道为什么吗

+-----------------------------------+------------+-----------------------+-------------------+-------------------+--------------------------------------------------------------------------+---------------------+------------------+------------------+-----------------------------------------------------------------------+--------------+--------------------------------------+--------------------------------------+------------------+-------------------+------------------+------------+---------+--------------------------------------+---------------------------------------------------------------------+------------------+----------------+---------------------------------------------------------+----------------------------------------------------------------------+
| name                              | sched_type | ScheduleType          | Usage             | SubscriptionType  | Elements_List                                                            | DeliveryExtension   | UserOwnerSubs    | UserCreatedSched | EmailRecipients                                                       | RenderFormat | ScheduleName                         | SubscriptionID                       | creationdate     | modifieddate      | modifieddate2    | StartDate  | EndDate | sched_desc                           | sched_laststatus                                                    | sched_lastrun    | sched_inactive | path                                                    | sched_pattern                                                        |
+-----------------------------------+------------+-----------------------+-------------------+-------------------+--------------------------------------------------------------------------+---------------------+------------------+------------------+-----------------------------------------------------------------------+--------------+--------------------------------------+--------------------------------------+------------------+-------------------+------------------+------------+---------+--------------------------------------+---------------------------------------------------------------------+------------------+----------------+---------------------------------------------------------+----------------------------------------------------------------------+
| PO Samples for Testing            | Daily      | TimedSubscription     | TimedSubscription | TimedSubscription | TO CC BCC ReplyTo IncludeReport RenderFormat Subject Comment IncludeLink | Report Server Email | GEORGES\bl0040ep | GEORGES\bl0040ep | (x24) TO: brenda.metcalf@DOMAIN;                                      | MHTML        | bb53dfb1-6819-4a99-94bd-28ec3dcf3ecb | AF285C92-31E5-4BC4-9D88-284E0A3ED17B | 2/8/19 10:38 AM  | 2/8/19 10:38 AM   | 2/12/19 10:44 AM | 2/8/2019   | NULL    | SUN Caryville PO Samples for Testing | Mail sent to brenda.metcalf@georgesinc.com;                         | 2/10/19 6:00 PM  | 0              | /fsqa/PO Samples for Testing                            | Starting on Feb  8 2019  6:00PM repeat every Sunday Ending on Never  |
|                                   |            |                       |                   |                   |   Priority                                                               |                     |                  |                  |   Shannon.Driggers@DOMAIN; Joseph.Davenport@DOMAIN; Lisa.Fude@DOMAIN; |              |                                      |                                      |                  |                   |                  |            |         |                                      |   Shannon.Driggers@georgesinc.com; Joseph.Davenport@georgesinc.com; |                  |                |                                                         |                                                                      |
|                                   |            |                       |                   |                   |                                                                          |                     |                  |                  |   Amanda.Bourff@DOMAIN; Pam.Overton@DOMAIN; Brent.Lester@DOMAIN;      |              |                                      |                                      |                  |                   |                  |            |         |                                      |   Lisa.Fude@georgesinc.com; Amanda.Bourff@georgesinc.com;           |                  |                |                                                         |                                                                      |
|                                   |            |                       |                   |                   |                                                                          |                     |                  |                  |   Jerry.McKnight@DOMAIN; Jacob.Phillips@DOMAIN; Ricky.Cole@DOMAIN;    |              |                                      |                                      |                  |                   |                  |            |         |                                      |   Pam.Overton@georgesinc.com                                        |                  |                |                                                         |                                                                      |
|                                   |            |                       |                   |                   |                                                                          |                     |                  |                  |   Jeremy.Morris@DOMAIN; Bryan.Claiborne@DOMAIN; Harold.Webb@DOMAIN;   |              |                                      |                                      |                  |                   |                  |            |         |                                      |                                                                     |                  |                |                                                         |                                                                      |
|                                   |            |                       |                   |                   |                                                                          |                     |                  |                  |   Georgia.Roberts@DOMAIN; Chris.Malone@DOMAIN; Louis.Bargy@DOMAIN;    |              |                                      |                                      |                  |                   |                  |            |         |                                      |                                                                     |                  |                |                                                         |                                                                      |
|                                   |            |                       |                   |                   |                                                                          |                     |                  |                  |   Josh.Bills@DOMAIN; Larry.Reid@DOMAIN; Chris.Thompson@DOMAIN;        |              |                                      |                                      |                  |                   |                  |            |         |                                      |                                                                     |                  |                |                                                         |                                                                      |
|                                   |            |                       |                   |                   |                                                                          |                     |                  |                  |   Trenton.Marshall@DOMAIN; Willie.Baker@DOMAIN; Jack.Badon@DOMAIN;    |              |                                      |                                      |                  |                   |                  |            |         |                                      |                                                                     |                  |                |                                                         |                                                                      |
|                                   |            |                       |                   |                   |                                                                          |                     |                  |                  |   Susan.Delaney@DOMAIN CC: Suzanne.Beauchamp@DOMAIN                   |              |                                      |                                      |                  |                   |                  |            |         |                                      |                                                                     |                  |                |                                                         |                                                                      |
+-----------------------------------+------------+-----------------------+-------------------+-------------------+--------------------------------------------------------------------------+---------------------+------------------+------------------+-----------------------------------------------------------------------+--------------+--------------------------------------+--------------------------------------+------------------+-------------------+------------------+------------+---------+--------------------------------------+---------------------------------------------------------------------+------------------+----------------+---------------------------------------------------------+----------------------------------------------------------------------+
| Sigma SO Loaded with Inventory    | Daily      | ReportHistorySchedule | ...ReportSnapshot | NULL              | NULL                                                                     | NULL                | NULL             | GEORGES\bl0040ep | NULL                                                                  | NULL         | 98a284df-3d03-445e-88d9-a44ed2d5c33a | NULL                                 | 7/2/18 2:38 PM   | 7/2/18 2:38 PM    | NULL             | 7/2/2018   | NULL    | NULL                                 | NULL                                                                | NULL             | NULL           | /Inventory/Sigma SO Loaded with Inventory (Cassville)   | Starting on Jul  2 2018  6:20AM repeat every 1 days. Ending on Never |
|   (Cassville)                     |            |                       |                   |                   |                                                                          |                     |                  |                  |                                                                       |              |                                      |                                      |                  |                   |                  |            |         |                                      |                                                                     |                  |                |                                                         |                                                                      |
+-----------------------------------+------------+-----------------------+-------------------+-------------------+--------------------------------------------------------------------------+---------------------+------------------+------------------+-----------------------------------------------------------------------+--------------+--------------------------------------+--------------------------------------+------------------+-------------------+------------------+------------+---------+--------------------------------------+---------------------------------------------------------------------+------------------+----------------+---------------------------------------------------------+----------------------------------------------------------------------+
| Customer Aging Report By Customer | Hourly     | SharedSchedule        | RefreshCache      | RefreshCache      | NULL                                                                     | NULL                | GEORGES\bl0040ep | GEORGES\bl0040ep | NULL                                                                  | NULL         | Hourly: Even Hours After 6AM         | CF87DDDE-0F7F-416E-B403-E161AD0B14C1 | 10/25/18 1:55 PM | 12/13/18 12:46 PM | 11/29/18 3:55 PM | 11/30/2018 | NULL    | Hourly: Even Hours After 6AM (625)   | Cache refresh succeeded.                                            | 2/12/19 10:00 AM | 0              | /Accounts Receivables/Customer Aging Report By Customer | Starting on Nov 30 2018  6:00AM                                      |
|                                   |            |                       |                   |                   |                                                                          |                     |                  |                  |                                                                       |              |                                      |                                      |                  |                   |                  |            |         |                                      |                                                                     |                  |                |                                                         |   repeat every 120 minutes. Ending on Never                          |
+-----------------------------------+------------+-----------------------+-------------------+-------------------+--------------------------------------------------------------------------+---------------------+------------------+------------------+-----------------------------------------------------------------------+--------------+--------------------------------------+--------------------------------------+------------------+-------------------+------------------+------------+---------+--------------------------------------+---------------------------------------------------------------------+------------------+----------------+---------------------------------------------------------+----------------------------------------------------------------------+
查询(更新日期:2019年2月12日)

这个查询本质上是相同的,但是我添加了更多的数据元素来分析订阅。解决的一个问题是[EmailRecipients]剪切和截断收件人的完整列表:value(N'(/ParameterValues/ParameterValue[Name=“CC”]/value)[1],“varchar(250)”更改为value(N'(/ParameterValues/ParameterValue[Name=“CC”]/value)[1],“varchar(max)”

SQL:

----------------------------------------------------------------------------------------------------------------------------------------------------------------
--获取所有计划使用信息:订阅/快照/缓存
--queryGetScheduleDetails
-- https://stackoverflow.com/questions/25943877/is-there-a-way-to-query-future-ssrs-subscription-schedules/25944797#25944797
--这些CTE用于匹配计划中的位掩码字段,以确定触发计划的日期和月份
---------------------------------------------------------------------------------------------------------------------------------------------------------- 
如果@QueryCalled='queryGetScheduleDetails'
开始
以工作日为准(
挑选
“Sunday”作为标签,1作为daybit
联合所有
选择“星期一”,2
联合所有
选择“星期二”,4
联合所有
选择“星期三”,8
联合所有
选择16日星期四
联合所有
选择'Friday',32
联合所有
选择“星期六”,64
)
,月日为(
挑选
将(编号为VARCHAR(2))转换为标签
,POWER(强制转换(2为BIGINT),number-1为daybit
从master.dbo.spt_值
其中type='P'和数字介于1和31之间
+-----------------------------------+------------+-----------------------+-------------------+-------------------+--------------------------------------------------------------------------+---------------------+------------------+------------------+-----------------------------------------------------------------------+--------------+--------------------------------------+--------------------------------------+------------------+-------------------+------------------+------------+---------+--------------------------------------+---------------------------------------------------------------------+------------------+----------------+---------------------------------------------------------+----------------------------------------------------------------------+
| name                              | sched_type | ScheduleType          | Usage             | SubscriptionType  | Elements_List                                                            | DeliveryExtension   | UserOwnerSubs    | UserCreatedSched | EmailRecipients                                                       | RenderFormat | ScheduleName                         | SubscriptionID                       | creationdate     | modifieddate      | modifieddate2    | StartDate  | EndDate | sched_desc                           | sched_laststatus                                                    | sched_lastrun    | sched_inactive | path                                                    | sched_pattern                                                        |
+-----------------------------------+------------+-----------------------+-------------------+-------------------+--------------------------------------------------------------------------+---------------------+------------------+------------------+-----------------------------------------------------------------------+--------------+--------------------------------------+--------------------------------------+------------------+-------------------+------------------+------------+---------+--------------------------------------+---------------------------------------------------------------------+------------------+----------------+---------------------------------------------------------+----------------------------------------------------------------------+
| PO Samples for Testing            | Daily      | TimedSubscription     | TimedSubscription | TimedSubscription | TO CC BCC ReplyTo IncludeReport RenderFormat Subject Comment IncludeLink | Report Server Email | GEORGES\bl0040ep | GEORGES\bl0040ep | (x24) TO: brenda.metcalf@DOMAIN;                                      | MHTML        | bb53dfb1-6819-4a99-94bd-28ec3dcf3ecb | AF285C92-31E5-4BC4-9D88-284E0A3ED17B | 2/8/19 10:38 AM  | 2/8/19 10:38 AM   | 2/12/19 10:44 AM | 2/8/2019   | NULL    | SUN Caryville PO Samples for Testing | Mail sent to brenda.metcalf@georgesinc.com;                         | 2/10/19 6:00 PM  | 0              | /fsqa/PO Samples for Testing                            | Starting on Feb  8 2019  6:00PM repeat every Sunday Ending on Never  |
|                                   |            |                       |                   |                   |   Priority                                                               |                     |                  |                  |   Shannon.Driggers@DOMAIN; Joseph.Davenport@DOMAIN; Lisa.Fude@DOMAIN; |              |                                      |                                      |                  |                   |                  |            |         |                                      |   Shannon.Driggers@georgesinc.com; Joseph.Davenport@georgesinc.com; |                  |                |                                                         |                                                                      |
|                                   |            |                       |                   |                   |                                                                          |                     |                  |                  |   Amanda.Bourff@DOMAIN; Pam.Overton@DOMAIN; Brent.Lester@DOMAIN;      |              |                                      |                                      |                  |                   |                  |            |         |                                      |   Lisa.Fude@georgesinc.com; Amanda.Bourff@georgesinc.com;           |                  |                |                                                         |                                                                      |
|                                   |            |                       |                   |                   |                                                                          |                     |                  |                  |   Jerry.McKnight@DOMAIN; Jacob.Phillips@DOMAIN; Ricky.Cole@DOMAIN;    |              |                                      |                                      |                  |                   |                  |            |         |                                      |   Pam.Overton@georgesinc.com                                        |                  |                |                                                         |                                                                      |
|                                   |            |                       |                   |                   |                                                                          |                     |                  |                  |   Jeremy.Morris@DOMAIN; Bryan.Claiborne@DOMAIN; Harold.Webb@DOMAIN;   |              |                                      |                                      |                  |                   |                  |            |         |                                      |                                                                     |                  |                |                                                         |                                                                      |
|                                   |            |                       |                   |                   |                                                                          |                     |                  |                  |   Georgia.Roberts@DOMAIN; Chris.Malone@DOMAIN; Louis.Bargy@DOMAIN;    |              |                                      |                                      |                  |                   |                  |            |         |                                      |                                                                     |                  |                |                                                         |                                                                      |
|                                   |            |                       |                   |                   |                                                                          |                     |                  |                  |   Josh.Bills@DOMAIN; Larry.Reid@DOMAIN; Chris.Thompson@DOMAIN;        |              |                                      |                                      |                  |                   |                  |            |         |                                      |                                                                     |                  |                |                                                         |                                                                      |
|                                   |            |                       |                   |                   |                                                                          |                     |                  |                  |   Trenton.Marshall@DOMAIN; Willie.Baker@DOMAIN; Jack.Badon@DOMAIN;    |              |                                      |                                      |                  |                   |                  |            |         |                                      |                                                                     |                  |                |                                                         |                                                                      |
|                                   |            |                       |                   |                   |                                                                          |                     |                  |                  |   Susan.Delaney@DOMAIN CC: Suzanne.Beauchamp@DOMAIN                   |              |                                      |                                      |                  |                   |                  |            |         |                                      |                                                                     |                  |                |                                                         |                                                                      |
+-----------------------------------+------------+-----------------------+-------------------+-------------------+--------------------------------------------------------------------------+---------------------+------------------+------------------+-----------------------------------------------------------------------+--------------+--------------------------------------+--------------------------------------+------------------+-------------------+------------------+------------+---------+--------------------------------------+---------------------------------------------------------------------+------------------+----------------+---------------------------------------------------------+----------------------------------------------------------------------+
| Sigma SO Loaded with Inventory    | Daily      | ReportHistorySchedule | ...ReportSnapshot | NULL              | NULL                                                                     | NULL                | NULL             | GEORGES\bl0040ep | NULL                                                                  | NULL         | 98a284df-3d03-445e-88d9-a44ed2d5c33a | NULL                                 | 7/2/18 2:38 PM   | 7/2/18 2:38 PM    | NULL             | 7/2/2018   | NULL    | NULL                                 | NULL                                                                | NULL             | NULL           | /Inventory/Sigma SO Loaded with Inventory (Cassville)   | Starting on Jul  2 2018  6:20AM repeat every 1 days. Ending on Never |
|   (Cassville)                     |            |                       |                   |                   |                                                                          |                     |                  |                  |                                                                       |              |                                      |                                      |                  |                   |                  |            |         |                                      |                                                                     |                  |                |                                                         |                                                                      |
+-----------------------------------+------------+-----------------------+-------------------+-------------------+--------------------------------------------------------------------------+---------------------+------------------+------------------+-----------------------------------------------------------------------+--------------+--------------------------------------+--------------------------------------+------------------+-------------------+------------------+------------+---------+--------------------------------------+---------------------------------------------------------------------+------------------+----------------+---------------------------------------------------------+----------------------------------------------------------------------+
| Customer Aging Report By Customer | Hourly     | SharedSchedule        | RefreshCache      | RefreshCache      | NULL                                                                     | NULL                | GEORGES\bl0040ep | GEORGES\bl0040ep | NULL                                                                  | NULL         | Hourly: Even Hours After 6AM         | CF87DDDE-0F7F-416E-B403-E161AD0B14C1 | 10/25/18 1:55 PM | 12/13/18 12:46 PM | 11/29/18 3:55 PM | 11/30/2018 | NULL    | Hourly: Even Hours After 6AM (625)   | Cache refresh succeeded.                                            | 2/12/19 10:00 AM | 0              | /Accounts Receivables/Customer Aging Report By Customer | Starting on Nov 30 2018  6:00AM                                      |
|                                   |            |                       |                   |                   |                                                                          |                     |                  |                  |                                                                       |              |                                      |                                      |                  |                   |                  |            |         |                                      |                                                                     |                  |                |                                                         |   repeat every 120 minutes. Ending on Never                          |
+-----------------------------------+------------+-----------------------+-------------------+-------------------+--------------------------------------------------------------------------+---------------------+------------------+------------------+-----------------------------------------------------------------------+--------------+--------------------------------------+--------------------------------------+------------------+-------------------+------------------+------------+---------+--------------------------------------+---------------------------------------------------------------------+------------------+----------------+---------------------------------------------------------+----------------------------------------------------------------------+
    subs.DeliveryExtension
    subs.ExtensionSettings
    CAST(CAST(subs.ExtensionSettings AS XML).query('data(ParameterValues/ParameterValue/Name)') as nvarchar(500)) 
    AS Elements_List
    'TO: ' 
    + CAST(subs.ExtensionSettings AS xml).value(N'(/ParameterValues/ParameterValue[Name="TO"]/Value)[1]', 'varchar(250)') 
    + ' CC: ' 
    + ISNULL(CAST(subs.ExtensionSettings AS xml).value(N'(/ParameterValues/ParameterValue[Name="CC"]/Value)[1]', 'varchar(250)'), ' ')
    as EmailRecipients
    CAST(subs.ExtensionSettings AS xml).value(N'(/ParameterValues/ParameterValue[Name="RenderFormat"]/Value)[1]', 'varchar(250)') 
    as RenderFormat
    subs.SubscriptionID
    UserCreatedSched.UserName as [UserCreatedSched]
---------------------------------------------------------------------------------------------------------------------------------------------------------- 
-- Get all schedule usage information: Subscription/ Snapshot/ Caching
-- queryGetScheduleDetails
-- https://stackoverflow.com/questions/25943877/is-there-a-way-to-query-future-ssrs-subscription-schedules/25944797#25944797
-- these CTEs are used to match the bitmask fields in the schedule to determine which days & months the schedule is triggered on
---------------------------------------------------------------------------------------------------------------------------------------------------------- 

IF @QueryCalled = 'queryGetScheduleDetails'
BEGIN

    WITH wkdays AS (
        SELECT 
            'Sunday' AS label, 1 AS daybit
            UNION ALL
            SELECT 'Monday', 2
            UNION ALL
            SELECT 'Tuesday', 4
            UNION ALL
            SELECT 'Wednesday', 8
            UNION ALL
            SELECT 'Thursday', 16
            UNION ALL
            SELECT 'Friday', 32
            UNION ALL
            SELECT 'Saturday', 64
        )

    ,monthdays AS (
        SELECT 
            CAST(number AS VARCHAR(2)) AS label
            ,POWER(CAST(2 AS BIGINT),number-1) AS daybit
        FROM master.dbo.spt_values
        WHERE type='P' AND number BETWEEN 1 AND 31
        )

    ,months AS (
        SELECT 
            DATENAME(MM,DATEADD(MM,number-1,0)) AS label
            ,POWER(CAST(2 AS BIGINT),number-1) AS mnthbit
        FROM master.dbo.spt_values
        WHERE type='P' AND number BETWEEN 1 AND 12
        )

    SELECT 
        cat.path
        , cat.name
        , cat.creationdate
        , cat.modifieddate
        , subs.ModifiedDate as ModifiedDate2
        , subs.Description
        , UserOwnerSubs.UserName as [UserOwnerSubs] 
        , subs.LastStatus
        , subs.LastRunTime
        , subs.InactiveFlags
        , subs.EventType as [SubscriptionType]
        , subs.DeliveryExtension
        , subs.ExtensionSettings
        , CAST(CAST(subs.ExtensionSettings AS XML).query('data(ParameterValues/ParameterValue/Name)') as nvarchar(max)) AS Elements_List
        -- <RECIPIENTS function>
        , 
            'TO: ' 
            + CAST(subs.ExtensionSettings AS xml).value(N'(/ParameterValues/ParameterValue[Name="TO"]/Value)[1]', 'varchar(max)') 
            + ' CC: ' 
            + ISNULL(CAST(subs.ExtensionSettings AS xml).value(N'(/ParameterValues/ParameterValue[Name="CC"]/Value)[1]', 'varchar(max)'), ' ')
            as EmailRecipients
        -- </RECIPIENTS function>
        , CAST(subs.ExtensionSettings AS xml).value(N'(/ParameterValues/ParameterValue[Name="RenderFormat"]/Value)[1]', 'varchar(max)') 
            as RenderFormat
        , subs.SubscriptionID
        , sched.Name as [ScheduleName]
        , UserCreatedSched.UserName as [UserCreatedSched] 
        , sched.EventType as [ScheduleType]
        -- 
        , CASE RecurrenceType
            WHEN 1 THEN 'Once'
            WHEN 2 THEN 'Hourly'
            WHEN 3 THEN 'Daily' --by interval
            WHEN 4 THEN
                CASE
                    WHEN WeeksInterval>1 THEN 'Weekly'
                    ELSE 'Daily' --by day of week
                END
            WHEN 5 THEN 'Monthly' --by calendar day
            WHEN 6 THEN 'Monthly' --by day of week
            END AS [sched_type]
        , sched.StartDate
        , sched.EndDate
        , sched.MinutesInterval
        , sched.RecurrenceType
        , sched.DaysInterval
        , sched.WeeksInterval
        , sched.MonthlyWeek
        , wkdays.label AS [wkday]
        , wkdays.daybit AS [wkdaybit]
        , monthdays.label AS [mnthday]
        , monthdays.daybit AS [mnthdaybit]
        , months.label AS [mnth]
        , months.mnthbit
    INTO #t
    FROM 
        dbo.Catalog AS cat
        LEFT JOIN dbo.ReportSchedule AS repsched ON repsched.ReportID=cat.ItemID
        LEFT JOIN dbo.Subscriptions AS subs ON subs.SubscriptionID=repsched.SubscriptionID
        LEFT JOIN dbo.Schedule AS sched ON sched.ScheduleID=repsched.ScheduleID
        LEFT JOIN wkdays ON wkdays.daybit & sched.DaysOfWeek > 0
        LEFT JOIN monthdays ON monthdays.daybit & sched.DaysOfMonth > 0
        LEFT JOIN months ON months.mnthbit & sched.[Month] > 0
        LEFT JOIN dbo.Users UserOwnerSubs ON subs.OwnerId = UserOwnerSubs.UserID
        LEFT JOIN dbo.Users UserCreatedSched ON sched.CreatedByID = UserCreatedSched.UserID
    WHERE cat.ParentID IS NOT NULL --all reports have a ParentID


    /* THE PREVIOUS QUERY LEAVES MULTIPLE ROWS FOR SUBSCRIPTIONS THAT HAVE MULTIPLE BITMASK MATCHES      *
     * THIS QUERY WILL CONCAT ALL OF THOSE FIELDS TOGETHER AND ACCUMULATE THEM IN A TABLE FOR USE LATER. */

    CREATE TABLE #c (type VARCHAR(16) COLLATE Latin1_General_CI_AS_KS_WS, name VARCHAR(255) COLLATE Latin1_General_CI_AS_KS_WS, path VARCHAR(255) COLLATE Latin1_General_CI_AS_KS_WS, concatStr VARCHAR(2000) COLLATE Latin1_General_CI_AS_KS_WS);


    WITH d AS (
        SELECT DISTINCT 
            path
            , name
            , mnthday AS lbl
            , mnthdaybit AS bm
        FROM #t
        )

    INSERT INTO #c (type,path,name,concatStr)
    SELECT 
        'monthday' AS type
        , t1.path,t1.name
        , STUFF((
            SELECT ', ' + CAST(lbl AS VARCHAR(MAX))
            FROM d AS t2
            WHERE t2.path=t1.path AND t2.name=t1.name
            ORDER BY bm
            FOR XML PATH(''),TYPE
        ).value('.','VARCHAR(MAX)'),1,2,'') 
        AS concatStr
    FROM d AS t1
    GROUP BY t1.path,t1.name;

    WITH d AS (
        SELECT DISTINCT path,
            name,
            wkday AS lbl,
            wkdaybit AS bm
        FROM #t
        )

    INSERT INTO #c (type,path,name,concatStr)
    SELECT 
        'weekday' AS type
        , t1.path,t1.name
        , STUFF(
            (
                SELECT ', ' + CAST(lbl AS VARCHAR(MAX))
                FROM d AS t2
                WHERE t2.path=t1.path AND t2.name=t1.name
                ORDER BY bm
                FOR XML PATH(''),TYPE
            ).value('.','VARCHAR(MAX)'),1,2,'') 
            AS concatStr
    FROM d AS t1
    GROUP BY t1.path,t1.name;

    WITH d AS (
        SELECT DISTINCT 
            path
            , name
            , mnth AS lbl
            , mnthbit AS bm
        FROM #t
        )

    INSERT INTO #c (type,path,name,concatStr)
    SELECT 
        'month' AS type
        , t1.path,t1.name
        , STUFF(
            (
                SELECT ', ' + CAST(lbl AS VARCHAR(MAX))
                FROM d AS t2
                WHERE t2.path=t1.path AND t2.name=t1.name
                ORDER BY bm
                FOR XML PATH(''),TYPE
            ).value('.','VARCHAR(MAX)'),1,2,'') 
            AS concatStr
    FROM d AS t1
    GROUP BY t1.path,t1.name;


    /* PUT EVERYTHING TOGETHER FOR THE REPORT */

    SELECT 
        a.name
        , a.sched_type
        , ScheduleType
        , CASE 
            WHEN a.description IS NOT NULL THEN SubscriptionType
            WHEN a.ScheduleType='ReportHistorySchedule' THEN '...ReportSnapshot'
            ELSE '...ReportCache'
            END AS [Usage]
        , SubscriptionType
        , a.Elements_List
        , a.DeliveryExtension
        , a.UserOwnerSubs
        , a.UserCreatedSched
        , a.EmailRecipients
        , a.RenderFormat
--      , ExtensionSettings
        , ScheduleName
        , SubscriptionID
        , a.creationdate
        , a.modifieddate
        , a.modifieddate2
        , CAST(a.StartDate as date) as StartDate
        , CAST(a.EndDate as date) as EndDate
        , a.description AS sched_desc
        , a.laststatus AS sched_laststatus
        , a.lastruntime AS sched_lastrun
        , a.inactiveflags AS sched_inactive
        , a.path 
        , CASE RecurrenceType
            WHEN 1 THEN 'Run once on '
                ELSE 'Starting on '
            END 
            + CAST(StartDate AS VARCHAR(32)) + ' ' +
            CASE RecurrenceType
                WHEN 1 THEN ''
                WHEN 2 THEN 'repeat every ' + CAST(MinutesInterval AS VARCHAR(255)) + ' minutes.'
                WHEN 3 THEN 'repeat every ' + CAST(DaysInterval AS VARCHAR(255)) + ' days.'
                WHEN 4 THEN 
                    CASE
                        WHEN WeeksInterval>1 THEN 'repeat every ' + CAST(WeeksInterval AS VARCHAR(255)) + ' on ' + COALESCE(wkdays.concatStr,'')
                        ELSE 'repeat every ' + COALESCE(wkdays.concatStr,'')
                    END
                WHEN 5 THEN 'repeat every ' + COALESCE(mnths.concatStr,'') + ' on calendar day(s) '  + COALESCE(mnthdays.concatStr,'')
                WHEN 6 THEN 'run on the ' + 
                    CASE 
                        MonthlyWeek WHEN 1 THEN '1st' WHEN 2 THEN '2nd' WHEN 3 THEN '3rd' WHEN 4 THEN '4th' WHEN 5 THEN 'Last' 
                    END 
                    + ' week of ' + COALESCE(mnths.concatStr,'') + ' on ' + COALESCE(wkdays.concatStr,'')

        END 
        + ' Ending on ' + ISNULL(CAST(EndDate AS VARCHAR(32)), 'Never')
        AS sched_pattern
    FROM 
        (
            SELECT DISTINCT path,name,creationdate,modifieddate,modifieddate2,SubscriptionType,RenderFormat, /*ExtensionSettings,*/ ScheduleName, UserOwnerSubs,ScheduleType,SubscriptionID,description, UserCreatedSched,laststatus,lastruntime,StartDate,EndDate,inactiveflags,sched_type,recurrencetype,minutesinterval,daysinterval,weeksinterval,monthlyweek
                ,cast(Elements_List as nvarchar(500)) as Elements_List, DeliveryExtension
                , '(x'
                    + CAST((LEN(EmailRecipients) - LEN(REPLACE(EmailRecipients,'@',''))) / LEN('@') as nvarchar(10))
                    + ') '
                    + REPLACE(EmailRecipients,'@GEORGESINC.COM','@DOMAIN') 
                    as EmailRecipients
            FROM #t
        ) AS a
        LEFT JOIN #c AS mnthdays ON mnthdays.path COLLATE DATABASE_DEFAULT =a.path COLLATE DATABASE_DEFAULT 
            AND mnthdays.name COLLATE DATABASE_DEFAULT =a.name COLLATE DATABASE_DEFAULT 
            AND mnthdays.type COLLATE DATABASE_DEFAULT ='monthday' COLLATE DATABASE_DEFAULT
        LEFT JOIN #c AS wkdays ON wkdays.path COLLATE DATABASE_DEFAULT =a.path COLLATE DATABASE_DEFAULT 
            AND wkdays.name COLLATE DATABASE_DEFAULT=a.name COLLATE DATABASE_DEFAULT
            AND wkdays.type COLLATE DATABASE_DEFAULT ='weekday' COLLATE DATABASE_DEFAULT
        LEFT JOIN #c AS mnths ON mnths.path COLLATE DATABASE_DEFAULT =a.path COLLATE DATABASE_DEFAULT 
            AND mnths.name COLLATE DATABASE_DEFAULT =a.name COLLATE DATABASE_DEFAULT 
            AND mnths.type COLLATE DATABASE_DEFAULT ='month' COLLATE DATABASE_DEFAULT
    WHERE 
        a.sched_type IS NOT NULL
        AND (@ReportName = 'All Reports' OR a.Name like @ReportName) 

    DROP TABLE #t,#c;