SSRS 2016报告跨时区的电子邮件

时间:2017-04-04 14:34:50

标签: reporting-services ssrs-2016

我使用SSRS 2016并且有许多用户需要在当地时间上午11点之前收到电子邮件报告。

这样做的最佳做法是什么?

我最初的想法是为每个时区创建不同的Active Directory通讯组列表并相应地添加用户...然后为每个报告创建多个计划,并调整报告发送时间相对于报告的时间需要分发清单。

例如,SQL服务器处于中央时间,而东部和中部时间员工需要在当地时间上午11点之前报告。 - 创建电子邮件时间表,以便在上午10点(服务器时间)向东部时间员工发送报告,并在上午11点再次向中央时间员工发送报告。

有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

您的方法正是我们正在做的。 SQL Server实例位于中央时区,我们的用户遍布全球。每个组都维护一个邮件列表,并在创建报告订阅时手动执行算术。有趣的是,SSRS适应当地用户的语言(Le rapport hebdomadaire @ReportNameaétéexécutéà@ ExecutionTime而不是@ReportName在@ExecutionTime执行默认主题),但没有提供任何帮助时区。

如果您拥有SQL Server的企业版,则可以使用数据驱动的报表订阅。鉴于标准版和企业版之间的成本大幅增加,我怀疑这一特性证明了成本是合理的。

另一种解决方案需要SSRS之外的东西,但它可以很方便。如果您在其他位置运行其他计划工具,则可以运行PowerShell脚本来触发订阅。例如,您也可以使用此方法在加载数据时运行报告。

PowerShell脚本列出订阅及其ID:

$server = 'http://server.company.com/reportserver'
$site = '/'

$rs2010 = New-WebServiceProxy -Uri "$server/ReportService2010.asmx" -Namespace SSRS.ReportingService2010 -UseDefaultCredential
$subscriptions = $rs2010.ListSubscriptions($site)
$subscriptions | Sort-Object -property path,owner,SubscriptionID -Unique | select Path, Owner, SubscriptionID 

用于触发订阅的Powershell脚本:

# Given an SSRS URL and a subscription ID, trigger the subscription.
$server = 'http://server.company.com/reportserver'
$subscriptionid = "55477447-b0b0-433c-a75f-08ad0b6d18bd"

$rs2010 = New-WebServiceProxy -Uri "$server/ReportService2010.asmx" -Namespace SSRS.ReportingService2010 -UseDefaultCredential ;
$rs2010.FireEvent("TimedSubscription",$subscriptionid,$null)