Sql server 2008 SSRS-根据用户选项报告显示数据:(小时/天/月/年/日峰值)

Sql server 2008 SSRS-根据用户选项报告显示数据:(小时/天/月/年/日峰值),sql-server-2008,reporting-services,ssrs-2012,Sql Server 2008,Reporting Services,Ssrs 2012,我有一个DB表,它存储所有仪表的客户名称、小时值(0-23)和读取日期。我创建了一个SSRS报告,它根据日期范围(开始和结束日期)从表中获取每小时数据 报表设计具有以下参数: Start Date: End Date: Customer: Dropdown list that show all our active customers Report By: Dropdown list that show (Hour/Day/Month/Day Peak/Month Peak/Year Peak)

我有一个DB表,它存储所有仪表的客户名称、小时值(0-23)和读取日期。我创建了一个SSRS报告,它根据日期范围(开始和结束日期)从表中获取每小时数据

报表设计具有以下参数:

Start Date:
End Date:
Customer: Dropdown list that show all our active customers
Report By: Dropdown list that show (Hour/Day/Month/Day Peak/Month Peak/Year Peak) 
最终用户选择日期范围(开始和结束)、customername和Reportby:Month。我应该能够根据用户选择的选项(report by:)显示报告

我在“查询”下创建了一个数据集,请执行以下查询:

SELECT CustomerName, ReadingDate, IntegratedHour, IntegratedUsage, IntegratedGeneration
FROM         DB.dbo.TableName
WHERE     (DATEADD(HOUR, IntegratedHour, ReadingDate) BETWEEN DATEADD(HOUR, 0, @StartDate) AND DATEADD(HOUR, 23, @EndDate)) AND 
                      (CustomerName = @FacilityName)
ORDER BY ReadingDate, IntegratedHour
此查询将生成小时值

我如何根据最终用户的选择筛选或使其按天/月/年显示报告。我不确定在哪里设置过滤器或如何查询


有人能帮我吗。感谢你的帮助/建议。谢谢

我不知道你的日峰值/月峰值/年峰值定义是什么,但希望这能有所帮助

DECLARE @StartDate DATETIME = '2017-01-01'
      , @EndDate DATETIME = '2017-12-02'
      , @FacilityName VARCHAR(50) = 'Peter'
      , @ReportBY VARCHAR(20) = 'Month'

DECLARE @TestData TABLE (CustomerName VARCHAR(50),ReadingDate DATETIME,IntegratedHour INT,IntegratedUsage DECIMAL(15,2),IntegratedGeneration  DECIMAL(15,2))
INSERT INTO @TestData
SELECT 'Peter','2017-01-01',1,20,33
INSERT INTO @TestData
SELECT 'Peter','2017-01-01',2,21,33
INSERT INTO @TestData
SELECT 'Peter','2017-01-01',3,22,33
INSERT INTO @TestData
SELECT 'Peter','2017-02-01',3,22,33


SELECT CustomerName
     , CASE WHEN @ReportBY = 'Hour' THEN IntegratedHour 
              WHEN @ReportBY = 'Day' THEN ReadingDate
              WHEN @ReportBY = 'Month' THEN MONTH(ReadingDate)
              WHEN @ReportBY = 'Day Peak' THEN ReadingDate
              WHEN @ReportBY = 'Month Peak' THEN ReadingDate
              WHEN @ReportBY = 'Year Peak' THEN ReadingDate
              ELSE  ReadingDate END As DateType
     , SUM(IntegratedUsage)
     , SUM(IntegratedGeneration)
FROM  @TestData
WHERE (DATEADD(hh, IntegratedHour, ReadingDate) BETWEEN DATEADD(hh, 0, @StartDate) AND DATEADD(hh, 23, @EndDate)) 
    AND (CustomerName = @FacilityName)
GROUP BY CustomerName
       , CASE WHEN @ReportBY = 'Hour' THEN IntegratedHour 
              WHEN @ReportBY = 'Day' THEN ReadingDate
              WHEN @ReportBY = 'Month' THEN MONTH(ReadingDate)
              WHEN @ReportBY = 'Day Peak' THEN ReadingDate
              WHEN @ReportBY = 'Month Peak' THEN ReadingDate
              WHEN @ReportBY = 'Year Peak' THEN ReadingDate
              ELSE  ReadingDate END

斯诺洛克,非常感谢你的代码。谢谢。下面是一个场景,当用户选择日期范围、设施和小时/天/月/年/。。从SSRS报告的下拉列表中,它应生成如下报告:天峰值-所选天的最高/最大(值)。集成使用,集成生成。MOnth Peak-IntegratedUsage的最高值/最大值,每个月的IntegratedGeneration-年份的最高值-IntegratedUsage的最高值,年份的IntegratedGeneration。只是澄清一下,在ReportBy参数中,是否要我将小时指定为小时、天指定为天、月指定为月等的值?无法使其正常工作,谢谢你在这方面的帮助。谢谢