2013-07-24 74 views
0

在SSRS我需要确定一个返回结果的情况下,有多少次一个驱动程序登录到用户指定的日期之间的系统 - 我已经有显示[Driver] "LoggedOn at" [TimeOn] "Logged off at" [TimeOff] "for a duration of" [TimeOff-TimeOn](多一点它比报告,但多数民众赞成在骨头)。SSRS 2008 - 计数

产生的报表看起来像这样和正常工作:

David Niven logged on at .... for a duration of 3 hours 

John Jones logged on at ... for a duration of 7 hours 

David Niven logged on at ... for a duration of 5 hours 

David Niven logged on at ... for a duration of 2 hours 

Paul Newman logged on at .... for a duration of 3 hours etc etc 

我需要做的是提供一个总结 - 用户指定日期

David Niven logged on 3 times for a total duration of 10 hours 
John Jones logged on 1 time for a total duarion of 7 hours 
Paul Newman logged on 1 time for a total duartion of 3 hours 

我可以使用表达式之间即加次,每次司机在SSRS 2008多长时间登录的号码? - 如果是这样,如何 - 如果需要,可以给我的查询更具体的例子...提前很多很多的感谢

回答

0

您可以使用两种不同的查询,只使用分组和一个子查询:

DECLARE @driverInfo TABLE 
(
    Name varchar(50), 
    TimeOn datetime, 
    TimeOff datetime 
) 

INSERT INTO @driverInfo 
SELECT 'David Niven', '2013-07-23 09:00', '2013-07-23 12:00' 
UNION ALL SELECT 'John Jones', '2013-07-23 09:00', '2013-07-23 16:00' 
UNION ALL SELECT 'David Niven', '2013-07-23 13:00', '2013-07-23 18:00' 
UNION ALL SELECT 'David Niven', '2013-07-24 09:00', '2013-07-24 11:00' 
UNION ALL SELECT 'Paul Newman', '2013-07-23 09:00', '2013-07-23 12:00' 

-- used for first data set 
SELECT *, DATEDIFF(hour, TimeOn, TimeOff) AS [TotalHours] 
FROM @driverInfo 

-- used for second data set 
SELECT Name, COUNT(*), SUM(TotalHours) 
FROM (
    SELECT Name, DATEDIFF(hour, TimeOn, TimeOff) AS [TotalHours] 
    FROM @driverInfo 
) S 
GROUP BY S.Name 
0

如果你想在报告级别从同一数据集的详细值要做到这一点,你可以这样添加表达式到组页眉/页脚:

=Fields!Driver.Value 
    & " logged on " 
    & CountRows() 
    & " times for a total duration of " 
    & Sum(DateDiff(DateInterval.Hour, Fields!TimeOn.Value, Fields!TimeOff.Value)) 
    & " hours" 

CountRows只是给出了行数组,即登录的次数,你可以总结的该组中每一行的值来获得总小时。

+0

难道你有这个建议任何运气? –