Добавление условия where в отчет служб Reporting Services

#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. Вам все равно придется создать параметры отчета, хотя я не думаю, что есть какой-либо способ обойти это.