Список параметров ReportServer для отчета, которые выполняются дольше некоторого среднего времени выполнения - PullRequest
0 голосов
/ 18 июня 2020

Я пытаюсь получить параметры отчета из таблицы ReportServer.dbo.Catalog для отчетов, время выполнения которых превышает среднее время. Пока я могу рассчитать min.max, avg время выполнения, но я хочу проверить параметры отчетов, которые выполняются дольше некоторого среднего времени.

    SELECT TOP 100 
               COUNT(*) TimesRun,
               c.[Name] ReportName,
               AVG(l.TimeDataRetrieval + l.TimeProcessing + l.TimeRendering) / 1000.0 [AverageExecutionTimeSeconds]            
FROM [ReportServer].[dbo].[ExecutionLog](NOLOCK) AS l
INNER JOIN [ReportServer].[dbo].[Catalog](NOLOCK) AS c ON l.ReportID = C.ItemID
WHERE c.Type = 2 -- Only show reports 1=folder, 2=Report, 3=Resource, 4=Linked Report, 5=Data Source
GROUP BY c.Name
HAVING AVG(l.TimeDataRetrieval + l.TimeProcessing + l.TimeRendering) / 1000.0 > 1
ORDER BY AVG(l.TimeDataRetrieval + l.TimeProcessing + l.TimeRendering) DESC;

Как объединить этот код, возможно, как хранимая процедура чтобы получить среднее значение для каждого отчета, а также проверить, какие параметры использовались, когда отчет превышал среднее значение.

1 Ответ

0 голосов
/ 18 июня 2020

Это зависит от того, что вы пытаетесь сделать с данными и как вы ожидаете, что результат будет выглядеть.

Вы можете сделать что-нибудь простое, например, CROSS APPLY, функцию разделения по столбцу параметров. Что-то вроде этого даст вам разделение параметров по строкам. Возможно, это не то, что вам нужно, но, надеюсь, укажет вам правильное направление.

SELECT TOP 100 
               COUNT(*) TimesRun,
               c.[Name] ReportName,
               AVG(l.TimeDataRetrieval + l.TimeProcessing + l.TimeRendering) / 1000.0 [AverageExecutionTimeSeconds]            
            , p.[value] AS ParameterNameAndValue
    FROM [ReportServer].[dbo].[ExecutionLog](NOLOCK) AS l
        INNER JOIN [ReportServer].[dbo].[Catalog](NOLOCK) AS c ON l.ReportID = C.ItemID
        CROSS APPLY string_split(CAST(Parameters as varchar(max)),'&') p
    WHERE c.Type = 2 -- Only show reports 1=folder, 2=Report, 3=Resource, 4=Linked Report, 5=Data Source
    GROUP BY c.Name, p.[value]
    HAVING AVG(l.TimeDataRetrieval + l.TimeProcessing + l.TimeRendering) / 1000.0 > 1
    ORDER BY AVG(l.TimeDataRetrieval + l.TimeProcessing + l.TimeRendering) DESC

Вы можете дополнительно разделить это на имя параметра и значение. Я не уверен, что вам действительно нужно.

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