首先,我使用了没有第二个选择语句的查询,积极的是如果我选择了很长一段时间,报告真的很快,但它在每个周末和假日都显示了我。这不是一个大问题,然后我用SSRS中的过滤器选项排除了每个自由日,之后报告只显示了工作日,但问题是,有一些额外的行为0,这影响了计算。
唯一的解决方案是添加第二个选择语句“Scheduled”。 添加内部联接后,报表运行速度非常慢。第二个Select Statement是一个时间表,它排除了所有的周末和假日,如果我运行它,它不会显示任何额外的行。但是,大的问题是,报告运行速度非常慢。如果我选择了六个月的时间,它会显示“超时错误” 查询:
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
有没有可能让它更快?
答案 0 :(得分:0)
您需要使用join
替换查询(子查询)的下方部分<强> - &GT;和tsystem.ID(从ViewSystem中选择ViewID = 122的SystemID)
<强> - &GT; tsystem.ID = ViewSystem.SystemID的内部JOIN ViewSystem,其中ViewID = 122
联接比子查询更快。