Условные утверждения параметров SSRS - PullRequest
0 голосов
/ 25 октября 2018

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

Параметр ReportingPeriod, в свойствах этого параметра я попытался установить значение параметра по умолчанию в качестве выражения.Мое требование - убедиться, что пользовательский ввод в текстовое поле является целочисленным значением от 1 до 45 дней.Поскольку я новичок в SSRS, я создал нечто подобное ниже на основе примеров в описании выражения параметра.

=Switch(Parameters!ReportingPeriod.Value = 1, 1,
    Parameters!ReportingPeriod.Value = 10, 10,
    Parameters!ReportingPeriod.Value = 45, 45)

Но это дало мне следующую ошибку.

The DefaultValue expression for the report parameter 'ReportingPeriod' contains an error: 
The expression references the parameter 'ReportingPeriod', which does not exist in the Parameters collection. Letters in the names of parameters must use the correct case.

Насколько я понимаю, я считаю, что проблема в том, что входной параметр ReportingPeriod еще не инициализирован или что-то и, следовательно, выдает ошибку, но не уверен.

Есть идеи, как решить эту проблему?

Я получил ссылку на решение, указанное выше, с этой записи.

1 Ответ

0 голосов
/ 25 октября 2018

Ошибка, которую вы получаете, как вы и думали: вы пытаетесь установить значение по умолчанию для ReportingPeriod, ссылаясь на значение ReportingPeriod, что невозможно, поскольку оно еще не существует.

Поскольку вы ищете только целое число от 1 до 45, пользовательский код, по моему мнению, будет излишним.Вы можете выполнить то, что вы пытаетесь сделать, просто установив Доступные значения параметра.Единственным недостатком по сравнению с пользовательским кодом является то, что пользователь не сможет ввести значение в текстовое поле.Вместо этого им придется выбрать его из выпадающего списка.

Поскольку вы знаете, что хотите разрешить только 1-45, вы можете указать каждое значение, чтобы разрешить его по отдельности.Но я бы предложил получить доступные значения из запроса.

Чтобы получить доступные значения из запроса, вам нужно будет создать другой набор данных, содержащий только те значения, которые вы хотите разрешить для этого параметра.Поэтому вам понадобится набор данных, который содержит целые числа от 1 до 45. Если у вас есть таблица чисел, это будет тривиально, просто что-то вроде select top(45) * from NumbersTable.Но если нет, вы можете написать простой запрос для достижения этой цели.Я уверен, что этот запрос не будет абсолютно лучшим способом, но он будет работать:

select top(45)
    rn = row_number() over(order by object_id)
from
    sys.all_columns

Затем вы перейдете к свойствам параметра и в доступных значениях выберите «Получить значения из запроса».", установите для набора данных тот, который вы только что создали, и установите для полей значений и меток единственный столбец из этого набора данных.

sample

...