#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
Все, что мы здесь делаем, это начинаем с внутреннего выражения…
- Проверьте if
EntityID
= 27, если оно возвращает 1, иначе верните 0. - Сделайте это для каждого экземпляра в пределах области
"DataSet1"
(всего вашего набора данных) - Суммируйте результаты
- Проверьте, равен ли результат нулю
Это вернет 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...
.