Tableau中如何基于行号生成适配国家筛选的0-100%分布条形图
Tableau 动态0-100%分布图表实现方案
你原SQL中预计算的rn是基于全量数据生成的静态值,无法响应国家筛选后的动态重排、归一化需求,所有排序、占比计算需要放在Tableau内通过表计算实现,才能保证筛选后结果自动适配。
1. 调整数据源(可选,推荐操作)
删除SQL中写死的行号逻辑,避免静态字段干扰,修改后的SQL如下:
SELECT article_number, country, SUM(sold_items) as si, SUM(sales) as sales FROM data.sales WHERE sales.order_date between '2021-01-01' and '2021-12-31' GROUP BY 2, 3
如果不想修改原有SQL,后续操作直接弃用原rn字段即可。
2. 新建计算字段
在左侧字段面板右键选择「创建计算字段」,依次新建3个字段:
- 动态排名:基于当前筛选结果,按销售额从小到大给每条(商品+国家)记录生成唯一排名,替代原静态rn
RANK_UNIQUE(SUM([sales]), 'asc') - 总记录数:实时统计当前筛选条件下的有效记录总条数,为横轴归一化提供基数
WINDOW_COUNT(SUM([sales])) - 横轴分布占比:将绝对排名归一到0-1区间,实现无论记录数多少,横轴范围始终固定为0%-100%
([动态排名] - 1) / ([总记录数] - 1)
3. 视图配置
- 将
country字段拖入筛选器卡片,配置你需要的筛选交互样式(例如下拉多选、单选列表)。普通维度筛选优先级高于表计算,筛选动作会自动触发后续所有分布计算重算,完全满足动态适配要求。 - 将
article_number、country两个字段拖入标记卡的「详细信息」,保证视图粒度和数据源聚合粒度一致,即单条标记对应一个商品+国家的销售记录。 - 将横轴分布占比拖入列功能区,将
SUM([sales])拖入行功能区,标记类型选择「条形图」。 - 配置表计算规则:右键点击列功能区的横轴分布占比,选择「计算依据」-「高级」,在弹窗中将
article_number、country全部加入「寻址」栏,排序规则选择按SUM([sales])升序,确认保存。 - 右键点击列轴的横轴分布占比,选择「设置格式」,将数字格式调整为百分比(0位小数),此时横轴刻度会自动展示为0%到100%。
- (可选优化)如果单条条形过窄,可以调整条形宽度,或者将标记类型改为「线」,得到更顺滑的分布曲线。
效果校验
完成配置后,任意切换国家筛选条件,Tableau会自动完成:筛选后数据重排序、总记录数重算、横轴位置归一化,始终保持横轴从0%到100%覆盖全部筛选后记录,和参考效果完全一致。
内容的提问来源于stack exchange,提问作者Danyal Imran
相关产品推荐
相关产品推荐

