商业智能(BI)实战项目
期待您的关注
☀大数据学习笔记
1.实现的功能
![](https://img-blog.csdnimg.cn/direct/2274363995254ac0b8d898a528d51222.png)
![](https://img-blog.csdnimg.cn/direct/defd9a57e0d34b3a88a692e1434d2693.png)
![](https://img-blog.csdnimg.cn/direct/12d09a0fd915413a916e2a322cecb7c6.png)
2.数据库操作步骤
java
创建数据库:
create database card;
创建表:
create table card_apply
(
cid bigint primary key auto_increment
,apply_uid bigint
,apply_entrance varchar(90)
,apply_dt varchar(90)
,access_state varchar(90)
,issuccess varchar(90)
,source varchar(90)
,isact varchar(10)
,isfirst varchar(10)
);
![](https://img-blog.csdnimg.cn/direct/32da766ba32549a887ece622e365cd8e.png)
环比:这个月减去上个月的和上个月的比
同比:今年本月减去去年同期和去年同月的比
java
插入数据:
insert into card_apply values
(null,1,'广告banner','2024-06-04','点击','不成功','直销','否','否')
,(null,2,'首页con','2024-06-04','点击','不成功','直销','否','否')
,(null,3,'交叉销售广告位','2024-06-04','点击','不成功','直销','否','否')
,(null,4,'信用卡专区','2024-05-02','点击','不成功','直销','否','否')
,(null,5,'交叉销售广告位','2024-05-03','点击','不成功','直销','否','否')
,(null,6,'广告banner','2024-05-03','点击','不成功','直销','否','否')
,(null,7,'广告banner','2023-06-03','点击','成功','直销','是','是')
,(null,8,'交叉销售广告位','2023-06-03','点击','成功','直销','是','是');
select * from card_apply;
![](https://img-blog.csdnimg.cn/direct/84cf4fd4570f45f2b4332c7eb180250e.png)
3.计算本月信用卡申请人数及同比环比
打开Tableau 连接MySQL 双击新自定义SQL 写入SQL语句
![](https://img-blog.csdnimg.cn/direct/de5d8c574d89436591909b2dfd3aa166.png)
java
select
a.user_cnt curr_month_user_cnt,
(a.user_cnt-b.user_cnt)/b.user_cnt upper_month_user_cnt,
(a.user_cnt-c.user_cnt)/c.user_cnt last_year_user_cnt
from
(
select count(distinct(apply_uid)) user_cnt from card_apply where date_format(apply_dt,'%Y-%m')=date_format(current_date(),'%Y-%m')
)a
,(
select count(distinct(apply_uid)) user_cnt from card_apply where date_format(apply_dt,'%Y-%m')=date_format(date_sub(current_date(), interval 1 month),'%Y-%m')
)b
,(
select count(distinct(apply_uid)) user_cnt from card_apply where date_format(apply_dt,'%Y-%m')=date_format(date_sub(current_date(), interval 12 month),'%Y-%m')
)c
![](https://img-blog.csdnimg.cn/direct/ce398a73f57f411d84d8393e8c9d7b1a.png)
MySQL日期函数
![](https://img-blog.csdnimg.cn/direct/01479dd16efd4c63b01da0f82c64c821.png)
然后跳转到工作表
![](https://img-blog.csdnimg.cn/direct/f164a125b12f42a5a94542a5ae3a31f0.png)
![](https://img-blog.csdnimg.cn/direct/13a0b509aa51475986099594f9776464.png)
4.计算本月信用卡核卡成功人数及同比环比
java
为了方便计算 我们再插入几条数据:
insert into card_apply values
(null,9,'交叉销售广告位','2024-05-03','点击','成功','直销','是','是'),
(null,10,'信用卡专区','2024-06-03','点击','成功','直销','是','是'),
(null,11,'首页con','2024-05-08','点击','成功','直销','是','是');
打开Tableau 连接MySQL 双击新自定义SQL 写入SQL语句
![](https://img-blog.csdnimg.cn/direct/ce8fe7da6d8e40a1a97a4a5d979dc065.png)
java
SELECT
a.success_uid current_success_uid
,(a.success_uid-b.success_uid)/b.success_uid last_month_success_uid
,(a.success_uid-c.success_uid)/c.success_uid last_year_success_uid
FROM
(
select count(distinct(apply_uid)) success_uid from card_apply where issuccess = '成功' and date_format(apply_dt,'%Y-%M') = date_format(current_date(),'%Y-%M')
)a
,(
select count(distinct(apply_uid)) success_uid from card_apply where issuccess = '成功' and date_format(apply_dt,'%Y-%M') = date_format(date_sub(current_date(),interval 1 month),'%Y-%M')
)b
,(
select count(distinct(apply_uid)) success_uid from card_apply where issuccess = '成功' and date_format(apply_dt,'%Y-%M') = date_format(date_sub(current_date(),interval 12 month),'%Y-%M')
)c
![](https://img-blog.csdnimg.cn/direct/9cf2a17497dd4461b5fa200ff46f05b5.png)
![](https://img-blog.csdnimg.cn/direct/dba5deaecf4f4d07bc1fc6002773914b.png)
![](https://img-blog.csdnimg.cn/direct/afea2cc10933412fae4a3c309120a2be.png)
![](https://img-blog.csdnimg.cn/direct/c40831f6cb024f3f91e67b982ad9a64b.png)
最终结果
![](https://img-blog.csdnimg.cn/direct/8e4aaa0371aa47c1b7d6585c2ecdae45.png)
5.计算本月信用卡激活人数及同比环比
java
为了方便计算 我们再插入几条数据:
insert into card_apply values
(null,12,'交叉销售广告位','2024-06-23','点击','成功','直销','是','是'),
(null,13,'信用卡专区','2024-06-18','点击','成功','直销','是','是'),
(null,14,'首页con','2024-05-08','点击','不成功','直销','是','是');
打开Tableau 连接MySQL 双击新自定义SQL 写入SQL语句
![](https://img-blog.csdnimg.cn/direct/ce8fe7da6d8e40a1a97a4a5d979dc065.png)
java
SELECT
a.act_uid current_act_uid
,(a.act_uid-b.act_uid)/b.act_uid last_month_act_uid
,(a.act_uid-c.act_uid)/c.act_uid last_year_act_uid
FROM
(
select count(distinct(apply_uid)) act_uid from card_apply where isact = '是' and date_format(apply_dt,'%Y-%M') = date_format(current_date(),'%Y-%M')
)a
,(
select count(distinct(apply_uid)) act_uid from card_apply where isact = '是' and date_format(apply_dt,'%Y-%M') = date_format(date_sub(current_date(),interval 1 month),'%Y-%M')
)b
,(
select count(distinct(apply_uid)) act_uid from card_apply where isact = '是' and date_format(apply_dt,'%Y-%M') = date_format(date_sub(current_date(),interval 12 month),'%Y-%M')
)c
![](https://img-blog.csdnimg.cn/direct/a0bc8312087b436fb6dea4268d71240f.png)
最终结果
![](https://img-blog.csdnimg.cn/direct/6dcfe40b959c4f36a4a8034be830b1c9.png)
6.计算本月信用卡首刷人数及同比环比
java
为了方便计算 我们再插入几条数据:
insert into card_apply values
(null,15,'交叉销售广告位','2024-06-26','点击','成功','直销','是','否'),
(null,16,'信用卡专区','2024-06-11','点击','成功','直销','是','是'),
(null,17,'首页con','2023-05-08','点击','不成功','直销','是','是');
打开Tableau 连接MySQL 双击新自定义SQL 写入SQL语句
![](https://img-blog.csdnimg.cn/direct/ce8fe7da6d8e40a1a97a4a5d979dc065.png)
java
SELECT
a.first_uid current_first_uid
,(a.first_uid-b.first_uid)/b.first_uid last_month_first_uid
,(a.first_uid-c.first_uid)/c.first_uid last_year_first_uid
FROM
(
select count(distinct(apply_uid)) first_uid from card_apply where isfirst = '是' and date_format(apply_dt,'%Y-%M') = date_format(current_date(),'%Y-%M')
)a
,(
select count(distinct(apply_uid)) first_uid from card_apply where isfirst = '是' and date_format(apply_dt,'%Y-%M') = date_format(date_sub(current_date(),interval 1 month),'%Y-%M')
)b
,(
select count(distinct(apply_uid)) first_uid from card_apply where isfirst = '是' and date_format(apply_dt,'%Y-%M') = date_format(date_sub(current_date(),interval 12 month),'%Y-%M')
)c
![](https://img-blog.csdnimg.cn/direct/4b0cd9b301d846138cf10190952e035e.png)
最终结果
![](https://img-blog.csdnimg.cn/direct/2f3785186a554205ada189a681924988.png)
7.求本月信用卡来源
java
为了方便计算 我们再插入几条数据:
insert into card_apply values
(null,15,'交叉销售广告位','2024-06-29','点击','成功','网络','是','是'),
(null,16,'信用卡专区','2024-06-18','点击','成功','网络','是','是'),
(null,17,'首页con','2024-06-06','点击','不成功','网络','是','是'),
(null,18,'交叉销售广告位','2024-06-21','点击','成功','分行','是','是'),
(null,19,'信用卡专区','2024-06-30','点击','成功','分行','是','是'),
(null,20,'首页con','2024-06-09','点击','不成功','分行','是','是'),
(null,21,'信用卡专区','2024-06-30','点击','成功','网络外部平台','是','是'),
(null,22,'首页con','2024-06-09','点击','不成功','网络外部平台','是','是'),
(null,23,'信用卡专区','2024-06-30','点击','成功','网络外部平台','是','是'),
(null,24,'首页con','2024-06-09','点击','不成功','网络外部平台','是','是');
![](https://img-blog.csdnimg.cn/direct/deee4a42df6441a69d28096a48431723.png)
![](https://img-blog.csdnimg.cn/direct/45b176731d6f450db4b3991e881efa01.png)
java
SELECT
count(*)
,source
FROM card_apply where date_format(apply_dt,'%Y-%M')=date_format(current_date(),'%Y-%M')
group by source;
![](https://img-blog.csdnimg.cn/direct/4928d23807734ef3be34acc393ff3787.png)
8.求本月信用卡核卡成功用户来源
java
SELECT
COUNT(*),source
FROM card_apply
WHERE DATE_FORMAT(apply_dt,'%Y-%M')=DATE_FORMAT(CURRENT_DATE(),'%Y-%M') and issuccess = '成功'
GROUP BY source
![](https://img-blog.csdnimg.cn/direct/4893ca7f253b4a2f8dcfbf303b2cbaf3.png)
![](https://img-blog.csdnimg.cn/direct/354744e571af4743a8a100315b856f93.png)
9.求本月APP信用卡申请入口分布
java
SELECT
COUNT(*),apply_entrance
FROM card_apply
WHERE DATE_FORMAT(apply_dt,'%Y-%M')=DATE_FORMAT(CURRENT_DATE(),'%Y-%M')
GROUP BY apply_entrance
![](https://img-blog.csdnimg.cn/direct/5b24568b5bdb44a6a67b94110c647cfb.png)
![](https://img-blog.csdnimg.cn/direct/f26d9452c0844765a73c0a3f3fe68147.png)
10.求本月APP信用卡申请和提交用户数
java
为了方便计算 我们再插入几条数据:
insert into card_apply values
(null,25,'交叉销售广告位','2024-06-26','提交','成功','直销','是','否'),
(null,26,'信用卡专区','2024-06-11','提交','成功','直销','是','是'),
(null,27,'首页con','2023-05-08','提交','不成功','直销','是','是'),
(null,28,'交叉销售广告位','2024-06-25','提交','成功','直销','是','否'),
(null,29,'信用卡专区','2024-06-25','提交','成功','直销','是','是'),
(null,30,'首页con','2023-06-09','提交','不成功','直销','是','是'),
(null,31,'交叉销售广告位','2024-06-25','提交','成功','直销','是','否'),
(null,32,'信用卡专区','2024-06-24','提交','成功','直销','是','是'),
(null,33,'首页con','2023-06-09','提交','不成功','直销','是','是'),
(null,34,'交叉销售广告位','2024-06-18','提交','成功','直销','是','否'),
(null,35,'信用卡专区','2024-06-19','提交','成功','直销','是','是'),
(null,36,'首页con','2023-06-09','提交','不成功','直销','是','是'),
(null,37,'首页con','2023-06-21','提交','不成功','直销','是','是'),
(null,38,'首页con','2023-06-22','提交','不成功','直销','是','是'),
(null,39,'首页con','2023-06-23','提交','不成功','直销','是','是'),
(null,40,'首页con','2023-06-24','提交','不成功','直销','是','是'),
(null,41,'首页con','2023-06-20','提交','不成功','直销','是','是')
![](https://img-blog.csdnimg.cn/direct/15c09d3082334fe9a993b4b612c980d5.png)
java
SELECT
access_state
,apply_dt
,count(distinct(apply_uid)) user_cnt
FROM card_apply
WHERE DATE_FORMAT(apply_dt,'%Y-%M')=DATE_FORMAT(CURRENT_DATE(),'%Y-%M')
and (access_state = '点击' or access_state = '提交')
group by apply_dt,access_state
由于数据量较小 所以曲线不是那么圆顺 如果我们想要让它变得更丝滑 那么我们可以添加大量数据
![](https://img-blog.csdnimg.cn/direct/84d462b0cc5b41f88d5c6620ebc68691.png)
11.汽车服务用户分析的设计与实现
![](https://img-blog.csdnimg.cn/direct/4d2e04697e2f47189eb413ddb89b2bdf.png)
java
create database app;
use app;
create table app_log
(
log_id bigint primary key auto_increment
,access_dt varchar(90)
,user_id bigint
,browse_page varchar(10)
,app_status varchar(90)
,operator varchar(30)
,net_type varchar(20)
);
![](https://img-blog.csdnimg.cn/direct/6bee776cebbe4900a49de9e2a9bd1406.png)
java
插入数据:
insert into app_log values
(null,'2024-06-01',1,'A','异常','移动','4G'),
(null,'2024-06-02',2,'B','异常','移动','4G'),
(null,'2024-06-01',2,'C','异常','移动','4G'),
(null,'2024-06-02',3,'D','异常','移动','4G'),
(null,'2024-06-02',4,'D','异常','移动','4G')
![](https://img-blog.csdnimg.cn/direct/953e830c63384c259d649d0f3686778f.png)
1)求每日新增用户数
![](https://img-blog.csdnimg.cn/direct/b3aadd141a834e7cb7b5f77aa7512aae.png)
![](https://img-blog.csdnimg.cn/direct/6c6706793036419bba98ecfb33809c4b.png)
![](https://img-blog.csdnimg.cn/direct/1b4131fe5f2841dcb2d36ceaa76c995a.png)
那么 该如何求新增用户数呢 (使用连接查询)
java
select
'2024-06-02' dt
,count(distinct(a.user_id)) num
from
(
select user_id from app_log where date_format(access_dt,'%Y-%m-%d') = '2024-06-02'
)a
left join
(
select user_id from app_log where date_format(access_dt,'%Y-%m-%d') < '2024-06-02'
)b
on a.user_id = b.user_id WHERE b.user_id is null
![](https://img-blog.csdnimg.cn/direct/8b2bf4059dfa4a9790106e35032a1ce6.png)
2)求新增用户7日留存率
日期加减:date_sub(current_date(),interval 8 day)
java
select
c.dt,
c.user_cnt/e.user_cnt remain_ration
from
(
select
date_sub('2024-06-02',interval 7 day) dt,
count(distinct(a.user_id)) user_cnt
from
(
select user_id from app_log where date_format(access_dt,'%Y-%m-%d') = '2024-06-02'
)a
inner join
(
select user_id from app_log where date_format(access_dt,'%Y-%m-%d') = date_sub('2024-06-02',interval 8 day)
)b
on a.user_id = b.user_id
)c
,
(
select count(distinct(user_id)) user_cnt
from
(
select user_id from app_log where date_format(access_dt,'%Y-%m-%d') = date_sub('2024-06-02',interval 8 day)
)b
)e
![](https://img-blog.csdnimg.cn/direct/39897ed2710341a2b110c0a64626a5b8.png)
3)求每周新增用户数
日期转周:week(current_date())
java
select
count(distinct(a.user_id)) user_cnt
from
(
select
distinct(user_id) user_id
from app_log where week(access_dt) = 23
)a
left join
(
select
distinct(user_id) user_id
from app_log where week(access_dt) = 22
)b
on a.user_id = b.user_id where b.user_id is null
![](https://img-blog.csdnimg.cn/direct/5a08c97d37d742da88e9c2ca481dcf61.png)
4)求新增用户八周留存
java
select
d.week,
d.user_cnt/e.user_cnt remain_ration
from
(
select
week(date_add(current_date(),interval -9 week)) week,
count(distinct(a.user_id)) user_cnt
from
(
select user_id from app_log where week(access_dt)=week(current_date())
)a
inner join
(
select user_id from app_log where week(access_dt)=week(date_add(current_date(),interval -9 week))
)b on a.user_id = b.user_id
)d,
(
select count(distinct(b.user_id)) user_cnt
from
(
select user_id from app_log where week(access_dt)=week(date_add(current_date(),interval -9 week))
)b
)e
5)求30日活跃用户
java
select
count(distinct(user_id)) user_cnt
from app_log
where access_dt between date_add(current_date(),interval -30 day) and current_date()