如何将指定Tableau计算字段转换为SQL语句?
Tableau计算字段转SQL的正确性判断
原需求与Tableau计算字段
- 计算字段1逻辑:
按{ FIXED SM, Date, DC: MIN( IF svb = 'S' THEN IF sg = 'X8' AND p = 'N' THEN s * 2 ELSE s END END) }SM, Date, DC分组,仅对svb='S'的行处理:若sg='X8'且p='N'则取s*2,否则取s,最终取分组内这些处理后值的最小值。 - 计算字段2说明:对字段
s(serials)做去重计数
用户编写的SQL语句
select case when AST = 'S' and sg = 'x8' and p = 'N' then count(distinct s) * 2 else count(distinct s) end as CountS from table name group by sm, date, dc
转换正确性分析
你的SQL转换不正确,核心问题如下:
- 逻辑完全偏离:
Tableau是先对符合svb='S'的每行计算s的处理值,再取分组内的最小值;而你的SQL是对分组内所有行做case判断后统计去重计数,两者逻辑差异极大,完全不匹配。 - 字段名错误:
Tableau中判断条件是svb = 'S',但你SQL里写的是AST = 'S',属于字段名写错。 - 大小写匹配问题:
Tableau中是sg = 'X8',你SQL里写sg = 'x8',若数据库区分大小写,会导致条件匹配失败。
正确的SQL转换示例
匹配计算字段1逻辑的SQL
SELECT sm, date, dc, MIN( CASE WHEN svb = 'S' THEN CASE WHEN sg = 'X8' AND p = 'N' THEN s * 2 ELSE s END END ) AS min_processed_s FROM table_name GROUP BY sm, date, dc
匹配计算字段2逻辑的SQL
SELECT sm, date, dc, COUNT(DISTINCT s) AS distinct_serials_count FROM table_name GROUP BY sm, date, dc
内容的提问来源于stack exchange,提问作者Harsh Samani
相关产品推荐
相关产品推荐

