在SSRS中,是否有一种方法可以禁用rdl.data文件的创建?

19
在SSRS中,我注意到rdl.data缓存文件被存储在我的开发机器上。当运行报告时,这些文件是否也会存储在报告服务器上?如果是这样的话,有没有办法避免在服务器上创建这些文件?

微软连接请求:https://connect.microsoft.com/SQLServer/feedback/details/468482 - Tim Abell
我曾经遇到一个问题,我以为是因为这个原因,但实际上是因为数据集被复制到了 bin/ 目录下,然后当它们不再在项目中时没有被删除,导致依赖它的报告在本地测试期间失败。太可怕了。 - Tim Abell
Microsoft Connect已经停用,因此@TimAbell提供的链接已失效。 - Brian
微软,你在互联网上做错了。存档副本:https://web.archive.org/web/20161026070847/https://connect.microsoft.com/SQLServer/feedback/details/468482 - Tim Abell
4个回答

13

rdl.data文件并非在服务器上创建 - 它们仅用于在开发期间加快报告执行时间,当您反复运行具有相同参数的报告并调整布局时。

顺便说一句,我相信可以配置SSRS服务缓存结果以便重用。

我不知道服务使用的缓存机制的详细信息;它可能使用像rdl.data一样的基于文件的机制,也可能将结果存储在ReportingServices数据库之一中。

也许了解更多关于SSRS的人可以确认机制的详细信息。


@Ed...非常棒的信息。谢谢!如果有人愿意评论服务器端服务缓存配置……我会非常感兴趣。 - MikeTWebb
1
我知道这是一个晚评论,但 SSRS 缓存发生在 ReportServer 和 ReportServerTempDB 数据库内部。这可能为理解 SSRS 缓存模型提供了一个起点:http://sqlcat.com/technicalnotes/archive/2008/06/26/report-server-catalog-best-practices.aspx - warriorpostman
@warriorpostman 谢谢 - 我使用 Wayback Machine 找到了此当前存档网址 https://blogs.msdn.microsoft.com/robertbruckner/2008/11/04/technical-note-series-on-reporting-services-performance-and-scalability/,标题为“大规模 SQL Server Reporting Services 环境技术笔记系列之一”,这是其中的一部分,这里有一个具体的固定链接 http://web.archive.org/web/20080802051432/http://sqlcat.com:80/technicalnotes/archive/2008/06/05/reporting-services-scale-out-architecture.aspx。 - John Zabroski

10

4
这无法工作,这个连接问题在微软已经开放了4年 http://social.msdn.microsoft.com/Forums/sqlserver/en-US/0aa81692-352f-4c1f-a0e3-95fe6c0797ca/cachedataforpreview-in-rsreportdesignerconfig-not-honored - Preet Sangha
设置在VS2013中仍然存在,但仍无法停止生成“.data”文件。 - Tim Abell

3

我不确定zomf的答案是否可行(微软也持相同观点)。理论上听起来不错,但实际上似乎并不起作用。

我认为最简单的方法是接受这些文件。如果你感到困扰,可以将你创建的每个报告的AutoRefresh属性设置为1秒钟(虽然令人烦恼的闪烁效果和对服务器的负载可能使得这个选项不可行)。

否则,在预览报告时只需点击REFRESH按钮即可。

另外一个选择可能是为报表创建虚拟参数,并在每次运行时生成随机值。由于SSRS仅在输入参数组合与上一次运行报告时相同时显示缓存数据,因此这可能解决问题。但我尚未在实践中进行过测试。


0

PowerShell 来拯救,只需隐藏它 - 将 PowerShell 项目添加到您的报表解决方案中,并将其设置为构建配置中的启动项目:

$path = "../*.rdl.data"

$rdlDataFiles = Get-ChildItem -Recurse -Force -Path "$path";

Write-Output "$path"

$rdlDataFiles | ForEach-Object {
  Write-Output "Hiding *.rdl.data file $_"

  $_.Attributes = $_.Attributes -bor (([System.IO.FileAttributes]::Hidden))

  # Next line isn't required per say, but just a guard.
  $_.Attributes = $_.Attributes -bor (-bnot([System.IO.FileAttributes]::ReadOnly))
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接