Sql 从SSRS表中排除某些数据

Sql 从SSRS表中排除某些数据,sql,reporting-services,Sql,Reporting Services,我想将周末和假日从我的表中排除: 例如,在这张图片中,我想排除日期19.01。从我的表格中选择10.01或在2016年1月10日仅显示0 这是我的代码: SELECT * FROM ( Select intervaldate as Datum, tsystem.Name as Name, SUM(case when Name = 'Maschine 1' then Units else 0 end) as Maschine1, Sum(case when Name = 'Ma

我想将周末和假日从我的表中排除:

例如,在这张图片中,我想排除日期19.01。从我的表格中选择10.01或在2016年1月10日仅显示0

这是我的代码:

SELECT *
    FROM (
    Select intervaldate as Datum, tsystem.Name as Name, 
SUM(case when Name = 'Maschine 1' then Units else 0 end) as Maschine1,
Sum(case when Name = 'Maschine 2' then Units else 0 end) as Maschine2,
Sum(case when Name = 'Maschine 3' then Units else 0 end) as Maschine3,


from Count inner join tsystem ON Count.systemid = tsystem.id
    where IntervalDate BETWEEN @StartDateTime AND @EndDateTime
    and tsystem.Name in ('M101','M102','M103','M104','M105','M107','M109','M110', 'M111', 'M113', 'M114', 'M115') 
    group by intervaldate, tsystem.Name
    ) as s

对于排除周末…可以使用日期函数和IIF条件。如果周数为7或1,则在报告中排除…您可以通过右键单击报告属性并选择筛选来完成此操作。

我认为最好的方法是在数据库中创建一个表并存储所有周末和假日日期,然后使用该表筛选查询

大概是这样的:

SELECT *
    FROM (
    Select intervaldate as Datum, tsystem.Name as Name, 
SUM(case when Name = 'Maschine 1' then Units else 0 end) as Maschine1,
Sum(case when Name = 'Maschine 2' then Units else 0 end) as Maschine2,
Sum(case when Name = 'Maschine 3' then Units else 0 end) as Maschine3,


from Count inner join tsystem ON Count.systemid = tsystem.id
    where IntervalDate BETWEEN @StartDateTime AND @EndDateTime
    and IntervalDate NOT IN (select WeekendOrHolidayDate from MyWeekendAndHolidayTable) 
    and tsystem.Name in ('M101','M102','M103','M104','M105','M107','M109','M110', 'M111', 'M113', 'M114', 'M115') 
    group by intervaldate, tsystem.Name
    ) as s
以下查询将仅排除工作日。如果您还想排除假日,则无法从SQL生成假日,您必须将其存储在数据库中的某个位置

SELECT *
    FROM (
    Select intervaldate as Datum, tsystem.Name as Name, 
SUM(case when Name = 'Maschine 1' then Units else 0 end) as Maschine1,
Sum(case when Name = 'Maschine 2' then Units else 0 end) as Maschine2,
Sum(case when Name = 'Maschine 3' then Units else 0 end) as Maschine3,


from Count inner join tsystem ON Count.systemid = tsystem.id
where IntervalDate BETWEEN @StartDateTime AND @EndDateTime
and ((DATEPART(dw, IntervalDate) + @@DATEFIRST) % 7) NOT IN (0, 1)
and tsystem.Name in ('M101','M102','M103','M104','M105','M107','M109','M110', 'M111', 'M113', 'M114', 'M115') 
    group by intervaldate, tsystem.Name
    ) as s

如果这对您有帮助,请告诉我。

右键单击tablix中的行组,然后选择行可见性。在“更改显示选项”中,选择“基于表达式显示”或“隐藏”。在表达式中,这应该起作用:

=iif(CDate(Fields!Date.Value).DayOfWeek = DayOfWeek.Saturday, true, iif(CDate(Fields!Date.Value).DayOfWeek = DayOfWeek.Sunday, true, false))
如果有大量数据,出于性能原因,我建议在数据库端修剪这些行