Forum Discussion

ChandanJha25's avatar
ChandanJha25
New Member
4 years ago
Solved

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 ...
  • v-luwang-msft's avatar
    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 2

     To learn more details ,refer:

    https://community.powerbi.com/t5/Report-Server/Being-alerted-to-scheduled-refresh-failures/m-p/2311909 

     

     

    Best Regards

    Lucien