Campos de concatenação do Tableau que correspondem a uma condição

Preciso de gerar um campo de legenda combinando 5 campos, mas aqui está o truque: só quero adicionar strings que correspondam a um valor, e não adicionar strings nulas. Eu tenho um exemplo abaixo onde quatro campos são nomeados " vermelho, verde azul e amarelo "os valores podem ser" Y"," N", ou"Null". Preciso de construir um rótulo com todos os valores de "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"

O que eu fiz é uma série de campos calculados em cascata onde eu verifico dois campos, e coloco isso em um campo temporário, em seguida, eu verificar o campo temporário contra a próxima coluna e fazer um novo campo temporário, etc. Assim (código abreviado):

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'

o cálculo seguinte compara Temp1 a Azul para cada condição e então constrói temp2, e assim por diante.

Pergunta: esta é a maneira mais eficiente de o fazer? Ou há algum código inteligente que me esteja a escapar? Posso fazer tudo em um cálculo sem um número insano de combinações de se/então? Seria bom não ter tantos campos.

Author: Eugene Carroll, 2019-03-06

1 answers

Aqui está uma solução que combina com a presença de "Y". Nos casos em que o valor é "N", nulo, ou algo diferente, o outro não adicionará nada à concatenação.
//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)), " ", ", ")

O TRIM() Remove todos os espaços finais, que poderiam aparecer se a sua última palavra fosse algo diferente de 'amarelo'. O REPLACE() que envolve toda a declaração adiciona uma vírgula após cada palavra -- substituindo o espaço por uma vírgula e um espaço.

Espero que isso ajude.
 0
Author: SEAnalyst, 2020-01-16 23:15:15