Функции Tableau — как найти эквивалент ЕСЛИ СУЩЕСТВУЕТ

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

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

У меня возникла проблема с условным окрашиванием одной из этих метрик. Этот показатель основан на уровне запасов. Для каждого офиса существует несколько категорий типов запасов, каждая с соответствующей целью, с несколькими «корзинами» в каждой категории. Я хочу, чтобы кнопка становилась красной, если ЛЮБОЙ общий объем запасов в корзинах для одной категории превышает целевой показатель для этой категории для этого офиса.

Чтобы попытаться ввести это логически- Для текущих отфильтрованных данных: ЕСЛИ СУЩЕСТВУЕТ(ДЛЯ КАЖДОГО ОФИСА( ДЛЯ КАЖДОЙ КАТЕГОРИИ: [СУММА(BinValue)<CategoryTarget])) THEN 'Зеленый' ELSE 'Красный'

Я попытался перевести эту логику в функции Tableau в вычисляемом поле и получил следующее: SUM(INT({INCLUDE [Category]:Min([CategoryTarget])} > {INCLUDE [Category]:SUM(BinValue)}))

Эта окраска правильная, когда я добавляю на лист таблетки «Название офиса» и «Категория», чтобы проверить свою логику, однако, когда я удаляю таблетки, окраска неверна. Кажется, что-то идет не так, когда я пытаюсь суммировать количество категорий, которые находятся в пределах целевых уровней по всем офисам и целям.

Я пробовал так много итераций следующих функций и уже несколько дней хожу по кругу: ВКЛЮЧИТЬ, ИСКЛЮЧИТЬ, ФИКСИРОВАННЫЙ, ЕСЛИ, СУММА, ЦЕЛОЕ

Если кто-нибудь знает, как это сделать правильно или хотя бы другой способ условного окрашивания кнопок на приборной панели, я был бы невероятно благодарен.

Структура моих данных выглядит следующим образом с некоторыми фиктивными данными в качестве примера:

Область Субрегион Офис Категория Бин BinValue КатегорияЦель Север Северо-Запад Манчестер Игрушки B123 30 50 Север Северо-Запад Манчестер Игрушки B456 40 50

Таким образом, для метрики «Уровень запасов» выбор любого из параметров фильтра «ВСЕ/Север/Северо-Запад/Манчестер» должен быть отмечен красным цветом из-за того, что общее количество ящиков в одной категории в офисе превышает целевое количество для этой категории для этого офиса.

Я обновил свое вычисляемое поле, однако у меня все еще возникают проблемы с группировкой, которая правильно отображается как истина/ложь. Это то, что есть сейчас: МАКС( {ВКЛЮЧИТЬ категорию, Офис: Сумма (BinValue)} > {ВКЛЮЧИТЬ Категорию, Офис: МИН (CategoryTarget)}) С True, отображаемым как Red и False Green (мы хотим быть ниже цели, поэтому зеленый).

Привет, добро пожаловать в SO. не могли бы вы поделиться своей структурой данных/данных. В противном случае повторите свою проблему с данными супермаркета.

AnilGoyal 15.12.2020 06:38

@AnilGoyal - я добавил структуру данных, достаточно ли она подробная?

Samantha 15.12.2020 16:39

Итак, здесь бинсум составляет 70 против цели 50, и мы хотим покрасить игрушки в красный цвет! Я прав?

AnilGoyal 15.12.2020 19:25

@AnilGoyal да, точно!

Samantha 16.12.2020 09:05

Саманта, не могли бы вы предоставить немного больше данных для работы! Эта проблема хоть и слишком многословна, но не кажется сложной

AnilGoyal 16.12.2020 09:09

Да, я придумаю, как опубликовать и отправить ссылку. Спасибо

Samantha 16.12.2020 09:13

Смотрите мой ответ, работает ли он на ваших данных?

AnilGoyal 16.12.2020 09:26
Что такое компоненты React? Введение в компоненты | Типы компонентов
Что такое компоненты React? Введение в компоненты | Типы компонентов
Компонент - это независимый, многократно используемый фрагмент кода, который делит пользовательский интерфейс на более мелкие части. Например, если мы...
1
7
1 073
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Чтобы работать с логическими условиями, такими как проверка того, выполняется ли условие для любой (или каждой) записи в группе строк данных, полезно понять, что Tableau рассматривает логическое значение «Истина» как большее, чем логическое значение «Ложь».

Как только вы освоитесь с этой идеей, вы можете использовать функции MAX() (или MIN()), чтобы проверить, выполняется ли условие для какой-либо записи (или для каждой записи соответственно). Так что MAX(False, False, True, False) верно.

Итак, чтобы узнать, имеют ли какие-либо записи фактическое значение ниже целевого, проверьте MAX([Actual Value] < [Target Value])

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

Одно техническое предостережение: если ваш тест условия когда-либо оценивается как NULL, то эти нулевые значения игнорируются функциями MIN() и MAX() — точно так же, как это делают другие функции агрегирования. Так, например, вы можете проверить, удовлетворяет ли каждая запись условию, используя MIN(), и получить, возможно, вводящий в заблуждение результат, если все ненулевые значения равны True (поэтому MIN() сообщает True). MIN(TRUE, TRUE, NULL, TRUE) = TRUE. Если ваше условие может оцениваться как NULL, и вы не хотите игнорировать нули, а вместо этого обрабатываете их, скажем, так же, как False, вы можете использовать функцию IFNULL(), чтобы предоставить значение по умолчанию для вашего условия.

Например, MIN(IFNULL([Actual Value] > [Target Value], FALSE)) возвращает значение True, только если каждая запись имеет значение выше целевого значения, рассматривая любые записи с отсутствующими значениями или целевыми значениями как не соответствующие условию, то есть не превышающие целевое значение. Выбор того, иметь ли значение по умолчанию для условия и каким оно должно быть, конечно, зависит от проблемы. Если ваши данные не имеют нулевых значений, вам не нужно учитывать эту сложность.

Благодарю за ваш ответ! Я отредактировал свое вычисляемое поле, чтобы включить ваше предложение. Это упростило код, но я все еще пытаюсь получить правильные результаты. Я считаю, что проблема связана с необходимостью группировать значения корзины по категориям для каждого офиса.

Samantha 15.12.2020 16:44

Можете ли вы опубликовать пример где-нибудь, например, в Tableau Public, а затем опубликовать ссылку здесь?

Alex Blakemore 16.12.2020 00:50

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

IF { FIXED [Region], [Sub-Region], [Office], [Category] : SUM([Bin Value])}
> {FIXED [Region], [Sub-Region], [Office], [Category] : MIN([Category Target])} THEN 'RED' ELSE 'GREEN' END

Это основано на предположении, что для каждой группы region/sub-region/office/category целевое значение будет одинаковым в каждой строке внутри группы. Поэтому MAX/AVG и т. д. будут работать вместо MIN, используемых в расчетах.

Смотрите, я добавил две строки в ваши данные

и результат

Ответ принят как подходящий

При работе над примером для демонстрации проблемы мне удалось заставить его работать.

В итоге я использовал следующую логику: max({EXCLUDE [Bin]:SUM([Bin Value])} > [Целевая категория])

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

Я опубликовал пример, который я все равно использовал, на случай, если он поможет другим в будущем. Ссылка на панель инструментов Tableau Public: https://public.tableau.com/views/ConditionalColouring/Dashboard1?:language=en-GB&:useGuest=true&:display_count=y&:origin=viz_share_link

Огромное спасибо за помощь!

Другие вопросы по теме