Тип Проблемы с выражением фильтра в SSRS

SQL Server 2008 R2 с использованием BIDS для разработки отчета.

У меня есть таблица, и я пытаюсь показать только определенную строку. Возможно, есть лучшие способы сделать это, но я сталкиваюсь с ошибкой с выражением фильтра, и независимо от того, как я выполняю свою первоначальную задачу, я хотел бы понять фильтрацию.

Я начал с выражения фильтра (набор типа «Целое число»):

RowNumber(Nothing) = 1

Это дало ошибку:

Cannot compare data of types System.String and System.Int32.

Я обнаружил, что решение этой проблемы состоит в том, чтобы изменить 1 на «= 1», поскольку 1 оценивается как строка.

Итак, у меня тогда было:

RowNumber(Nothing) = =1

Это ничего не изменило, я получил ту же ошибку.

Затем я попытался сделать это с первой частью выражения:

=RowNumber(Nothing) = =1

Это изменило ошибку на проблему развертывания (все еще собирается, что расстраивает):

Error pvInvalidDefinition : The definition of the report '/ReportName' is invalid.

Затем я попытался использовать CInt для RowNumber: CInt(RowNumber(Nothing) = = 1

Затем я могу развернуть его, но ошибка просто изменится на первую:

Cannot compare data of types System.String and System.Int32.

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

RowNumber возвращает целое число, поэтому похоже, что это должно работать. Я пытался использовать имя набора данных вместо «Ничего», но это не меняет того, что я вижу.

Я понимаю, что есть много способов решить мою первоначальную проблему, но мне любопытно, почему выражение фильтра недопустимо.


person WillyC    schedule 26.03.2013    source источник
comment
Какая это версия SSRS? Кроме того, вы пытаетесь фильтровать свойства набора данных, свойства объекта отчета (например, таблицы) или где-то еще?   -  person    schedule 26.03.2013
comment
Службы SSRS входят в состав SQL Server 2008 R2. Этот фильтр находится в табликсе, но я попытался применить его на уровне видимости строки с тем же результатом. На самом деле, если я помещу это в построитель отчетов, я, по крайней мере, верну реальную ошибку (RowNumber не может использоваться в выражении фильтра), но для выражения видимости строки я получаю: выражение Visibility.Hidden для табликса «TableName» содержит ошибку: [BC30203] Ожидается идентификатор.   -  person WillyC    schedule 27.03.2013


Ответы (2)


Строку со свойством видимости лучше скрыть. Просто нажмите на любое текстовое поле и перейдите на вкладку видимости. Теперь вы можете нажать «Показать» или «Ходэ» и перейти к выражению.

По умолчанию это Hide . Поэтому напишите там выражение, чтобы скрыть строку. =IIf(НЕ(RowNumber = 1),ИСТИНА,ЛОЖЬ)

Дайте мне знать, если вы получите какую-либо ошибку

person Akarsh Kolanu    schedule 26.03.2013
comment
Ошибка заключается в том, что RowNumber не объявлен - предположительно, потому что это функция. Однако, если я попытаюсь использовать его как функцию (=RowNumber(Nothing)!= 1 или =IIF(RowNumber(Nothing)!= 1, true, false)) я получаю: Visibility.Hidden выражение для табликса 'TableName' содержит ошибка: [BC30203] Ожидается идентификатор. (Обратите внимание, что изменение атрибута Nothing на имя набора данных или табликса в виде строки не приводит к изменению ошибки.) - person WillyC; 27.03.2013
comment
Как насчет того, чтобы сделать это? Добавьте новый столбец в свой запрос, который не влияет на него. ROW_NUMBER() OVER ( ORDER BY (item.productuse)) RNUM в разделе item.productuse просто укажите любой столбец из запроса, который, по вашему мнению, будет строками сортировка по. Затем вместо вызова ROWNUMBER в запросе avove вызовите RNUM = IIf (NOT (RNUM = 1), TRUE, FALSE) .... Попробуйте это - person Akarsh Kolanu; 27.03.2013
comment
Ах, хорошо, эта последняя попытка была моей ошибкой из-за использования != вместо ‹›. Использование RowNumber(Nothing) ‹› 1 работает! - person WillyC; 27.03.2013

RowNumber недоступен для использования в фильтре табликса.

Использование RowNumber(Nothing) <> 1 в качестве свойства видимости строки устранило проблему.

Используя BIDS, вы не получите никакой ошибки, указывающей на проблему, но импорт отчета в Report Builder и его развертывание оттуда даст более описательную ошибку, которая, в конце концов, помогла мне решить мою проблему.

person WillyC    schedule 26.03.2013