tsql ssrs процент просроченных заказов - PullRequest
0 голосов
/ 06 августа 2011

Я очень новичок в 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 ]

3 голосов
/ 06 августа 2011

Самый простой способ - добавить этот COUNT с OVER, чтобы получить общее значение 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
0 голосов
/ 08 августа 2011

спасибо, но ни один не работалВозможно, я был новичком и не знал, как его вставить. Опция 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 я добавил новое поле Calculated в набор данных с именем CalcDateDiff с таким выражением:

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

Затем В таблице я добавил Новые столбцыназвали «Поздно», «Вовремя» и «% в срок» и добавили выражения внизу соответственно:

=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)

Затем установите свойства текстового поля последнего в процентах и ​​добавьте группу по месяцам.

И эй престо.Это заняло у меня всего 4 дня!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...