Выражение SSRS для скрытия / отображения текстовых полей

#sql-server #reporting-services

#sql-сервер #службы отчетов

Вопрос:

Я создал отчет SSRS.

В этом отчете я создал набор данных с именем: DataSet1. DataSet1 содержит два столбца: EntityId (целое число) и Name (Varchar). Я хотел бы показать текстовое поле, если одно из значений в столбце EntityId равно «27».

Итак, я хочу написать выражение, которое делает это:

Если одна из строк в DataSet1 имеет значение EntityId равное 27, то покажите текстовое поле, иначе скройте текстовое поле.

Прочитав некоторые другие подобные вопросы, я думаю, что подсчет строк — это, вероятно, правильный путь. Поэтому вместо этого это может быть что-то вроде:

Подсчитайте строки, в которых DataSet1.EntityId = 27. Если количество строк больше 0, тогда отобразите текстовое поле SSRS, иначе скройте текстовое поле.

Любая помощь с выражением будет высоко оценена

Ответ №1:

Вы можете сделать это легко с помощью простого выражения.

Установите hidden для свойства текстового поля значение

 =SUM(IIF(Fields!EntityID.Value = 27,1,0), "DataSet1") = 0
  

Все, что мы здесь делаем, это начинаем с внутреннего выражения…

  1. Проверьте if EntityID = 27, если оно возвращает 1, иначе верните 0.
  2. Сделайте это для каждого экземпляра в пределах области "DataSet1" (всего вашего набора данных)
  3. Суммируйте результаты
  4. Проверьте, равен ли результат нулю

Это вернет True , если результат равен нулю (нет строк = 27) и, следовательно, скроет текстовое поле

Примечание: имя набора данных должно быть заключено в кавычки и учитывается регистр.

Комментарии:

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

2. Рад помочь. Если это ответило на ваш вопрос, не могли бы вы отметить ответ как принятый (установите флажок под кнопками голосования Вверх / вниз слева).

Ответ №2:

Чтобы упростить выражение, я бы предложил добавить соответствующий флаг непосредственно в набор данных. Следуя примеру:

 DECLARE @t TABLE(
  EntityID int
 ,Title nvarchar(10)
)

INSERT INTO @t VALUES
(10, 'Test 1')
,(27, 'Test 2')
,(27, 'Test 3')
,(11, 'Test 4')
,(15, 'Test 5')
,(15, 'Test 6')
,(27, 'Test 7')

SELECT *, COUNT(CASE WHEN EntityID = 27 THEN 1 ELSE NULL END) OVER (ORDER BY (SELECT 1)) AS flag
  FROM @t
  

Столбец flag равен 0, если EntityId 27 не найден, и> 0, если этот идентификатор найден, поэтому ваше выражение будет примерно таким if flag > 0 then... .