2017-02-09 12 views
0

Мне нужно отфильтровать мой результат на основе значения параметра. Если он говорит "Open" тогда DueDate колонка должна быть = NULL,, если говорит 'Closed', что DueDate = NOT NULL, и если он говорит "Both", то он должен захватить все DueDate секкак написать выражение в SSRS для фильтрации данных

Я созданный параметр запроса «Status», который дает мне 3 возможных значения:

enter image description here

Затем я создал параметр отчета "Status" и Allow Multiple Values

enter image description here

Теперь я иду в основной запрос и перейти к фильтрам:

enter image description here

А вот я не могу понять, как я могу написать выражение, говоря:

Если отчет значение «Статус» = «Открыть», а затем показать мне результат, где DueDate IS NULL, Если отчет «Состояние» = «Закрыто», то DueDate НЕ НЕТ, И если отчет «Статус» = «Оба», то покажите мне все DueDates (null и не имеет значения)

Другое дело, у меня уже есть случай заявление в своем запросе:

ALTER Procedure 
AS 
@ShowOpen bit = 0, 
@ShowClosed bit = 0 
SELECT 
FROM 
WHERE 
       AND 
         (
         (CASE WHEN (@ShowOpen = 1) THEN 
           CASE WHEN (tblNoteRecipients.CompletedDate IS NULL and tblNoteRecipients.IsDiary = 1) or tblNoteRecipients.UserGUID is null THEN 1 ELSE 0 END 
          -- CASE WHEN (tblNoteRecipients.CompletedDate IS NULL) THEN 1 ELSE 0 END 
         ELSE 
           1 
         END = 1) 
        AND 
         (CASE WHEN (@ShowClosed = 1) THEN 
           CASE WHEN (tblNoteRecipients.CompletedDate IS NULL) THEN 0 ELSE 1 END 
         ELSE 
           1 
         END = 1) 
        OR ((@ShowOpen = 1) AND (@ShowClosed = 1)) 
         ) 

Есть ли выход из него в SSRS я могу создать параметр, который принимает значения открытые, закрытые и оба?

Добавлено test1

enter image description here

ответ

1

добавить фильтр в табликсе так:

enter image description here

В Expression использования:

=IIF(
(Array.IndexOf(Parameters!Status.Value,"Open")>-1 and 
Isnothing(Fields!DueDate.Value)) or 
(Array.IndexOf(Parameters!Status.Value,"Closed")>-1 and not 
Isnothing(Fields!DueDate.Value)) or 
(Array.IndexOf(Parameters!Status.Value,"Both")>-1), 
"Include","Exclude") 

Для Value нас e:

="Include" 

Дайте мне знать, если это поможет.

+0

К сожалению, он говорит: «Не удалось оценить значения фильтра для MyDataSet». Я изменил свой пост и добавил код, который уже находится в моей хранимой процедуре (я не автор этого), но могу ли я использовать этот оператор case в своем отчете SSRS? Чтобы не создавать булевых фильтров, но «Открыть», «Закрыто» и «Оба»? – Oleg

+0

@ Олег, он отлично работает для меня. Вы уверены, что используете одно и то же выражение и '=' для параметра 'Operator' в Filter. –

+0

Я добавил snip. – Oleg

 Смежные вопросы

  • Нет связанных вопросов^_^