Tableau多维度筛选问题:统计适配佛卡夏的其他烘焙食材数量
解决方案:统计适配佛卡夏及其他品类的食材数量
一、SQL层面解决(适合大型数据集,效率更高)
方法1:自连接查询
直接通过自连接关联佛卡夏的食材和其他品类的食材,统计每个品类的重合食材数:
SELECT bg2.烘焙品类, COUNT(DISTINCT bg2.食材) AS 食材去重计数 FROM 烘焙食材表 bg1 JOIN 烘焙食材表 bg2 ON bg1.食材 = bg2.食材 WHERE bg1.烘焙品类 = 'Focaccia' AND bg2.烘焙品类 != 'Focaccia' GROUP BY bg2.烘焙品类 ORDER BY 食材去重计数 DESC;
方法2:窗口函数标记法
先标记出所有佛卡夏使用的食材,再关联统计其他品类的重合数量:
WITH 佛卡夏食材标记 AS ( SELECT 食材, MAX(CASE WHEN 烘焙品类 = 'Focaccia' THEN 1 ELSE 0 END) AS 是佛卡夏食材 FROM 烘焙食材表 GROUP BY 食材 ) SELECT bg.烘焙品类, COUNT(DISTINCT bg.食材) AS 食材去重计数 FROM 烘焙食材表 bg JOIN 佛卡夏食材标记 fm ON bg.食材 = fm.食材 WHERE fm.是佛卡夏食材 = 1 AND bg.烘焙品类 != 'Focaccia' GROUP BY bg.烘焙品类 ORDER BY 食材去重计数 DESC;
二、Tableau层面解决
方案1:用固定级别计算字段(推荐,无需数据混合)
- 创建计算字段
是否为佛卡夏食材:
{ FIXED [食材] : MAX(CASE WHEN [烘焙品类] = 'Focaccia' THEN 1 ELSE 0 END) }
这个字段会给每个食材打标记:1代表该食材用于佛卡夏,0代表不用于。
设置筛选器:
- 把
是否为佛卡夏食材拖到筛选器面板,选择「等于1」 - 把
烘焙品类拖到筛选器面板,选择排除「Focaccia」
- 把
构建视图:
- 将
烘焙品类拖到行功能区 - 将
食材拖到标记卡的文本位置,右键选择「度量 > 计数(不同)」,这就是需要的「食材去重计数」
- 将
方案2:修正数据混合逻辑(如果你坚持用混合)
- 主数据源:保留全量数据,创建计算字段
非佛卡夏品类:
IIF([烘焙品类] != 'Focaccia', [烘焙品类], NULL)
- 副数据源:筛选
烘焙品类为「Focaccia」,只保留「食材」列 - 关联主副数据源:用「食材」字段作为关联键
- 构建视图:
- 将主数据源的
非佛卡夏品类拖到行功能区 - 将副数据源的
食材拖到标记卡,选择「计数(不同)」 - 筛选
非佛卡夏品类不为空,即可得到正确的品类名称和计数
- 将主数据源的
内容的提问来源于stack exchange,提问作者Vivian
相关产品推荐
相关产品推荐

