SSRS中的所有和过滤结果的参数设置

时间:2014-05-21 23:45:37

标签: sql sql-server tsql reporting-services

好的,我在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

我花了很多时间试图实现这一目标,所以所有的帮助,输入和解释都得到了极大的认可。

1 个答案:

答案 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",则上述逻辑意味着实际上没有过滤器并返回所有行。