Создание многозначного раскрывающегося списка в SSRS для диапазона сумм - PullRequest
0 голосов
/ 01 апреля 2020

Я пытаюсь настроить раскрывающийся диапазон значений в SSRS. Мне нужно, чтобы раскрывающийся диапазон был одним из трех вариантов, которые выбирает пользователь:

  • Опция 1: от 1000 до 4999
  • Опция 2: от 5000 до 2499
  • Вариант 3: 25000 +

[PS В раскрывающемся списке не требуется текст «Параметр ..». Просто для справки]

enter image description here

Итак, пользователь выберет один из вышеперечисленных. Просто конечный пользователь может получить отчет на основе значений одного из этих трех параметров. Вариант 1 будет стоить что-нибудь в диапазоне от $ 1000 до $ 4999, Вариант 2 и т. Д. c.

Я попытался обновить и изменить параметры. Попытался указать доступные значения, например,

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

... в моем наборе данных. Я получаю пустые выпадающие списки или ошибки.

enter image description here

enter image description here

Ответы [ 2 ]

0 голосов
/ 01 апреля 2020

С помощью некоторого жесткого кодирования это можно сделать: во-первых, настройте свой параметр количества в виде текста с метками и значениями, например

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
0 голосов
/ 01 апреля 2020

Параметры - это простые пары ключ-значение, поэтому они могут иметь только метку и значение. Обычно вы используете метку, чтобы показать пользователя и значение для обработки в вашем отчете.

Я бы подошел к этому как создать таблицу с диапазонами значений в вашей базе данных (похоже, вы уже сделали это?).

Что-то вроде

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

Когда вы запустите отчет, пользователь увидит три варианта. Они увидят «RangeName» из таблицы ValueRanges. Например, если они выбрали вторую опцию «от 5000 до 24999», они устанавливают значение параметра prmRange равным 2, так как для этой строки это RangeID, и мы указали, что это столбец, который будет значением нашего параметра ранее.

Затем в основном наборе данных (dsMain) мы указали @prmRange, но не объявили его, поэтому SSRS знает, что это должно быть передано, поскольку имя совпадает с именем параметра, а SSRS знает, как передать значение этого параметра в. В нашем примере это будет значение 2.

Затем мы получаем минимальное и максимальное значения из нашей таблицы ValueRanges для этого идентификатора и используем их для получения правильных данных.

Надеюсь, это имело смысл?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...