[英]SSRS Report shows data for different dates
如果我刪除sessiondate字段,我的報告(計算出勤百分比)將顯示匯總數據。
但是我需要它,因為用戶需要每月運行它(當前我們手動運行查詢)
因此,我的查詢中有基於開始和結束日期參數的sessiondate字段
查詢:
SELECT sessiondate,
Possible,
Present,
SUM(Possible_Duration) AS Possible_Duration,
SUM(Present_Duration) AS Present_Duration,
CASE WHEN SUM(Present_Duration) = 0 THEN 0
ELSE
SUM(Present_Duration) / SUM(Possible_Duration) END AS Attendance,
SUM(CASE WHEN Mark = 'L' THEN 1 ELSE 0 END) AS Late_Mark,
SUM(Possible) AS Possib,
SUM(CASE WHEN Mark = 'A' THEN 1 ELSE 0 END) AS Authorised_absence,
SUM(CASE WHEN Mark = '/' THEN 1 ELSE 0 END) AS Present_,
SUM(CASE WHEN Mark = 'O' THEN 1 ELSE 0 END) AS Absent_fromClass
FROM Table
WHERE Sessiondate >= @startdate
AND Sessiondate <= @Enddate
GROUP BY Session_dt
查詢結果:
--------------------------------------
col1 | col2 | Session_dt | attendance
--------------------------------------
A | B | 01/01/2015 | 100
A | B | 03/01/2015 | 69
A | B | 05/01/2015 | 100
預期結果:
--------------------------
col1 | col2 | attendance
--------------------------
A | B | 89.3
現在,我只在查詢中指定日期並運行報告。 有什么辦法可以使用參數值來實現此目的?
該查詢將返回當月第一天和最后一個日期之間的數據,然后您只需要計划報表在每個月末運行即可:
select *
where [Date] between
CONVERT(VARCHAR(25),DATEADD(dd,-(DAY(GETDATE())-1),GETDATE()),101) --first date
and
CONVERT(VARCHAR(25),DATEADD(dd,-(DAY(DATEADD(mm,1,GETDATE()))),DATEADD(mm,1,GETDATE())),101) --last date
您可以將一個參數作為@monthNo放在您的SSRS報告中,並僅顯示1月-12月的月份列表,其值僅為1 -12。
在SQL方面,您可能會收到用戶選擇的月份號,並按以下方式使用它:
declare @monthNo as char(2) = '1'; -- remove this from your SQL
declare @firstDate as datetime;
declare @lastDate as datetime;
select @firstDate = CONVERT(datetime,CONVERT(CHAR(4),year(getdate())) + '-' + @monthNo + '-1');
select @lastDate = dateadd(day,-1,(dateadd(month,1,@firstDate)));
select *
from [table]
where [date] between @firstDate and @lastDate;
現在您可以在任何月份運行報告。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.