从数据到信息
从信息到洞察

PBI Report Server 邮件订阅进阶

本文主要讲解如何在 Power BI 报表服务器中,为 Power BI 报表设置邮件订阅服务

如果你使用过 Power BI Report Server 或 SSRS,我想你也许了解在报表服务器中可以为分页报表设置邮件订阅服务,以实现报表使用者每天或每周都能通过 E-MAIL 收到报表附件或报表链接(如果你不了解具体如何配置邮件订阅服务,那么你可以参考本文),然而遗憾的是,截至目前最新版本(2020 年 1 月版本),在 Power BI 报表服务器的门户网站中,并未提供为 Power BI 报表设置邮件订阅服务的功能,如下图对比所示:

C:\Users\daviszhang\Pictures\微信图片 _20200215145643.png

然而在云端部署的 Power BI Services 中,邮件订阅及分享 PBI 报表的功能却是早在三年前就已经推出的基本特性。相比 Power BI 而言,微软对本地部署的 Power BI (RS)一直未有积极的跟进,但这不代表用户就没有需求,相反,很多公司希望 Power BI 报表能够和分页报表一样,可以在报表服务器实现邮件订阅,统一管理。

幸运的是,就像我们能够在 PBI Report Server 中实现报表预警机制一样,在本地部署的 Power BI 中,我们不仅可以实现 PBI 报表的邮件订阅,而且可以实现得更完美。

前提:

为了实现该功能,需要确保满足两个条件:你的报表服务器为分页报表创建邮件订阅的功能能够正常运行,这代表你在报表服务器 Configuration Manager 上的配置是正确的。如果你是一名纯粹的 Power BI 报表开发者,并未接触过任何关于分页报表的基础知识,你需要打开 Configuration Manager 检查数据库和电子邮件设置并确保已经开启了 SQL Server 代理服务。其次,你已经在 SSMS 中配置了数据库邮件(具体步骤参考本文)。

实现:

实现该功能并不难,其原理与设置报表警报机制类似,都是通过调用 SQL Server 系统数据库或报表服务器数据库的存储过程来实现,事实上,作为测试,你完全可以复制以下我所提供的代码, 在必要处替换为你的相关信息,创建一个发送邮件的存储过程:

USE [ReportServer]
GO
create procedure pbi_send_email_test
@ReportName nvarchar(100)
,@recipients nvarchar(100)
as
begin
Set NoCount On;
DECLARE
@Content_head varchar(max),
@content varchar(max),
@Content_tail varchar(max)
Set @Content_head =
'<body lang=ZH-CN link="#0563C1" vlink="#954F72" style=''tab-interval:21.0pt;
text-justify-trim:punctuation''>
<div class=WordSection1 style=''layout-grid:15.6pt''>
<br>
Please follow
<a href='
set @content =
'<在此输入你的 PowerBI 门户 URL+文件夹名称(如果有)>'+replace(@ReportName,' ','%20')+'?rs:embed=true>'
+'this link'
Set @Content_tail =
'</a>
to access your Power BI report<br>
</div>
</body>'
select @content = @Content_head + @content + @Content_tail
IF EXISTS(SELECT @content)

BEGIN

EXEC msdb.dbo.sp_send_dbmail
@profile_name = '<在此输入你在 SSMS 中配置的邮件账户名>',
@recipients = @recipients ,
@importance = 'NORMAL',
@body = @content,
@subject = @ReportName ,
@body_format ='HTML';
END

END

该存储过程所实现的效果是,你只需指定两个必要参数:报表名称和收件人邮箱地址:
(当然你也可以在存储过程中添加和使用其他必要的参数,比如抄送人)

USE [ReportServer]
GO
DECLARE @return_value int
EXEC @return_value = [dbo].[pbi_send_email_test]
@ReportName = N'<PBI 报表名称>',
@recipients = N'<收件人邮箱>'
SELECT 'Return Value' = @return_value
GO

执行存储过程后, 就可以把你所指定的报表的访问链接发送给你所指定的收件人,报表以本文第一幅图中的 basket analysis 2 为例,如下图所示,邮件发送成功:

C:\Users\daviszhang\Pictures\微信图片 _20200215160554.png

测试邮件

成功收到邮件后,最后一步就是为邮件设置订阅计划,此处在SSIS以及 SSMS 中都可以实现,如在 SSMS 中创建一个作业:

https://img-blog.csdnimg.cn/20200215162752189.png

将上文执行存储过程的代码粘贴到“step”中,最后根据你的需求设置好订阅的时间计划即可:

https://img-blog.csdnimg.cn/20200215163318427.png

至此,Power BI 报表的邮件订阅就设置完成了,如果你要为其他用户订阅其他的报表,只需要填写好对应的参数即可,你也可以填写多个收件人,如果你能熟练使用 SQL,通过改进原存储过程还可以实现更加强大的效果,实现全局的,自定义化程度高,多人共享的企业报表订阅解决方案。

TIPS:

此外,在存储过程中你能发现我使用了 HTML 对邮件进行排版,上文所示仅是最基本最简单的格式,你完全可以利用 HTML 为你的订阅邮件进行美化。如下图在原基础上添加图片及加粗部分文字:

https://img-blog.csdnimg.cn/20200215171117262.png

邮件排版

·如果你没有学过 HTML 或者懒于书写冗长的 HTML 标签也是没有关系的,我在这里分享一个技巧,你可以在 Word 中为你的邮件排版,然后以 HTML 格式另存,在文本编辑器中直接复制其中代码即可。

 

相关阅读:

[simple-author-box]

2
说点什么

1000
 
鼓掌微笑开心憧憬爱你色并不觉得吃瓜doge二哈喵喵思考笑哭捂脸悲伤大哭抓狂汗偷笑打脸捂眼黑线问号晕拜拜闭嘴衰咒骂ok作揖
1 评论数
1 被回复的评论
2 订阅评论的人数
 
查看最近回复
查看最热评论
  订阅本文评论  
最新 最旧 得票最多
提醒
游客
william

请问文章提到的第一张图右边中的邮件订阅功能,是SQL Server上的 report server 的功能? 在 PBI Report Server 中无法直接配置出此功能?