PowerBI 报表服务器刷新失败自动重刷并邮件通知
前言:
大家好,我是小小大世界,初來(lái)乍到,作為一名BI工作者,一直想著通過(guò)某種方式記錄自己成長(zhǎng)的點(diǎn)點(diǎn)滴滴,今天靜下心來(lái),開(kāi)始寫一些自己工作中的經(jīng)驗(yàn)。
正文:
前幾天看了幾篇文章,提到了如何使用報(bào)表服務(wù)器數(shù)據(jù)庫(kù)創(chuàng)建觸發(fā)器,在報(bào)表刷新失敗時(shí)自動(dòng)發(fā)郵件通知,心里想著這個(gè)功能挺實(shí)用的,不需要整點(diǎn)去看報(bào)表是否成功刷新,或者后臺(tái)查報(bào)表的刷新日志。
不過(guò)進(jìn)一步思考了一下,大家都知道,報(bào)表服務(wù)器報(bào)表多了之后,若都是導(dǎo)入模式制作的報(bào)表,難免要定時(shí)刷新,但多張報(bào)表刷新時(shí)間相近,就經(jīng)常出現(xiàn)刷新失敗的情況,以往是同一張報(bào)表設(shè)置了多個(gè)計(jì)劃刷新以保證第一次刷新失敗后能夠在下個(gè)計(jì)劃時(shí)間刷新。如下:
失敗通知解決的刷新失敗監(jiān)控,但如果在刷新失敗后讓數(shù)據(jù)庫(kù)嘗試再次刷新豈不美哉?但又不能無(wú)限的失敗刷新去循環(huán),因?yàn)檫@種情況肯定是你報(bào)表配置出問(wèn)題了,故我的思路如下:
當(dāng)作業(yè)失敗后,自動(dòng)嘗試再次刷新,若一天內(nèi)刷新失敗兩次以上(包括兩次)則不再嘗試自動(dòng)刷新并以郵件通知管理員。
那么如何實(shí)現(xiàn)如上步驟呢?腳本來(lái)了!在報(bào)表服務(wù)器所在的數(shù)據(jù)庫(kù),我是PowerBIReportServer系統(tǒng)默認(rèn)名字,在SubscriptionHistory表中創(chuàng)建更新觸發(fā)器,當(dāng)初一直以為這個(gè)表是插入形式的,結(jié)果他是先插入后更新,把我繞了一大圈。
?
```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所用的報(bào)表服務(wù)器數(shù)據(jù)庫(kù)名 @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 = '要發(fā)送的郵箱地址' , @body = '', --郵件內(nèi)容我這邊沒(méi)設(shè)置@subject = 'PowerBi Report Refresh fail',--郵件標(biāo)題@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',--郵件內(nèi)容展示的SQL,我這邊所展示的是XX文件夾XX報(bào)表+失敗時(shí)間@attach_query_result_as_file = 0, @query_result_header = 0,@body_format ='HTML'; END END END GO如上實(shí)現(xiàn)的效果就是想要的效果,至于SQL SERVER的郵件怎么配置各位就自己百度一下,很簡(jiǎn)單的。
最終測(cè)試了下作業(yè),滿足我想要的要求,兩次刷新失敗后自動(dòng)發(fā)郵件給我:
結(jié)語(yǔ):
第一次發(fā)文章,各位可能有更好的方法,歡迎和我交流,今后也會(huì)抽時(shí)間記錄各種工作中的問(wèn)題和好的方法。
?
?
?
原文作者:小小大世界
原文連接:https://blog.csdn.net/qq_43291403/article/details/103913156
總結(jié)
以上是生活随笔為你收集整理的PowerBI 报表服务器刷新失败自动重刷并邮件通知的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: laravel 判断字符串包含_lara
- 下一篇: 模型的选择与调优