Tableau中使用CASE IN列表匹配product_id过滤报语法错误如何解决
计算字段CASE语句正确写法及报错排查
你写的CASE语句本身符合标准SQL语法规范,报错通常是使用的数据库/BI工具对计算字段的格式、字段类型匹配有特殊要求,可按以下方案调整:
核心注意点
- 先确认
product_id的字段类型:如果是数值型,IN列表里的ID不需要加单引号,类型不匹配是最常见的报错原因 - 大部分计算字段要求为新建字段指定别名,缺少别名也会触发语法报错
- 原代码IN列表中的重复ID不会引发语法错误,但可提前去重优化,避免部分工具对IN列表长度的限制
对应写法
情况1:product_id为字符串类型
CASE WHEN product_id IN ('31049','31048','26166','27816','26031','28861','28864','28863','28203','28110','20641','38112','45174','20645','28404','20646','20648','26159','33287','31417','40551','41020','40550','40553','40554','29804','29941','31430','33354','36730','26073','31432','31433','31431','38154','38166','26029','28341','45138','38069','42069','26060','33886','28392','29518','44879','20651','20655','42914','37535','28031','27588','29297','37688','37709','29551','30183','29550','26187','29549','41348') THEN '1' ELSE '0' END AS is_target_product
情况2:product_id为数值类型
如果需要返回数值型标记方便后续聚合计算,也可以去掉返回值1、0的单引号:
CASE WHEN product_id IN (31049,31048,26166,27816,26031,28861,28864,28863,28203,28110,20641,38112,45174,20645,28404,20646,20648,26159,33287,31417,40551,41020,40550,40553,40554,29804,29941,31430,33354,36730,26073,31432,31433,31431,38154,38166,26029,28341,45138,38069,42069,26060,33886,28392,29518,44879,20651,20655,42914,37535,28031,27588,29297,37688,37709,29551,30183,29550,26187,29549,41348) THEN 1 ELSE 0 END AS is_target_product
内容的提问来源于stack exchange,提问作者Razan Aldossary
相关产品推荐
相关产品推荐

