2014-01-27 2 views
0

В основном я построил отчет с использованием SSRS 2008, у отчета есть каскадные параметры, независимый - это многозначный параметр (рабочие единицы), заполненный значениями из запроса базы данных, зависимый параметр (позиции рабочих мест, содержащиеся в соответствующих рабочих единицах) также получает значения из запроса с где предложением следующим образом:Проблема с каскадным многозначным параметром в SSRS 2008

WHERE position.unitId IN (@units) 

@units является параметром мульти-значения. Значение по умолчанию для единиц - это сам запрос, к которому все пользователи имеют доступ. Таким образом, при открытии отчета все доступные единицы выбираются, и все соответствующие рабочие места извлекаются - отлично работают. Но ассер также не может иметь никакого доступа к каким-либо единицам, что приводит к сбою зависимого запроса, в результате чего не извлекаются единицы, поэтому @units не содержит значений. Я бы подумал, что запрос не будет срабатывать до тех пор, пока @units не будет иметь значение. В любом случае я пытался проверить содержимое @units перед запросом на рабочие места различными способами:

* заменяя параметр @units следующим выражение: = IIF (Parameters! units.Count = 0, "00000000-0000-0000-0000-000000000000", Parameters! units.Value)

* имеющий еще один параметр, содержащий разделенную запятыми строку значений @units и проверяя, превышает ли длина этого числа больше 0 до выполнения зависимого набора данных и т. д.

Но теперь, когда я открываю отчет, выпадающий список вакансий пуст, отключен и остается таким, пока t он изменяет значения единиц или запускается отчет. После этого они, похоже, обновляются. Итак, мой вопрос в том, что может быть причиной отключения элемента управления (единицы извлекаются, поэтому почему выражение в качестве значения параметра для позиций работы бесполезно?) И как справиться с этим правильным способом, Кажется, что-то действительно похоже на одну и ту же природу в Интернете.

Любая помощь будет принята с благодарностью.

ответ

0

У меня были подобные проблемы. Чтобы быть ясным, это не проблема с точки зрения SSRS. SSRS считает это правильным грубым действием. Как я исправил проблему, нужно сделать следующее:

Вам нужно изменить запрос, который предварительно заполняет ваш параметр @Unit. В приведенном ниже коде, где я говорю «@Unit Script», я ссылаюсь на текущий SQL-скрипт, который запускается для предварительного заполнения параметра @Unit.

With Unit_CTE as (
    --Insert @Unit Script here 
) 

, Count_of_Units as (
Select Count(1) as Unit_Count 

From Unit_CTE 
) 

--Begin a query that will only return a value when Unit_Count returns 0 
Select null as 1st_Field --this will be a placeholder for your first field in the @Unit Script 
    --To union two queries together, they must have the same number of fields, each with compatible output types. 
    --Therefore, you will need to create an empty or null placeholder field for each field in your @Unit script 
    , '00000000-0000-0000-0000-000000000000' as Unit_ID 
    , 'No Units Available' as Unit_Name --or whatever else you're calling the Unit name field 

From Count_of_Units 

Where Unit_Count = 0 

Union All 

--Insert your @Unit Script here 

Теперь то, что у вас есть запрос, который будет возвращать два выхода:

  1. Если есть Units конечный пользователь может видеть, эти устройства будут отображаться в обычном режиме без каких-либо дополнений к списку ,
  2. Если нет элементов, которые может видеть конечный пользователь, в раскрывающемся списке @Unit будет отображаться одно значение/параметр, который будет читать «Без доступных единиц». Затем в раскрывающемся списке параметра Position_Title не найдется никаких позиций, где идентификатор UnitID равен «00000000-0000-0000-0000000000000000».

Теперь, если у вас есть другие параметры, зависящие от параметра «Позиция», вы можете столкнуться с аналогичной проблемой, когда ваши следующие зависимые параметры не могут найти значение, поскольку нет значения для Параметр позиции. Если это так, повторите описанную выше логику для параметра Position (таким образом создавая параметр, который появляется только тогда, когда нет найденных позиций, которые соответствуют @Unit).

Надеюсь, что это имеет смысл.Прокомментируйте, если у вас есть какие-либо вопросы или проблемы. Я знаю, что это может показаться чересчур сложным (и там может быть очень простое решение где-то там), но я использовал это время и время снова, и он хорошо работает для меня, а также ограничивает количество ошибок SSRS и странное поведение. видит конечный пользователь.

+0

Большое спасибо, это в значительной степени разрешило эту проблему, хороший подход! :) – DoubleZ

+0

Спасибо! Я также использовал его для создания более сложных списков параметров. Например, вы можете использовать этот подход для добавления разделителей между списками или пустых строк для обозначения разрывов. Я стараюсь использовать его для повышения удобства работы с конечным пользователем. –

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