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



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

执行此操作的最佳做法是什么?

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

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

有没有更好的方法可以做到这一点?

您的方法正是我们正在做的事情。 SQL Server 实例位于中部时区,我们的用户遍布世界各地。 每个组维护一个邮件列表,并在创建报表订阅时手动执行算术运算。 有趣的是,SSRS 会根据本地用户的语言进行调整(Le rapport hebdomadaire @ReportName a été exécuté à @ExecutionTime 而不是默认主题在 @ExecutionTime @ReportName执行),但对时区没有任何帮助。

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

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

用于列出订阅及其 ID 的 PowerShell 脚本:

$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)

最新更新