Package 1 begintijd einddtijd duur
task 1 begintijd einddtijd duur
task 2 begintijd einddtijd duur
Package 2 begintijd einddtijd duur
task 1 begintijd einddtijd duur
task 2 begintijd einddtijd duur
Nou hiervoor heb ik de volgende query gemaakt:

Hieronder in tekstvorm
SELECT
PKG.executionid AS executionid,
PKG.source AS Package,
PKG.PackageStartTime AS PackageStartTime,
PKG.PackageEndTime AS PackageEndTime,
PKG.PackageDurationInSec AS PackageDurationInSec,
TSK.source AS Task,
TaskStartTime AS TaskStartTime,
TaskEndTime AS TaskEndTime,
DATEDIFF(ss,TSK.TaskStartTime, TSK.TaskEndTime) AS TaskDurationInSec
FROM
(SELECT
executionid,
source,
MIN(starttime) AS PackageStartTime,
MAX(endtime) AS PackageEndTime,
DATEDIFF(ss,MIN(starttime), MAX(endtime)) AS PackageDurationInSec
FROM sysssislog
WHERE event IN ('Packagestart', 'PackageEnd') -- Events van een Package.
GROUP BY executionid, source) PKG
INNER JOIN (SELECT
MAX(id) AS id,
executionid,
source,
MIN(starttime) AS TaskStartTime,
MAX(endtime) AS TaskEndTime
FROM sysssislog
WHERE event IN ('OnPreExecute', 'OnPostExecute') -- Events van een task
AND source NOT IN -- Package niet meenemen (is blijkbaar ook een task)
(SELECT source
FROM sysssislog
WHERE event IN ('Packagestart', 'PackageEnd'))
GROUP BY executionid, source) TSK ON PKG.executionid = TSK.executionid
AND PKG.PackageStartTime <= TSK.TaskStartTime AND PKG.PackageEndTime >= TSK.TaskEndTime
ORDER BY id DESC
Al met al ben ik aardig tevreden met het resultaat. Het is niet helemaal perfect omdat de joining op basis van tijd gaat, maar dat gaat wel goed door ook te joinen op executionid. Komende tijd een rapportje op bouwen en een beetje verder testen.
Greetz
Geen opmerkingen:
Een reactie posten