【问题标题】:Parameter settings in SSRS for all and filtered resultsSSRS 中所有结果和过滤结果的参数设置
【发布时间】:2014-05-21 23:45:37
【问题描述】:

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

我已经花费了大量时间来尝试实现这一目标,因此非常感谢所有帮助、输入和解释。

【问题讨论】:

    标签: sql sql-server tsql reporting-services


    【解决方案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)
    

    然后,报表用户将能够在参数中选择单个或多个服务器,或选择“全选”选项(字面上返回参数的所有可能值)。

    如果您只希望用户能够指定单个服务器或“所有”服务器,另一种选择是设置相同的参数和数据集,但这次参数不是 设置为多选。 parameter 数据集的查询类似于:

    SELECT 'ALL' AS ServerName
    UNION ALL
    SELECT ServerName FROM SomeTableOfServers
    

    主查询的 WHERE 子句类似于:

    WHERE       ( c1.SystemName = @rpServerName OR @rpServerName = 'ALL' )
    

    如果报表用户选择“ALL”,那么上面的逻辑意味着实际上没有过滤器并且所有行都被返回。

    【讨论】:

    • 其他参数用于环境和环境类别。
    • 并根据您提到的替代选项,我的查询中的其他列与 JOIN 一起出现在哪里?在单独的数据集中???
    • 假设您要过滤 DECLARE 语句中显示的三个值,那么您将需要创建三个报表参数和四个数据集(每个参数一个,报表数据一个)。在主数据集的 WHERE 子句中,每个参数都需要类似的逻辑,例如WHERE ... AND .. AND... 等
    • 所以我假设我应该使用与我发布的链接中的查询相同的逻辑?我的意思是它在 ssms 中工作,所以我假设它是正确的。
    • 感谢您的回答。我按照你的指示做了,效果很好!!!非常感谢。
    猜你喜欢
    • 2023-03-30
    • 1970-01-01
    • 2013-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-23
    • 1970-01-01
    • 2021-11-21
    相关资源
    最近更新 更多