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.1 answers
//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.