簡體   English   中英

SSRS報告查詢-WHERE子句中的BETWEEN

[英]SSRS Report Query - BETWEEN within WHERE clause

我正在創建一個SSRS報告,該報告顯示了過去幾個月在某些SQL服務器上收集的各種計數器。 我的報告正在運行,但是我想添加一個增強功能,但是還不太清楚該怎么做。

基本上,我想查詢我的“性能統計信息”表,並且只選擇報表中指定的2個日期之間的記錄。 我還希望根據參數在一天中的小時內進一步減少該金額。 例如,我希望能夠選擇2014年1月1日至2014年2月1日的所有記錄,它將所有這些記錄返回到我定義的圖形中。

此外,我想創建一個下拉框,報表用戶可以在其中選擇記錄CPU計數器的時間,例如“僅營業時間”(8:00 am-5:00 pm)或“僅營業時間以外” ”(下午5:00-上午08:00),甚至兩者都有。

編輯:

OK-我的腳本適用於以下情況:

DECLARE @DateFrom DATETIME = DATEADD(month, -1, GETDATE())
DECLARE @DateThru DATETIME = GETDATE()
DECLARE @Hours INT = 1

SELECT  Stat_Datetime ,
        cntr_value
FROM    Admin.dbo.PerformanceCounters
WHERE   object_name = 'Processor'
        AND Stat_Datetime BETWEEN @DateFrom AND @DateThru
        AND ( 1 IN (SELECT * FROM dbo.fnSplitString(@Hours, ''))
              AND ( (CAST(Stat_Datetime AS TIME) BETWEEN '08:00'
                                                 AND     '17:00') )
              OR ( 2 IN (SELECT * FROM dbo.fnSplitString(@Hours, ''))
                   AND ( ( CAST(Stat_Datetime AS TIME) >= '17:00' )
                         OR ( CAST(Stat_Datetime AS TIME) < '08:00' )
                       )
                   OR ( 1 IN (SELECT * FROM dbo.fnSplitString(@Hours, '')) AND 2 IN (SELECT * FROM dbo.fnSplitString(@Hours, '')))
                 )
            )
ORDER BY stat_datetime

但是,當SSRS執行它時,該函數返回錯誤:

Msg 8144, Level 16, State 3, Line 6
Procedure or function dbo.fnSplitString has too many arguments specified.

這是SSRS執行它的方式(來自事件探查器):

exec sp_executesql N'SELECT  Stat_Datetime ,
        cntr_value
FROM    Admin.dbo.PerformanceCounters
WHERE   object_name = ''Processor''
        AND Stat_Datetime BETWEEN @DateFrom AND @DateThru
        AND ( 1 IN (SELECT * FROM dbo.fnSplitString(1,2, ''''))
              AND ( (CAST(Stat_Datetime AS TIME) BETWEEN ''08:00''
                                                 AND     ''17:00'') )
              OR ( 2 IN (SELECT * FROM dbo.fnSplitString(1,2, ''''))
                   AND ( ( CAST(Stat_Datetime AS TIME) >= ''17:00'' )
                         OR ( CAST(Stat_Datetime AS TIME) < ''08:00'' )
                       )
                   OR ( 1 IN (SELECT * FROM dbo.fnSplitString(1,2, '''')) AND 2 IN (SELECT * FROM dbo.fnSplitString(1,2, '''')))
                 )
            )
ORDER BY stat_datetime',N'@DateFrom datetime,@DateThru datetime',@DateFrom='2014-08-13 00:00:00',@DateThru='2014-11-13 00:00:00'

您可以嘗試從以下腳本中獲取參考。

SELECT *
FROM
(    
SELECT   Stat_Datetime ,
        cntr_value,
        CASE 
        WHEN Stat_Datetime BETWEEN CAST(CONVERT(VARCHAR(10), Stat_Datetime , 110) + ' 08:00:00' AS DATETIME)
                     AND CAST(CONVERT(VARCHAR(10), Stat_Datetime , 110) + ' 17:00:00' AS DATETIME) THEN 'BH'
        WHEN Stat_Datetime BETWEEN CAST(CONVERT(VARCHAR(10), Stat_Datetime , 110) + ' 17:00:00' AS DATETIME)
                     AND CAST(CONVERT(VARCHAR(10), Stat_Datetime, 110) + ' 08:00:00' AS DATETIME) THEN 'OBH'                     
        END AS 'BHours'
FROM    Admin.dbo.PerformanceCounters
WHERE   object_name = 'Processor'
)Result
WHere BHours IN('BH','OBH')

嘗試將var @hours聲明為int,並可能具有3種狀態DECLARE @Hours INT

@小時:

BH-1

OBH-2

BH或OBH-三項

AND (@Hours = 1 
    AND (
        (CAST(Stat_Datetime AS TIME) BETWEEN '08:00' AND '17:00')
        )
OR (@Hours = 2
    AND (
        (CAST(Stat_Datetime AS TIME) BETWEEN '17:00' AND '08:00')
        )
    )
OR (@Hours = 3)--both

通過執行以下操作,我能夠在不使用split功能的情況下使所有工作正常:

DECLARE @DateFrom DATETIME = DATEADD(month, -1, GETDATE())
DECLARE @DateThru DATETIME = GETDATE()
DECLARE @Hours INT = 1

SELECT  Stat_Datetime ,
        cntr_value
FROM    Admin.dbo.PerformanceCounters
WHERE   object_name = 'Processor'
        AND Stat_Datetime BETWEEN @DateFrom AND @DateThru
        AND ( 1 IN ( @Hours )
              AND ( (CAST(Stat_Datetime AS TIME) BETWEEN '08:00'
                                                 AND     '17:00') )
              OR ( 2 IN ( @Hours )
                   AND ( ( CAST(Stat_Datetime AS TIME) >= '17:00' )
                         OR ( CAST(Stat_Datetime AS TIME) < '08:00' )
                       )
                 )
            )
ORDER BY stat_datetime

謝謝您的幫助:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM