回首页

1 什么是时间维度?

时间维度,是一个与时间有关的聚合概念,它不关心,而是关心这些能聚合成什么样的数据。比如你开了个饭店,你想知道2019-11-17这天你的营业毛额,营业额是多少,这时你想要的是当天的一个结果,而不是流水账当天的结果流水账是两个不同维度的数据,当天的结果是在 流水账的基础上通过时间聚合得到的。对于可以对流水账进行时间当天结果,称之为-时间维度的数据分析

2 有什么用?

概念和技术实现是两回事,当你知道这一概念后,之后思考问题的流程会变为

会有一个结构性的东西,这一思维模式自己也一直在锻炼,使之可以内化为习惯

3 怎么使用?

对应到mysql中,是一个分组求和的问题

SELECT
    DATE_FORMAT(pay_time, "%Y-%m-%d") AS pay_time,
    SUM(pay_price) as total_price
FROM
    orders
WHERE
    pay_time BETWEEN '2019-11-1' AND '2019-11-16'
GROUP BY
    DATE_FORMAT(pay_time, "%Y-%m-%d")

时间维度只是在基础维度上加了一个时间的因子GROUP BY DATE_FORMAT(pay_time, "%Y-%m-%d")。 上方查询是以DATE_FORMAT(pay_time, "%Y-%m-%d") 为时间粒度的,也可以DATE_FORMAT(pay_time, "%Y-%m") DATE_FORMAT(pay_time, "%Y") 为时间粒度。虽然粒度不同,但还是在时间维度上进行查询的

4 Laravel 怎么优雅使用

1 定义一个OrderFilter

<?php

namespace App\Services\Search\Db\Filter;

class OrderFilter extends QueryFilter//参见https://jc91715.top/blog/post/shujufenxi-jichuweidu#8
{

    public function start_time($startTime)
    {
        return $this->builder->where('pay_time', '>=', $startTime);
    }

    public function end_time($endTime)
    {
        return $this->builder->where('pay_time','<=', $endTime);
    }
}

2 使用

use DB;

DB::table('orders')->->select(DB::raw("DATE_FORMAT(pay_time, "%Y-%m-%d") AS pay_time"))->where(function($query){
    app(\App\Services\Search\Db\Filter\OrderFilter::class)->apply($query);

})->groupBy('pay_time')->get();

请求数据的时候带着start_timeend_time自动去查询