一、前言
年初的时候,业务人员提了一个需求,需要查看今年之后每个月注册的用户,6个月内的订单数(当月开始往后计算6个月),并分别展示当月、次月到第5个月的订单数统计,由于还需要看用户的详情信息,所以把所有用户的订单数据拉到Tableau面板上,通过Tableau公式进行聚合统计。
注:实际需求并不是统计订单数,而且统计其他业务需求,由于背景信息较复杂,改用订单数类比。
二、需求实现
数据拉完放到面板上,然后通过以下公式统计:
//6个月总订单数
//原公式
count(if MONTH([支付时间])<=MONTH(DATEADD('month',5,[注册时间])) then [订单id] end )
验证了一下数据,没问题,然后交差了。
这几天,运营人员在反馈一些其他问题的时候,突然发现,这一列数据神奇的变成0了,虽然8月份明明是有订单数据的。
后来看了一下公式,推算一下,8+5=13
,嗯,变成明年的1月份了,单独取月份对比的时候,8<1
不成立,所以数据都没了。
怎么解决呢?
其实很简单,tableau提供了一个时间截断公式,截断后的部分取最小值,举个例子就明白了,比如有一个时间:2022-08-10 08:22:33
- 截取年份,则月日时分秒都取最小值,即
2022-01-01 12:00:00 AM
(tableau的0点显示为12点AM); - 截取月份,则日时分秒都取最小值,即
2022-08-01 12:00:00 AM
; - 截取日份,则时分秒都取最小值,即
2022-08-10 12:00:00 AM
; - 官方的举例是使用季度(如下图),季度是一个隐含条件,一季度使用1月1日,二季度使用4月1日,三季度使用7月1日,四季度使用10月1日。所以
2022-08-10 08:22:33
截取季度就是2022-07-01 12:00::00 AM
。
测试结果如下:
所以修改后公式如下:
//6个月总订单数
//修改后公式
count(if DATETRUNC('month',[支付时间])<=DATETRUNC('month',DATEADD('month',5,[注册时间])) then [订单id] end)
就是将MONTH()
函数替换为DATETRUNC()
即可。
三、小结
//6个月总订单数
//原公式
count(if MONTH([支付时间])<=MONTH(DATEADD('month',5,[报名日期])) then [order_id] end )
//修改后公式
count(if DATETRUNC('month',[使用时间])<=DATETRUNC('month',DATEADD('month',5,[日期])) then [order_id] end)
在处理时间问题上,经常会有一些意向不到的“惊喜”,通过这些“惊喜”可以不断丰富我们的经验,完善我们的认知,“且行且珍惜”。
数据表和Tableau上的一些测试都在资源(Tableau计算用户注册之后6个月内订单数)中,需要的小伙伴自行下载(免费)查看。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/66950.html