#reporting-services
#службы отчетов
Вопрос:
У меня есть отчет с набором данных из:
выберите Field1, Field2, Field3, … FieldN из записей внутреннего объединения клиентов в customers.customer_id = records.customer_id
Как мне программно добавить в службы reporting Services — «где Field3 = ‘SomeData'»
или я должен изменить свой SQL на — выберите Field1, Field2, Field3, … Имя поля из записей внутреннего объединения клиентов в customers.customer_id = records.customer_id где Field3 = @Field3Parameter
и установить мой параметр во время выполнения?
Я бы хотел, чтобы мои клиенты имели возможность выбирать из более чем 100 полей и не хотели бы устанавливать каждое в качестве параметра.
Заранее спасибо!
Ответ №1:
«Я бы хотел, чтобы мои клиенты имели возможность выбирать из более чем 100 полей и не хотели бы устанавливать каждое в качестве параметра».
Как клиенты выбирают поля в данный момент? Если это заданное требование, вы в значительной степени застряли с фильтрами или параметрами (как указал Кори) или создаете динамический SQL, что создает свои собственные проблемы.
Еще один вариант: в зависимости от того, насколько сложна бизнес-логика, вы могли бы использовать несколько параметров множественного выбора, которые содержат связанные элементы, и реализовать проверки в сохраненной процедуре. Например, используйте параметр множественного выбора, как показано ниже, и в сохраненной процедуре извлеките выбранные клиентом параметры и реализуйте их в предложении WHERE. Вы получите тот же результат, о котором упоминал Кори, но сократите параметры.
Multi-select Parameter
-----------------------
Include Widgets
Include Completed Sales
Include West Coast
(lots more options)
Ответ №2:
Вы могли бы либо выполнить это в SQL, параметризованном, как вы предложили, либо в качестве условий фильтрации в вашем Tablix. Я предпочитаю параметризованный SQL, устанавливая параметр @ в качестве значения параметра отчета, поскольку он будет работать намного лучше. Обычно я следую этому шаблону:
SELECT
c.Field1
, c.Field2
, r.Field3
, ...
FROM
records r
JOIN
customers c ON c.customer_id = r.customer_id
WHERE
((@Field1Parameter IS NULL) OR (c.Field1 = @Field1Parameter)) AND
((@Field2Parameter IS NULL) OR (c.Field2 = @Field2Parameter)) AND
((@Field3Parameter IS NULL) OR (r.Field3 = @Field3Parameter)) ...
Это позволяет вам оставить параметры отчета обнуляемыми или задать параметр «Все» со значением по умолчанию NULL. Я понимаю, что вы не хотите создавать параметры, но если вы используете отчеты 2008, он автоматически создаст для вас список параметров из вашего SQL. Вам все равно придется создать параметры отчета, хотя я не думаю, что есть какой-либо способ обойти это.