前言:
大家好,我是小小大世界,初来乍到,作为一名BI工作者,一直想着通过某种方式记录自己成长的点点滴滴,今天静下心来,开始写一些自己工作中的经验。
正文:
前几天看了几篇文章,提到了如何使用报表服务器数据库创建触发器,在报表刷新失败时自动发邮件通知,心里想着这个功能挺实用的,不需要整点去看报表是否成功刷新,或者后台查报表的刷新日志。
不过进一步思考了一下,大家都知道,报表服务器报表多了之后,若都是导入模式制作的报表,难免要定时刷新,但多张报表刷新时间相近,就经常出现刷新失败的情况,以往是同一张报表设置了多个计划刷新以保证第一次刷新失败后能够在下个计划时间刷新。如下:
失败通知解决的刷新失败监控,但如果在刷新失败后让数据库尝试再次刷新岂不美哉?但又不能无限的失败刷新去循环,因为这种情况肯定是你报表配置出问题了,故我的思路如下:
当作业失败后,自动尝试再次刷新,若一天内刷新失败两次以上(包括两次)则不再尝试自动刷新并以邮件通知管理员。
那么如何实现如上步骤呢?脚本来了!在报表服务器所在的数据库,我是PowerBIReportServer系统默认名字,在SubscriptionHistory表中创建更新触发器,当初一直以为这个表是插入形式的,结果他是先插入后更新,把我绕了一大圈。
```sql
CREATE TRIGGER [dbo].[RefreshFailurereport]
ON [dbo].[SubscriptionHistory]AFTER update
AS
BEGINSET NOCOUNT ON;
declare
@b int,
@c nvarchar(max),
@d int
begin
select top(1) @b=Status,@c=subscriptionid from Subscriptionhistory order by endtime desc
select @d=count(subscriptionid) from Subscriptionhistory where subscriptionid=@c and Status=@b and left(starttime,10)=left(getdate(),10)
if (@b =2 and @d<2)
begin
WAITFOR DELAY '0:0:10'
exec [PowerBIReportServer].dbo.AddEvent --这边要注意换成你PowerowerBIshiyo所用的报表服务器数据库名
@EventType='DataModelRefresh',
@EventData=@c
end
else
if (@b =2 and @d>=2)
BEGIN EXEC msdb.dbo.sp_send_dbmail @profile_name = '配置名',--不知道的select [name] from [msdb].[dbo].[sysmail_profile]@recipients = '要发送的邮箱地址' , @body = '', --邮件内容我这边没设置@subject = 'PowerBi Report Refresh fail',--邮件标题@query = N'SELECT TOP 1[Path],left([LastStatus],19),[LastRunTime]FROM [PowerBIReportServer].[dbo].[Subscriptions] A0 WITH(NOLOCK)LEFT JOIN [PowerBIReportServer].[dbo].[Catalog] A1 WITH(NOLOCK)ON A0.Report_OID = A1.ItemIDLEFT JOIN [PowerBIReportServer].[dbo].[Users] A2 WITH(NOLOCK)ON A0.OwnerID = A2.UserIDwhere [EventType] = ''DataModelRefresh''and [LastStatus] <> ''Completed Data Refresh''order by lastruntime desc',--邮件内容展示的SQL,我这边所展示的是XX文件夹XX报表+失败时间@attach_query_result_as_file = 0, @query_result_header = 0,@body_format ='HTML';
END
END
END
GO
如上实现的效果就是想要的效果,至于SQL SERVER的邮件怎么配置各位就自己百度一下,很简单的。
最终测试了下作业,满足我想要的要求,两次刷新失败后自动发邮件给我:
结语:
第一次发文章,各位可能有更好的方法,欢迎和我交流,今后也会抽时间记录各种工作中的问题和好的方法。
原文作者:小小大世界
原文连接:https://blog.csdn.net/qq_43291403/article/details/103913156