Forum Discussion
ChandanJha25
4 years agoNew Member
Refresh Failure Alert for Multiple Dashboards
Hello Team, I took charge of a BI engineering function having around 400 dashboards. I noted that for the scheduled refresh failures, the emails were going to the individual folks causing lot of ...
- 4 years ago
Hi ChandanJha25 ,
If you use this query (connected to your PBI report server) in an SSRS report and schedule the SSRS to email out the failures:
WITH cte_LastRefresh AS ( SELECT MAX(SubscriptionHistoryID) AS SubscriptionHistoryID ,SubscriptionID FROM dbo.SubscriptionHistory WHERE [Status] = 2 GROUP BY SubscriptionID ) SELECT c.Name as [Report Name] --rs.scheduleid ,c.path as [Report Path] ,sub.[Description] as [Schedule Name] --,sub.[LastStatus] as [Last Status] ,SUBSTRING(sh.Details,CHARINDEX('Message":"',sh.Details)+10,200)+ '...' AS [Error Detail] --CASE WHEN sub.[InactiveFlags] = 0 THEN 'Enabled' -- WHEN sub.[InactiveFlags] = 128 THEN 'Disabled' -- ELSE 'Other' --END as [Enabled] --,sub.[EventType] as "Event Type" ,CONVERT(Varchar(17),sub.[LastRunTime],113) as [Last Run Time] ,SUBSTRING(u_own.UserName,CHARINDEX('\',u_own.UserName)+1,10) as [Created by] ,SUBSTRING(u_mod.[UserName],CHARINDEX('\',u_mod.[UserName])+1,10) as [Modified by] ,CASE WHEN jsch.next_run_date = 0 THEN '-' ELSE Convert(Varchar(17),msdb.dbo.agent_datetime(jsch.next_run_date, jsch.next_run_time),113) END as [Next Run Time] --,CASE c.[Type] WHEN 2 THEN 'SSRS' -- WHEN 5 THEN 'Data Source' -- WHEN 7 THEN 'Report Part' -- WHEN 8 THEN 'Shared Dataset' -- When 13 Then 'Power BI' -- ELSE 'Other' -- END AS "ReportType" ,sub.LastStatus FROM [dbo].[Subscriptions] sub INNER JOIN dbo.[Catalog] c ON sub.report_oid = c.itemid INNER JOIN [dbo].Users u_own ON c.CreatedByID = u_own.UserID INNER JOIN [dbo].Users u_mod ON c.ModifiedByID = u_mod.UserID INNER JOIN dbo.ReportSchedule rs ON sub.SubscriptionID = rs.SubscriptionID INNER JOIN cte_LastRefresh lr ON rs.SubscriptionID = lr.SubscriptionID INNER JOIN dbo.SubscriptionHistory sh ON lr.SubscriptionHistoryID = sh.SubscriptionHistoryID LEFT OUTER JOIN msdb.dbo.sysjobs j ON CAST(rs.ScheduleID AS VARCHAR(100)) = j.name LEFT OUTER JOIN msdb.dbo.sysjobschedules jsch ON j.job_id = jsch.job_id WHERE 1=1 AND sub.LastStatus like '%failed%' AND jsch.next_run_date <> 0 AND Convert(smalldatetime,msdb.dbo.agent_datetime(jsch.next_run_date, jsch.next_run_time)) > getdate() order by 2To learn more details ,refer:
Best Regards
Lucien
v-luwang-msft
4 years agoCommunity Support
Hi ChandanJha25 ,
If you use this query (connected to your PBI report server) in an SSRS report and schedule the SSRS to email out the failures:
WITH cte_LastRefresh AS
(
SELECT
MAX(SubscriptionHistoryID) AS SubscriptionHistoryID
,SubscriptionID
FROM dbo.SubscriptionHistory
WHERE [Status] = 2
GROUP BY SubscriptionID
)
SELECT
c.Name as [Report Name]
--rs.scheduleid
,c.path as [Report Path]
,sub.[Description] as [Schedule Name]
--,sub.[LastStatus] as [Last Status]
,SUBSTRING(sh.Details,CHARINDEX('Message":"',sh.Details)+10,200)+ '...' AS [Error Detail]
--CASE WHEN sub.[InactiveFlags] = 0 THEN 'Enabled'
-- WHEN sub.[InactiveFlags] = 128 THEN 'Disabled'
-- ELSE 'Other'
--END as [Enabled]
--,sub.[EventType] as "Event Type"
,CONVERT(Varchar(17),sub.[LastRunTime],113) as [Last Run Time]
,SUBSTRING(u_own.UserName,CHARINDEX('\',u_own.UserName)+1,10) as [Created by]
,SUBSTRING(u_mod.[UserName],CHARINDEX('\',u_mod.[UserName])+1,10) as [Modified by]
,CASE WHEN jsch.next_run_date = 0 THEN '-'
ELSE Convert(Varchar(17),msdb.dbo.agent_datetime(jsch.next_run_date, jsch.next_run_time),113)
END as [Next Run Time]
--,CASE c.[Type] WHEN 2 THEN 'SSRS'
-- WHEN 5 THEN 'Data Source'
-- WHEN 7 THEN 'Report Part'
-- WHEN 8 THEN 'Shared Dataset'
-- When 13 Then 'Power BI'
-- ELSE 'Other'
-- END AS "ReportType"
,sub.LastStatus
FROM [dbo].[Subscriptions] sub
INNER JOIN dbo.[Catalog] c ON sub.report_oid = c.itemid
INNER JOIN [dbo].Users u_own ON c.CreatedByID = u_own.UserID
INNER JOIN [dbo].Users u_mod ON c.ModifiedByID = u_mod.UserID
INNER JOIN dbo.ReportSchedule rs ON sub.SubscriptionID = rs.SubscriptionID
INNER JOIN cte_LastRefresh lr ON rs.SubscriptionID = lr.SubscriptionID
INNER JOIN dbo.SubscriptionHistory sh ON lr.SubscriptionHistoryID = sh.SubscriptionHistoryID
LEFT OUTER JOIN msdb.dbo.sysjobs j ON CAST(rs.ScheduleID AS VARCHAR(100)) = j.name
LEFT OUTER JOIN msdb.dbo.sysjobschedules jsch ON j.job_id = jsch.job_id
WHERE 1=1
AND sub.LastStatus like '%failed%'
AND jsch.next_run_date <> 0
AND Convert(smalldatetime,msdb.dbo.agent_datetime(jsch.next_run_date, jsch.next_run_time)) > getdate()
order by 2
To learn more details ,refer:
Best Regards
Lucien