Использование выражения для изменения цвета окна

#sql #reporting-services

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

Вопрос:

У меня есть 2 столбца, в которых есть данные. Столбец 1 я хочу сделать зеленым, если больше 25%, а столбец 2 я хочу сделать зеленым, если больше 10. Если столбец 2 зеленый, я не хочу, чтобы он менял цвет в столбце 1 и наоборот.

Это столбец 1

 =IIF(Fields!New_Strategic_Devices_Qty.Value / Fields!New_and_Upgrade_Postpaid_phones.Value > 0.2199 , "SpringGreen" , IIF(Fields!New_Strategic_Devices_Qty.Value / Fields!New_and_Upgrade_Postpaid_phones.Value < 0.2199 , "White" , 0))
  

Ниже приведено то, что у меня есть в настоящее время для столбца 2.

 =IIF(Fields!New_Strategic_Devices_Qty.Value>=ReportItems!newstratgoal.Value,"LimeGreen", iif(ReportItems!pull_through_percent.Value >0.2199,"White","DimGray"))
  

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

1. вам необходимо предоставить более подробную информацию, чтобы получить ответ на ваш запрос. Предоставьте некоторые примеры данных и то, что вы пробовали.

2. Я пробовал выше с помощью операторов and / or … Результат здесь трудно показать. В принципе, если выполняется условие 1, то условие 2 ничего не делает. Я установил форматирование цвета только для изменения

3. Итак, что происходит, когда выполняются оба условия (C1> 25% и C2> 10)? Игнорируйте примеры данных и покажите свою работу ребятам. Они просят более подробной информации, а затем редко помогают — они просят больше информации, потому что не знают продукт.

Ответ №1:

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

Вы захотите использовать переменную в свойствах группы и установить там выражение. После того, как вы это сделаете, вы можете ссылаться на эти переменные как на выражение в теле отчета с синтаксисом: =Variables!myVariableName.Value . После того, как вы определили групповые переменные, должно быть намного проще реализовать логику, над определением которой вы работаете. Вы можете ссылаться на переменную group как в, так [Field Expression] и в [Color Expression] .

Я бы также рекомендовал использовать SWITCH вместо IIF, switch более удобочитаем и проще определять дополнительные правила в выражении. Вот несколько примеров использования switch. Пожалуйста, обратите внимание, что условие ELSE в последнем выражении требует ‘true’ для оценки неявных условий.

Я надеюсь, что это поможет с вашим решением.

Две справочные статьи:

Групповая переменная, демонстрация выражения:

 [fxSal_PositiveResult]:
=SWITCH(
    (
        Fields!SAL27.Value= 0
        OR  (Fields!SAL27.Value= 1 AND Fields!SAL28.Value= -1)
        OR  (Fields!SAL27.Value= -2 AND Fields!SAL28.Value<> 1)
    ), Fields!SAL27.Value
    ,true, Fields!SAL28.Value
)

[fxCampy_PositiveResult]:
=SWITCH(
    (
        Not(IsNothing(Fields!CAM11.Value))
    ), Fields!CAM11.Value
    ,true, Fields!CAM12.Value
)
  

Демонстрация, скриншот:

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

Ответ №2:

Я не уверен, как вы ожидаете работать с цветами, когда выполняются оба условия — Column1> 25% и Column2> 10. Я заверяю вас, что столбец 1 имеет приоритет в этом случае.

Для свойства backgroundColor первого столбца у вас будет

 =IIF(Fields!New_Strategic_Devices_Qty.Value / Fields!New_and_Upgrade_Postpaid_phones.Value > 0.25, 
    "SpringGreen", 
    "White")
  

Для второго столбца вам понадобится дополнительный IIF из цвета столбца 1, чтобы проверить цвет первого столбца,

 =IIF(Fields!New_Strategic_Devices_Qty.Value >= ReportItems!newstratgoal.Value, 
    IIF(Fields!New_Strategic_Devices_Qty.Value / Fields!New_and_Upgrade_Postpaid_phones.Value > 0.25, 
        "LimeGreen",
        "White"))
  

Кстати, для приведенного вами выражения вам не нужен второй IIF, он будет покрыт ELSE первого IIF, если значение не равно 21,99%. Цвет 0, вероятно, в любом случае выдаст ошибку.

 =IIF(Fields!New_Strategic_Devices_Qty.Value / Fields!New_and_Upgrade_Postpaid_phones.Value > 0.2199 , 
    "SpringGreen" , 
    IIF(Fields!New_Strategic_Devices_Qty.Value / Fields!New_and_Upgrade_Postpaid_phones.Value < 0.2199 , "White" , 0))
  

Я предпочитаю мятный крем для выделения зеленым цветом.

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

1. Хорошо, чтобы ответить на ваш первый вопрос. Я бы хотел, чтобы он проверил, выполнено ли первое условие, и ничего не делал… и наоборот. Итак, если столбец 1 соответствует. выполняется, тогда столбец 2 останется белым, даже если его больше 10. а затем наоборот для того же.