需求场景:相同维度值(门店、产品)下的数值(订单数)是一样的,想要维度下各个数值只计算一次求和。如果直接用sum,会按不同维度下的行数翻倍,如果用sum(distinct)只能是聚合度量,无法用partition by直接转为窗口函数。按截图中的示例,期望最后得到“3店”的值是250,“4店”的值是200。 实现方式(有三种): 实现步骤: 1.获取到每个分组里的值[取值]=max([订单数])over(partition by [门店],[产品]) 2.去重求和[个数]=size(collect_set([产品])over(partition by [门店])) 3.去重后求和[去重求和开窗]=sum([取值]/[个数])over(partition by [门店]) 第二种:通过排序,仅取第一位 思路:先将需要去重的数据在分组内排序,再取每个分组排序为1的数值加和 实现步骤: 1.添加排序,[排序]=row_number()over(partition by [门店],[产品] order by 1) 排序函数可以参考《排序函数》 2.取排序序号=1的对应数值求和,[去重求和-取序号为1的数值求和]=sum(case when [排序]=1 then [订单数] else 0 end)over(partition by [门店]) |