Как создать функцию деления Таблицы на основе оператора case?

В Tableau у меня есть полностью нормализованный набор данных, например. У меня есть поле для измерения (страны), поле для показателя (прибыль и продажи) и поле для значения (числа фактов).

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

(case when metric = 'profit' then [value] else 0 ) / (case when metric = 'sales' then [value])

Я попытался создать оператор case, используя функциональность вычисляемого поля Tableau, но он возвращает ноль - я подозреваю, потому что я пытаюсь сделать это за 1 шаг, а в SQL я думаю, что это может быть двухэтапный процесс.

Обратите внимание, что простое решение реструктуризации данных на самом деле не вариант, поскольку это создает другие проблемы (не указанные в моем упрощенном примере).


person user3302483    schedule 12.02.2015    source источник


Ответы (2)


Попробуй это:

шаг 1: вычисляемое поле Profit:

если метрика = 'Прибыль', то конец значения

шаг 2: вычисляемое поле sales:

если метрика = 'продажи', то конец значения

шаг 3: одно вычисляемое поле для деления Profit/sales

затем вы используете это, чтобы получить результат.

person vhadalgi    schedule 12.02.2015
comment
Таким образом, эта логика имеет смысл, и я могу выполнить процесс в Tableau. Однако возвращаемые числа неверны. Мне нужно разобраться в этом более подробно. Одна вещь, которую я заметил, заключается в том, что когда я помещаю метрику шага 3 в панель, она дает мне AGG (step3), а не SUM (step3). Не уверен, связано ли это с этим. - person user3302483; 12.02.2015
comment
Вам необходимо решить, хотите ли вы рассчитывать соотношение прибыли / продаж на уровне строк для каждой отдельной транзакции или хотите, чтобы агрегированный расчет был сгруппирован по измерениям в вашей визуализации. Второй случай приравнивается к группе сумма (прибыль) / сумма (продажи) по .... В этом случае Tableau отображает AGG () вокруг имени вычисляемого поля, чтобы указать, что функция агрегирования встроена в расчет, а не выбирается отдельно для полка. Если это вам не знакомо, узнайте, как работает SQL GROUP BY. - person Alex Blakemore; 12.02.2015

Я предполагаю, что в вашем наборе данных есть profit и sales в разных строках. Что, возможно, доставляло проблемы. Хорошей новостью является то, что в Tableau 9.0 и более поздних версиях этого можно легко добиться с помощью LOD Calculations.

Итак, вы можете попробовать создать вычисляемое поле как

country_profit : {FIXED country : SUM(CASE WHEN metric = 'PROFIT' then value)}
country_sales : {FIXED country : SUM(CASE WHEN metric = 'Sales' then value)}
result : country_profit / country_sales

Сообщите нам, работает ли это.

person minatverma    schedule 03.01.2016