Параметры - это простые пары ключ-значение, поэтому они могут иметь только метку и значение. Обычно вы используете метку, чтобы показать пользователя и значение для обработки в вашем отчете.
Я бы подошел к этому как создать таблицу с диапазонами значений в вашей базе данных (похоже, вы уже сделали это?).
Что-то вроде
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 для этого идентификатора и используем их для получения правильных данных.
Надеюсь, это имело смысл?