SSRS — условное форматирование текста (выражения с использованием переключателя)

Я открою это, заявив, что выражения действительно работают в отчете. Проблема в том, что они не работают вместе.

В настоящее время у меня есть заголовок столбца, отформатированный на основе значений двух столбцов. Выделение курсивом и подчеркиванием в зависимости от значения Column1. Жирный и определенный цвет в зависимости от значения Column2. Я делаю это, используя выражения Switch в свойствах текста. Вот что у меня есть для каждого:

=Switch(Fields!Column1.Value <> "Specific Value","Italic",Fields!Column1.Value = "Specific Value","Normal")
=Switch(Fields!Column1.Value <> "Specific Value","Underline",Fields!Column1.Value = "Specific Value","None")
=Switch(Fields!Column2.Value <= 7,"ExtraBold",Fields!Column2.Value >=` 8,"Normal")
=Switch(Fields!Column2.Value <= 7, "Red",Fields!Column2.Value >= 8,"#586d7f")

И изображение, чтобы показать, что все они отмечены:

введите здесь описание изображения

Когда я запускаю отчет, ошибок нет.

Странно (по крайней мере для меня) то, что результаты должны выглядеть так:

  1. Обычный
  2. Жирный и красный
  3. Курсив и подчеркивание
  4. Все четыре (жирный, курсив, красный и подчеркнутый)

В ситуации, когда текст должен выглядеть как 4, он выглядит как 2. Все остальное работает так, как должно, поэтому я немного озадачен и хотел бы объяснить, почему это так. Я посмотрел, был ли ответ на этот вопрос раньше, но, исходя из того, что я видел, это не похоже на это. Если я использовал неправильную терминологию, прошу прощения (я новичок в этом).


person Facegames TC    schedule 12.06.2013    source источник
comment
Если есть определенные проблемы с оператором switch, я бы переключился, ха-ха, на оператор IIF и попробовал бы его сначала: =IIF(Fields!Column1.Value ‹> Конкретное значение, курсив, обычный)   -  person djangojazz    schedule 12.06.2013
comment
Я просто попробовал это, и это сработало. Я думал об этом, но не видел, какая разница. Любая идея, почему это будет работать, а переключатель - нет?   -  person Facegames TC    schedule 12.06.2013
comment
Написал более подробный ответ ниже для вас.   -  person djangojazz    schedule 12.06.2013


Ответы (1)


Вместо этого я бы использовал оператор IIF().

=IIF(Fields!Column1.Value <> "Specific Value", "Italic", "Normal") 

Вообще говоря, оператор switch — это оператор case для нескольких случаев, а оператор IIF — это типичный оператор if, then, else. Опасность заключается в том, что вы можете вкладывать операторы IIF, такие как IIF(thing, 'set1', iif(thing2, 'set2', 'default')) но было бы проще сделать переключатель, такой как Switch(thing, 'set1, thing2, «set2», «по умолчанию»). Проблема с переключателями заключается в том, что если что-то происходит как с одним, так и с другим, он предполагает, что первое верно, и просто выполняет это. Таким образом, вы должны учитывать надлежащий порядок возникновения чего-либо, иначе он примет первый случай. Обычно, когда у вас есть экземпляр чего-то и значение по умолчанию, я использую IIF. Если есть проблема с переключателем, я обычно делаю вложенный IIF или переупорядочиваю события оператора Switch.

Надеюсь, это немного поможет.

person djangojazz    schedule 12.06.2013
comment
Спасибо! Теперь я буду помнить об этой логике, пытаясь определить, что использовать. - person Facegames TC; 12.06.2013