SQL转Tableau:实现固定cohort_month_since=0时price_total值的逻辑
在Tableau中实现固定cohort_month_since=0时的price_total值
你要实现的逻辑是把每个month分组下的price_total固定为该组内cohort_month_since=0时的数值,对应你用SQL开窗函数实现的逻辑,在Tableau里可以通过**LOD表达式(详细级别表达式)**完成,具体步骤如下:
1. 创建计算字段
在Tableau中点击「分析」→「创建计算字段」,命名为固定初始价格(或自定义名称),输入以下表达式:
{INCLUDE [month]: MAX(IF [cohort_month_since] = 0 THEN [price_total] END)}
表达式说明
{INCLUDE [month]}:对应SQL里的PARTITION BY month_column,表示按month字段分组计算MAX(IF [cohort_month_since] = 0 THEN [price_total] END):和你SQL中的CASE WHEN逻辑完全一致,提取分组内cohort_month_since=0的price_total值(因为每个分组里这个值唯一,用MAX/MIN/AVG结果都相同)
2. 替换字段查看效果
把新建的固定初始价格字段拖到视图中,替换原来的price_total字段,就能得到你期望的结果:
当前数据(原结果)
month | cohort_month_since | price_total Jan 2020 | 0 | 745.09 Jan 2020 | 1 | 745.39 Jan 2020 | 2 | 746.01 Jan 2020 | 3 | 744.99
期望数据(实现后)
month | cohort_month_since | 固定初始价格 Jan 2020 | 0 | 745.09 Jan 2020 | 1 | 745.09 Jan 2020 | 2 | 745.09 Jan 2020 | 3 | 745.09
可选:FIXED LOD写法
如果你的视图中不需要考虑其他额外维度,也可以用FIXED替代INCLUDE,表达式如下:
{FIXED [month]: MAX(IF [cohort_month_since] = 0 THEN [price_total] END)}
FIXED会严格只按指定的month分组计算,不受视图中其他维度的影响;而INCLUDE会结合视图中已有的维度进行分组,你可以根据实际场景选择。
内容的提问来源于stack exchange,提问作者sadvsdcasd
相关产品推荐
相关产品推荐

