【问题标题】:Create a Multivalue Drop Down in SSRS for an Amount Range在 SSRS 中为金额范围创建多值下拉菜单
【发布时间】:2020-03-31 23:55:21
【问题描述】:

我正在尝试在 SSRS 中设置多值下拉范围。我需要的是让下拉范围成为用户选择的三个选项之一:

  • 选项 1:1000 到 4999
  • 选项 2:5000 到 2499
  • 选项 3:25000+

[附注下拉菜单中不需要文本“Option..”。仅供参考]

因此,用户将选择上述之一。最终用户可以根据这三个选项之一的值提取报告。选项 1,将拉动 1000 美元到 4999 美元范围内的任何东西,选项 2 等。

我已尝试更新和更改参数。尝试指定可用值,例如

Amount1 =Parameters!AMOUNT>1000 AND Parameters!AMOUNT> 4999
Amount2 =Parameters!AMOUNT>5000 AND Parameters!AMOUNT> 25000
Amount3 =Parameters!AMOUNT>=5000 AND Parameters!AMOUNT> 25000

但是,我的下拉菜单总是空白,或者我收到错误消息。我还将可用值设置为“从查询中获取值:”我创建了一个新数据集,并将该 DS_Amount 用作我的参数。

我的数据集的 SQL 代码很简单,只是:

SELECT AMT AS AMOUNT
FROM FINANCE
WHERE AMOUNT = @AMOUNT

我也试过添加:

WHERE AMOUNT BETWEEN 0.00 AND 4999.99 OR AMOUNT BETWEEN 5000.00 AND 24999.99 OR AMOUNT > 25000.00

...在我的数据集中。我收到空白下拉菜单或错误。

【问题讨论】:

    标签: sql sql-server reporting-services


    【解决方案1】:

    参数是简单的键值对,所以它们只能有一个标签和一个值。通常,您使用标签来显示用户和报告中要处理的值。

    我的方法是在你的数据库中创建一个包含值范围的表(听起来你可能已经这样做了?)。

    有点像

    CREATE TABLE ValueRanges (RangeID INT IDENTITY(1,1), RangeName varchar(20), RangeMin int, RangeMax int)
    
    INSERT INTO ValueRanges (RangeName, RangeMin, RangeMax) VALUES
    ('1000 to 4999', 1000, 4999),
    ('5000 to 24999', 5000, 24999),
    ('25000+', 25000, 999999999)
    

    在您的报告中,创建一个名为 dsRange 的数据集并将数据集查询设置为

    SELECT RangeID, RangeName FROM ValueRanges
    

    在您的报告中创建一个名为prmRange 的参数,将可用值设置为“从查询中获取值”并选择dsRange。将RangeID 设置为Value,将RangeName 设置为Label

    如果您希望用户能够从下拉列表中选择多个范围,请将参数设置为“允许多个值”,但不要将此与希望从报告中获取多个值混淆。因此,如果用户只会从三个列表中选择一个范围,那么请关闭此选项。

    假设您只设置了一个选择参数,那么您的主要数据集查询(我们称之为dsMain),即返回您报告的实际数据的查询,将类似于...

    DECLARE @rngMin int
    DECLARE @rngMax int
    
    SELECT @rngMin = RangeMin, @rngMax = RangeMax FROM ValueRanges WHERE RangeID = @prmRange
    
    SELECT AMT AS AMOUNT
        FROM FINANCE f
        WHERE AMOUNT BETWEEN @rngMin AND @rngMax
    

    当您运行报告时,用户将看到三个选项。他们将从 ValueRanges 表中看到“RangeName”。例如,如果他们选择第二个选项“5000 到 24999”,那么他们会将 prmRange 参数值设置为 2,因为这是该行的 RangeID,这就是我们之前所说的将是我们参数值的列。

    然后在主数据集(dsMain)中我们指定了@prmRange但没有声明它所以SSRS知道这个必须传入,因为名称与参数名称相同,SSRS知道传递这个参数值在我们的示例中,它将传入2 的值。

    然后,我们从 ValueRanges 表中获取此 ID 的最小值和最大值,并使用它们来获取正确的数据。

    希望这有意义吗?

    【讨论】:

      【解决方案2】:

      通过一些硬编码可以做到: 第一的 将您的金额参数设置为带有标签和值的文本,例如

      label:  option 1 : 0 to 4999 value 1
      label:  option 2: 5000 to 9999 value 2
      

      其次 在您的数据集查询标记中,直到最后一个 where 子句:

      where @Amount =  '1'  and Amount < 4999
      or
      @Amount =  '2'  and Amount > 5000 and @Amount =  '2'  and Amount < 9999
      

      【讨论】:

        猜你喜欢
        • 2014-12-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多