Archiv pro štítek: ReportServer DB

Statistiky spuštění reportů

V databázi report serveru je užitečný pohled ExecutionLog3. Umožňuje získat informace o spouštění reportů, o tom, kteří uživatelé reporty spouští a s jakými parametry, jak dlouho trvalo načtení dat, jestli report nezhavaroval atd.

USE ReportServer

SELECT * FROM ExecutionLog3

--nejcasteji spoustene reporty
SELECT ItemPath, COUNT(*) pocetSpusteni 
FROM ExecutionLog3 
WHERE ItemAction = 'Render'
GROUP BY ItemPath 
ORDER BY pocetSpusteni DESC

--nejaktivnejsi uzivatele
SELECT UserName, COUNT(*) pocetSpusteni 
FROM ExecutionLog3 
WHERE ItemAction = 'Render'
GROUP BY UserName
ORDER BY pocetSpusteni DESC

--nejaktivnejsi uzivatele podle reportu
SELECT ItemPath, UserName, COUNT(*) pocetSpusteni 
FROM ExecutionLog3 
WHERE ItemAction = 'Render'
GROUP BY ItemPath, UserName
ORDER BY ItemPath, pocetSpusteni DESC

--reporty s chybou
SELECT ItemPath, UserName, TimeStart
FROM ExecutionLog3 
WHERE Status <> 'rsSuccess'
ORDER BY TimeStart DESC

--reporty s dlouhym nacitanim dat
SELECT ItemPath, UserName, TimeStart,TimeDataRetrieval
FROM ExecutionLog3 
WHERE ItemAction = 'Render'
ORDER BY TimeDataRetrieval DESC

--parametry spusteni
;WITH parametry(ItemPath, UserName, TimeStart, parametry) AS (
	SELECT ItemPath, UserName, TimeStart, CAST('<root><parametr><nazev>'+REPLACE(REPLACE(CAST([Parameters] AS VARCHAR(MAX)),'=','</nazev><hodnota>'),'&','</hodnota></parametr><parametr><nazev>')+'</hodnota></parametr></root>' AS XML) parametry
	FROM ExecutionLog3 
	WHERE ItemAction = 'Render' AND ISNULL(CAST([Parameters] AS NVARCHAR(MAX)),'') <> '' 
)
SELECT ItemPath, 
	UserName, 
	TimeStart, 
	T.p.value('nazev[1]','VARCHAR(50)') parametr, 
	T.p.value('hodnota[1]','VARCHAR(50)') hodnota
FROM parametry
CROSS APPLY parametry.nodes('/root/parametr') AS T(p)

Tabulka použitá v reportech

Často se stane, že změníme strukturu databázové tabulky a nevíme, které reporty tím rozbijeme. Následujícím dotazem nad databází report serveru můžeme dohledat reporty, které v příkazu obsahují hledaný text, třeba název tabulky, kterou jsme změnili.

DECLARE @text varchar(250)
SET @text = 'hledany text'

;WITH xmlCatalog AS
(
	SELECT
		 Name
		,Path
		,CONVERT(xml,CONVERT(varbinary(max),content)) AS Content
	FROM ReportServer.dbo.Catalog
	WHERE Type  = 2
)
SELECT 
	name,
	path,
	Query.value('(./*:CommandText/text())[1]','nvarchar(max)') AS CommandText
FROM xmlCatalog
CROSS APPLY xmlCatalog.Content.nodes('//*:Query') Queries(Query)
WHERE Query.value('(./*:CommandText/text())[1]','nvarchar(max)') like '%'+@text+'%'