理解ReportServer.dbo.Schedule表

时间:2010-10-06 20:25:27

标签: reportingservices-2005 reportserver

您好我正在尝试制作一份报告,其中列出了我们的报表服务器上的所有订阅,它们所在的报表,运行的时间和日期以及重新记录。到目前为止,我已经能够获得报告的报告和时间表列表。我似乎无法理解Schedule表中的值和列的含义。

如果有人能够了解如何理解这些专栏及其价值观,我会非常感激。这是我到目前为止的查询。

USE ReportServer;
GO

SELECT Users.UserName
    ,c。名称AS报告
    ,订阅。描述
        ,附表。*
/ *,Schedule.RecurrenceType
    ,Schedule.MinutesInterval
    ,Schedule.DaysInterval
    ,Schedule.WeeksInterval
    ,Schedule.DaysOfWeek
    ,Schedule.DaysOfMonth
    ,附表。[月]
    ,Schedule.MonthlyWeek * /
来自[目录] AS c
    内部联合订阅
        ON c.ItemId = Subscriptions.Report_OId
    INNER JOIN用户
        ON Subscriptions.OwnerId = Users.UserId
    INNER JOIN ReportSchedule
        ON Subscriptions.SubScriptionId = ReportSchedule.SubScriptionId
    内部联合计划
        在ReportSchedule.ScheduleId = Schedule.ScheduleId

谢谢,
克里斯

2 个答案:

答案 0 :(得分:1)

以下是部分答案......

DaysOfWeek与二进制设置有关:

星期日是第0位:值为1 星期一是第1位:值2 星期二是第2位:价值4 星期三是第3位:价值8 星期四是第4位:价值16 星期五是第5位:价值32 星期六是第6位:价值64

因此,如果报告每周一和周三运行,则DaysOfWeek将为2 + 8或10。

我目前正在研究这个问题,所以当我发现更多时,我会加入这个。

答案 1 :(得分:1)

我有一个解决方案,因为它出现在我正在撰写的报告中。

create function [dbo].[calendarlist](@Value_in as int,@Type as int) returns varchar(200)
as
begin

/*
This code is to work out either the day of the week or the name of a month when given a value
Wrriten by S Manson.
31/01/2012
*/

declare @strings as varchar(200)
declare @Count int

if @Type = 2    --Months
    Begin
        set @Count =12
    end
else if @Type = 1   --Days of Week
    Begin
        Set @Count = 7
    End
else    --Days of Month
    Begin
        Set @Count = 31
    End

set @strings = ''

while @Count<>0
begin
    if @Value_in>=(select power(2,@count-1))
        begin
            set @Value_in = @Value_in - (select power(2,@count-1))
            If @Type=2
                Begin
                    set @strings = (SELECT DATENAME(mm, DATEADD(month, @count-1, CAST('2008-01-01' AS datetime)))) + ',' + @strings
                end
            else if @Type = 1
                begin
                    set @strings = (SELECT DATENAME(dw, DATEADD(day, @count-1, CAST('2012-01-01' AS datetime)))) + ',' + @strings
                end
            else
                begin
                    set @strings = convert(varchar(2),@Count) + ', ' + @strings
                end

        end
    set @count = @count-1
end
if right(@strings,1)=','
    set @strings = left(@strings,len(@strings)-1)

return @strings

end