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