#tableau-api
#таблица-api
Вопрос:
Мне нужно сгенерировать поле метки путем объединения 5 полей, но вот в чем хитрость: я хочу добавлять только строки, соответствующие значению, а не нулевые строки. У меня есть пример ниже, где четыре поля названы «красный, зеленый, синий и желтый», значения могут быть «Y», «N» или «Null». Мне нужно создать метку из всех значений «Y»:
Red, Green, Blue, Yellow
Y, N, Y, Null --> resultant string would be "Red, Blue"
Y, Y, Null, N --> resultant string would be "Red, Green"
N, Null, N, Y --> resultant string would be "Yellow"
То, что я в настоящее время сделал, — это каскадная серия вычисляемых полей, где я проверяю два поля и помещаю их во временное поле, затем я сравниваю временное поле со следующим столбцом и создаю новое временное поле и т.д. Вот так (сокращенный код):
If Red is Y and Green is Y then Temp1 = "Red, Green"
Elsif Red is Y and Green <> Y then Temp1 = "Red"
elsif Green is Y and Red <> Y then Temp1 = "Green"
Else Temp1 is 'empty'
Следующее вычисление сравнивает Temp1 с синим для каждого условия, а затем создает temp2 и так далее.
Вопрос: Является ли это наиболее эффективным способом сделать это? Или есть какой-то хитроумный код, которого мне не хватает? Могу ли я выполнить все это в одном вычислении без безумного количества комбинаций «если / то»? Было бы неплохо иметь не так много полей.
Ответ №1:
Вот решение, которое объединяет на основе присутствия «Y». В случаях, когда значение равно «N», Null или чему-то другому, значение ELSE ничего не добавит к конкатенации.
//Calculated field you will create
REPLACE(TRIM( STR(IF [Red] = "Y" THEN "RED " ELSE "" END)
STR(IF [Green] = "Y" THEN "Green " ELSE "" END)
STR(IF [Blue] = "Y" THEN "Blue " ELSE "" END)
STR(IF [Yellow] = "Y" THEN "Yellow" ELSE "" END)), " ", ", ")
TRIM()
Удаляет все завершающие пробелы, которые могли бы появиться, если бы вашим последним словом было что-то другое, кроме «Желтый». REPLACE()
, который обтекает все выражение, добавляет запятую после каждого слова, заменяя пробел запятой и пробелом.
Надеюсь, это поможет.
Комментарии:
1. Спасибо! Я знал, что должен быть способ сделать это. Я просто не мог найти правильные ключевые слова для поиска языка в ссылках. Я собираюсь выполнить обратный поиск ваших функций в справочной ссылке, чтобы выяснить, где они перечислены. Извините, я не смог поддержать ваш ответ, по-видимому, я слишком новичок.
2. @EugeneCarroll вы можете принять ответ на любом уровне. Установите флажок под стрелками вверх / вниз, если это решает проблему за вас.