一些同学也许还没有学习过SQL(结构化查询语句),也不需要担心,和Excel中的公式一样,理解这些语句的核心并没有什么差别:都是基于你对数据处理的步骤进行抽象。在今天的任务中,也仅需要将这些数据看作与Excel中数据一样来使用。
首先打开一个新工作薄,在左侧选择“连接到服务器-mySQL”:
在弹出的窗口中输入服务器、端口号、用户名和密码。拓展一下python的连接代码,也是一个道理。
import MySQLdb
#创建连接,这里以本地主机为例
conn=MySQLdb.Connect(
host='localhost', #主机名
port=3306, #端口号
user='root', #用户名
passwd='your passport', #密码
db='your database', #数据库名
charset='utf8', #这里设置编码是为了输出中文
)
之后进入数据字段的选择窗口。我们需要连接数据库中现有的订单表单 (order table)和上架情况表单,选择产品编号(两边都有的字段作为连接字段,选择右连接。以上架情况表单为更大的产品“池子”,能够包含已经被购买的与还待售的产品。
这里我们的目的是构建一个Tableau的订单追踪仪表盘,需要在确定日期后可以看到该日上架的各品牌商品,追踪到独一无二的产品代号,希望能够显示这个商品第一次售出的时间、在当日同一批货品中第几个售出(相对热销度);该日上架的产品创建首次订单的时间,依次算出各品牌的首次转换周期。
其中需要注意的问题是,产品售出的日期应该晚于“本次”上架日期。因此需要进行一个清洗——有效日期的先行筛选:
valid days = IIF([shop_at]<=[created_at (order table)],[created_at (order table)],today()+1)
之后显示该商品第一次售出的时间 :
first_order_product={ FIXED [product_id],DATE([shop_at]): MIN([valid days])}
产品第一次售出=DATE(MIN([first_order_product]))
显示该品牌第一次售出的时间 :
first_order_brand={ FIXED [brand],DATE([shop_at]): MIN([valid days])}
所属品牌首次售出=DATE(MIN([first_order_brand]))
在当日同一批货品中第几个售出(相对热销度):
RANK([所属品牌首次售出],'asc')
发生首次转换的周期
diff = DATEDIFF('day', [shop_at],[first_order_brand])
首次转换周期 = MIN([diff])
附注一个tips:在将计算好的日期字段转换为列来显示时,还可以进行转换为精确到日的字符型转换。
DATE(DATEPARSE ( "yyyy-MM-dd HH:mm:ss", STR([sale_at]) ))
下一步,进行对各品牌的下单密度的统计。使用表计算方法:
DATEIFF('day', LOOKUP(MIN([created_at (order table)]),-1)),MIN([created_at (order table)]))
这个公式的意思就是从上到下,从该品牌的第一个订单日期开始逐两行计算他们的时间差,以日为差值单位。
好啦~到此为止我们就完成了两个指标的表构建,之后在订单和上架数据更新的时候,作为连接到数据源实时更新的数据,他也能够自动刷新。
再进行这个项目的过程中,也有助于加深对tableau中所谓“聚合字段”的理解,可以将其看作一个数组/集合,因此在和其他函数组合使用时,有时需要加入中间参数协助处理。