【发布时间】:2016-08-19 06:30:42
【问题描述】:
首先我使用了一个没有第二个select语句的查询,积极的是如果我选择一个较长的时间段,报告真的很快,但它会显示我每个周末和节假日。这不是一个大问题,然后我在 SSRS 中使用过滤器选项排除了每个空闲日,之后报告只显示了工作日,但问题是,还有额外的行带有 0,这影响了计算。
唯一的解决方案是添加第二个选择语句“Scheduled”。
添加内部连接后,报告运行速度非常慢。第二个 Select 语句是一个时间表,它不包括所有周末和节假日,如果我运行它,它不会显示任何额外的行。但最大的问题是,报告运行速度非常慢。如果我选择超过六个月的时间,它会显示“超时错误”。
查询:
SELECT c.date,
c.team,
c.NAME,
c.prod,
c.product
FROM (SELECT intervaldate AS Date,
tsystem.NAME AS NAME,
productname AS Product,
teamname AS Team,
Sum(CASE
WHEN countername = 'Prod' THEN displayunits
ELSE 0
END) AS Prod
FROM count
INNER JOIN tsystem
ON count.systemid = tsystem.id
WHERE intervaldate >= @StartDateTime
AND intervaldate <= @EndDateTime
AND tsystem.id IN (SELECT systemid
FROM viewsystem
WHERE viewid = 122)
GROUP BY intervaldate,
teamname,
tsystem.NAME,
productname) c
INNER JOIN (SELECT sh.scheduled AS Scheduled,
sc.NAME AS NAME
FROM history sh
INNER JOIN schedule sc
ON ( sc.id = sh.scheduleid )
WHERE scheduled != 0) p
ON p.NAME = c.NAME
有没有可能让它更快?
【问题讨论】:
-
您使用的是哪个版本的 SQL Server?您可以通过将新的
INNER JOIN加入到tsystem.NAME来将新的INNER JOIN添加到第一个查询中,看看是否有帮助?可以分享一下查询计划吗? -
根据您提供的内容,我建议(如@NickyvV)查看查询计划。如果您对“countername”不是“Prod”的地方不感兴趣,那么也许可以将其过滤掉。此外,我很想用内部连接替换“systemid”的 IN 子句并观察性能。
标签: sql sql-server reporting-services