好的,我在SSRS中创建此报告时遇到了很多麻烦。我有一个上一篇文章可以找到here ...所以你可以看到我真的需要帮助,因为经过几天的努力和许多人的帮助我,仍然没有运气。
为了避免在SSRS和SSMS中浪费更多时间来解决这个问题,我想我会做最后一篇文章。
基本上,如果我有以下查询(与我链接但没有WHERE和ORDER BY的问题中的类似查询),如下所示
如何设置SSRS参数/数据集以便我可以全部显示 记录或由特定参数输入过滤(我在SSRS中键入的参数)。
以下是上面提到的查询......
DECLARE @p_ServerName nvarchar(10) --Declares are just to show what
DECLARE @p_Env nvarchar(10) --parameters I have been trying to
DECLARE @p_EnvCat nvarchar(10) --use in SSRS
SELECT DISTINCT
c1.SystemName, c1.BlockSize, c1.BootVolume, c1.Compressed, c1.Label, c1.Caption, c1.PageFilePresent,
[dbo].[CCS_DIGITAL_STORAGE_CONVERTER]('B', 'GB', c1.Capacity) AS Capacity,
[dbo].[CCS_DIGITAL_STORAGE_CONVERTER]('B', 'GB', c1.FreeSpace) AS [Free Space],
[dbo].[CCS_DIGITAL_STORAGE_CONVERTER]('B', 'GB', c1.Capacity - c1.FreeSpace) AS [Used Space],
100 * c1.FreeSpace / c1.Capacity AS [Free Space %],
[CLE_ENV_SHORT], [CLE_ENV_CAT_SHORT]
FROM CCS_Win32_Volume c1
JOIN [dbo].[CCS_V_SERVER_INSTANCE_DETAILS] c2 on c1.SystemName = c2.CSL_SERVER_NAME
我花了很多时间试图实现这一目标,所以所有的帮助,输入和解释都得到了极大的认可。
答案 0 :(得分:1)
我猜测@p_ServerName应该与c1.SystemName有关,但是不清楚你的其他变量/参数应该过滤什么。
但是,如果我们只采用"服务器名称"的例子,那么最简单的选择是创建一个报告参数,例如: rpServerName,并创建一个数据集,例如dsServerName,具有返回服务器名称列表的查询。返回报告参数,设置"可用值"从数据集中填充并选择您创建的数据集。假设您希望能够选择多个服务器,则应选中该框以使报告参数成为"多选"。
接下来,在您的主数据集中(可能基于上面的查询),您可以将过滤器添加到现有查询的WHERE子句中,如下所示:
SELECT DISTINCT
c1.SystemName, c1.BlockSize, c1.BootVolume, c1.Compressed, c1.Label, c1.Caption, c1.PageFilePresent,
[dbo].[CCS_DIGITAL_STORAGE_CONVERTER]('B', 'GB', c1.Capacity) AS Capacity,
[dbo].[CCS_DIGITAL_STORAGE_CONVERTER]('B', 'GB', c1.FreeSpace) AS [Free Space],
[dbo].[CCS_DIGITAL_STORAGE_CONVERTER]('B', 'GB', c1.Capacity - c1.FreeSpace) AS [Used Space],
100 * c1.FreeSpace / c1.Capacity AS [Free Space %],
[CLE_ENV_SHORT], [CLE_ENV_CAT_SHORT]
FROM CCS_Win32_Volume c1
JOIN [dbo].[CCS_V_SERVER_INSTANCE_DETAILS] c2 on c1.SystemName = c2.CSL_SERVER_NAME
WHERE c1.SystemName IN (@rpServerName)
然后,报告用户可以在参数中选择单个或多个服务器,或者选择"全选"选项(字面上返回参数的所有可能值)。
另一种选择,如果您只希望用户能够指定单个服务器或"全部"服务器,是设置相同的参数和数据集,但这次参数不设置为多选。 参数数据集的查询类似于:
SELECT 'ALL' AS ServerName
UNION ALL
SELECT ServerName FROM SomeTableOfServers
,主查询的WHERE子句类似于:
WHERE ( c1.SystemName = @rpServerName OR @rpServerName = 'ALL' )
如果报告用户选择" ALL",则上述逻辑意味着实际上没有过滤器并返回所有行。