Amazon QuickSight使用计算字段从逗号分隔的未排序字符串中提取字符串

问题描述

我正在处理QuickSight表图,其中数据集具有一个字段,该字段是一组用','(逗号)分隔的单词。这些单词没有以任何顺序排序,但是对于数据集的每一行,可能会有1个或多个单词,并且它们可以在各行中重复,但不能在同一数据行中重复。

giraffe,lion,apple,mango,dog,frog,banana
lion,apple
banana,giraffe,dog
giraffe,banana,apple
mango,apple
frog
giraffe
lion,dog

我想将它们分成单独的“计算字段”,如果要显示的行中只包含该单词,如果该单词不在该完整行中,则只需要NULL。我正在使用以下构造:

calculated field name: 
"giraffe"

value to calculate the field:

ifelse(
    (
        (split({AnimalFruit},',1) = "giraffe") OR 
        (split({AnimalFruit},2) = "giraffe") OR  
        (split({AnimalFruit},3) = "giraffe") OR  
        (split({AnimalFruit},4) = "giraffe") OR  
        (split({AnimalFruit},5) = "giraffe") OR  
        (split({AnimalFruit},6) = "giraffe") OR  
        (split({AnimalFruit},7) = "giraffe") OR  
        (split({AnimalFruit},8) = "giraffe") OR  
        (split({AnimalFruit},9) = "giraffe") OR  
        (split({AnimalFruit},10) = "giraffe")
    ),"giraffe",NULL
)

但是上面的代码仅给出了“长颈鹿”是第一个单词的行,而不是行中可能是第二或第三或更高版本的行。

我不确定我在做什么错,因为逻辑似乎对我来说是正确的。还有什么我可以做得到这个结果的吗?

我期望的输出是:

giraffe

但是我得到了

enter image description here

我还尝试使用AWS页面中为“ ifelse”指定的以下构造:

https://docs.aws.amazon.com/quicksight/latest/user/ifelse-function.html

ifelse(
    (split({Flags},1)) = "giraffe",(split({Flags},2)) = "giraffe",3)) = "giraffe",4)) = "giraffe",5)) = "giraffe",6)) = "giraffe",7)) = "giraffe",8)) = "giraffe",9)) = "giraffe",10)) = "giraffe",NULL
)

解决方法

已解决了该问题。 CSV数据集的创建方式存在问题,它允许在“,”(逗号)和下一个单词之间使用“”(空格)。

当我第一次搜索该单词时,它没有那个空格,但是对于随后的每个单词,都有一个空格,必须在查询构造中满足该要求:

ifelse(
    (
        (split({AnimalFruit},',1) = "giraffe") OR 
        (split({AnimalFruit},2) = " giraffe") OR  
        (split({AnimalFruit},3) = " giraffe") OR  
        (split({AnimalFruit},4) = " giraffe") OR  
        (split({AnimalFruit},5) = " giraffe") OR  
        (split({AnimalFruit},6) = " giraffe") OR  
        (split({AnimalFruit},7) = " giraffe") OR  
        (split({AnimalFruit},8) = " giraffe") OR  
        (split({AnimalFruit},9) = " giraffe") OR  
        (split({AnimalFruit},10) = " giraffe")
    ),"giraffe",NULL
)

这样做,解决了该问题,我得到了所需的输出。