2013-03-26 4 views
2

SQL Server 2008 R2, используя BIDS для разработки отчета.Тип Проблемы с выражением фильтра в SSRS

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

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

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. 

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

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

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

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

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

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

+0

Какая версия SSRS это? Кроме того, пытаетесь ли вы фильтровать в свойствах набора данных, свойствах для объекта отчета (например, таблицы) или где-то еще? –

+0

SSRS, входящий в состав SQL Server 2008 R2. Этот фильтр находится в tablix, но я попытался применить его на уровне видимости строк с тем же результатом. Фактически, если я помещаю это в построитель отчетов, я по крайней мере получаю реальную ошибку (RowNumber не может использоваться в выражении фильтра), но для выражения Row Visibility я получаю: Выражение Visibility.Hidden для tablix 'TableName' содержит ошибка: [BC30203] Идентификатор ожидается. – WillyC

ответ

1

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

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

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

1

Лучше скрыть строку с видимым свойством. Просто нажмите на любое текстовое поле и перейдите на вкладку visibily. Теперь вы можете нажать на шоу или hode и перейти к выражению.

Это значение по умолчанию для Hide. Поэтому напишите выражение, чтобы скрыть строку. = IIF (NOT (RowNumber = 1), TRUE, FALSE)

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

+0

Ошибка: «RowNumber не объявлен» - предположительно, потому что это функция. Однако, если я попытаюсь использовать его как функцию ("= RowNumber (Nothing)! = 1" или "= IIF (RowNumber (Nothing)! = 1, true, false)") Я получаю: "Visibility.Hidden выражение для tablix 'TableName' содержит ошибку: [BC30203] Идентификатор ожидается. " (Обратите внимание, что изменение «Nothing» на имя DataSet или Tablix в виде строки не изменяет ошибку.) – WillyC

+0

Что делать с этой штукой Добавить новый столбец в ваш запрос, который не влияет на него «ROW_NUMBER() OVER (ORDER BY (item.productuse)) RNUM "в разделе item.productuse просто укажите любой столбец из запроса, который, по вашему мнению, будет сортировать строки. Затем вместо вызова ROWNUMBER в запросе запроса avove с помощью RNUM = IIf (NOT (RNUM = 1), TRUE, FALSE) .... Попробуйте это –

+0

Ah - OK, эта последняя попытка была моей ошибкой для использования! = Вместо <>. Использование RowNumber (Nothing) <> 1 работает! – WillyC

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