tsql ssrs延迟订单的百分比

时间:2011-08-06 09:07:02

标签: tsql reporting-services

我是tsql和ssrs的新手,到目前为止我只训练了3天所以要温柔! 我正在尝试撰写一份报告,显示订单延迟的每个月的次数,并显示我们按时完成的百分比。到目前为止,我已经得到了这个:

SELECT
    COUNT(*) AS NoOfWo, 
    CASE WHEN DATEDIFF(d, CompletionDate, LastActualCompDate) <= 0 THEN 'OnTime' ELSE 'Late' END AS Performance, 
    DATENAME(mm, LastActualCompDate) AS month
FROM         WipHeader
WHERE     (LastActualCompDate >= CAST(DATEPART(year, GETDATE()) AS varchar) + '-01-01')
GROUP BY
    CASE WHEN DATEDIFF(d, CompletionDate, LastActualCompDate) <= 0 THEN 'OnTime' ELSE 'Late' END, MONTH(LastActualCompDate), DATENAME(mm, LastActualCompDate)
ORDER BY
    MONTH(LastActualCompDate)

到目前为止,这会返回迟到的数字和时间以及今年每个月的订单总数,但我无法确定如何返回百分比? 任何帮助将不胜感激! 感谢。

2 个答案:

答案 0 :(得分:3)

最简单的方法是使用OVER添加此COUNT以提供Late + OnTime的总数,然后在SSRS中执行百分比

SELECT
    COUNT(*) OVER () AS Total,
    COUNT(*) AS NoOfWo, 
    CASE WHEN DATEDIFF ... blah

或者,如果你想在SQL中使用它(可能需要一些嵌套,而不是测试)

SELECT
    COUNT(*) OVER () AS Total,
    COUNT(*) AS NoOfWo, 
    CAST(100 AS float) * COUNT(*) / COUNT(*) OVER () AS percentage
    CASE WHEN DATEDIFF ... blah

答案 1 :(得分:0)

感谢gbn,但都没有奏效。也许是我是一个新手并且不知道如何粘贴它.SQL选项没有,但数据很糟糕,它返回超过100%的百分比,这是不可能的。 我这样修好了。查询现在看起来像:

SELECT     COUNT(*) AS NoOfWo, DATENAME(mm, LastActualCompDate) AS month, LastActualCompDate, CompletionDate, JobNo
FROM         WipHeader
WHERE     (LastActualCompDate >= CAST(DATEPART(year, GETDATE()) AS varchar) + '-01-01') AND (NOT (LastActualCompDate IS NULL))
GROUP BY MONTH(LastActualCompDate), DATENAME(mm, LastActualCompDate), LastActualCompDate, CompletionDate, JobNo
HAVING      (NOT (LastActualCompDate IS NULL)) AND (NOT (LastActualCompDate IS NULL)) AND (NOT (MONTH(LastActualCompDate) IS NULL))
ORDER BY MONTH(LastActualCompDate)

然后在SSRS中,我使用以下表达式将一个新的计算字段添加到名为CalcDateDiff的数据集中:

=datediff("d",Fields!CompletionDate.Value,Fields!LastActualCompDate.Value)

然后在表格中我添加了名为'Late','On Time'和'%On Time'的新列,并分别在下面添加了表达式:

=count(iif (fields!CalcDateDiff.Value>0,1,nothing))
=count(iif (fields!CalcDateDiff.Value<=0,1,nothing))
=count(iif (fields!CalcDateDiff.Value<=0,1,nothing))/Sum(Fields!NoOfWo.Value)

然后将最后一个的文本框属性设置为Percentage,并按月添加一个组。

嘿嘿。我只花了4天时间!