在SSRS中,我注意到rdl.data缓存文件存储在我的开发机器上。运行报告时,这些文件是否也存储在Reports Server上?如果是这样,有没有办法避免在服务器上创建这些文件?
答案 0 :(得分:13)
rdl.data文件不是在服务器上创建的 - 它们纯粹是为了在开发过程中加快报表执行时间,当您在调整布局时重复运行具有相同参数的报表时。
作为一个侧面点,我认为可以配置SSRS服务来缓存结果以供重用。
我不知道服务使用的缓存机制的细节;它可能使用基于文件的机制,如rdl.data,或者它可能将结果存储在其中一个ReportingServices数据库中。
也许更了解SSRS的人可以确认该机制的细节。
答案 1 :(得分:10)
在开发过程中,您可以通过编辑设计器配置文件来关闭缓存(并消除* .rdl.data文件)。
对于SQL Server 2008 SSRS,默认位置为:
C:\ Program Files(x86)\ Microsoft Visual Studio 9.0 \ Common7 \ IDE \ PrivateAssemblies \ RSReportDesigner.config
将 CacheDataForPreview 更改为“false”
来源链接 http://blog.summitcloud.com/2010/05/disable-reporting-services-data-cache-in-development/
答案 2 :(得分:3)
我不相信zomf的答案有效(和neither are Microsoft)。这在理论上听起来不错,但似乎在实践中并不奏效。
我认为最简单的方法就是忍受这些文件。如果您感到困扰,您可以随时将您创建的每个报告的AutoRefresh属性设置为1秒(尽管服务器上的令人不快的闪烁效果和负载可能会使此选项不可行)。
否则,只需在预览报告时单击REFRESH按钮。
另一个选项可能是为报表创建虚拟参数,每次运行时都会随机生成一个值。由于SSRS仅在输入的参数组合与上次运行报表时相同时才显示缓存数据,因此可能会解决问题。但是,我没有在实践中测试它。
答案 3 :(得分:0)
PowerShell救援,只需隐藏它 - 将一个PowerShell项目添加到Reports解决方案中,并将其设置为构建配置中的启动项目:
$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))
}