美文网首页
制作一张报表的完整步骤

制作一张报表的完整步骤

作者: 乐高智慧商业 | 来源:发表于2018-11-14 20:12 被阅读14次

    试想这样一个场景,你的领导大卫端着咖啡杯向你的工位这边走来,并在你的旁边停了下来,喝了一口杯中的咖啡,嘴中慢慢的说出这样一句话:“客户有一个报表要的比较急,邮件已经发你了,评估一下时间,相关的细节可以直接在微信群里问客户,有疑问直接问XX。”

    在准备动手做之前,你将接下来需要做的事情,在脑中预演了很多遍,为了找出最高效完成任务的方式,按照这个方式,你高效,快速的完成了任务,因此你获得了领导的重视,以及客户的褒奖。

    整个过程步骤如下

    1. 开发环境准备(BI工具,数据库)
    2. 账号信息(数据库连接信息,VPN账号,应用服务器,数据库服务器信息)
    3. 将业务需求转换成SQL
    4. 制作,发布报表

    开发环境准备

    BI工具:Tableau Desktop 2018.3.
    BIServer:Tableau Server Online
    数据库:Mysql 8.0.12

    账号信息

    请相关人员,按照如下格式提供相关信息。

    数据库信息
    Host:
    Port:
    Database:
    Username:
    Password:
    
    服务器信息
    PCname:
    Username:
    Password:
    
    VPN
    RemoteHost:
    UserNmae:
    Password:
    Domain:
    
    

    下面是详解

    DataSource Connection
    拿到数据库连接信息之后,你可能会发现,指定的数据库IP是无法访问的,为了安全着想,数据库一般不会开放外网访问的权限,需要使用VPN账号连接之后,才能访问数据库。

    Host:
    Port:
    Database:
    Username:
    Password:
    
    Example
    Host:192.168.0.1
    Port:1433
    Database:bglass
    Username:sa
    Password:123456
    

    Vpn

    RemoteHost:
    UserNmae:
    Password:
    Domain:
    
    Example:
    RemoteHost:vpn2.bglass.com
    UserNmae:legao
    Password:123456
    Domain:bglass.com
    

    服务器登录信息

    PCname:
    Username:
    Password:
    
    Example
    PC name:192.168.0.1
    User name:administrtor
    Passsword:123456
    

    将业务转换成SQL

    sum group by

    DROP TABLE IF EXISTS `coins_tbl`;
    
    CREATE TABLE IF NOT EXISTS `coins_tbl` (
        coin_id INT NOT NULL AUTO_INCREMENT,
        coin_symbol VARCHAR(40) NOT NULL,
        coin_price DECIMAL(16,8) NOT NULL,
        last_change_date DATE,
        PRIMARY KEY ( coin_id )
    )ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    INSERT INTO `coins_tbl` 
    (coin_symbol,coin_price,last_change_date)
    VALUES
    ('BTC',645.998,NOW());
    INSERT INTO `coins_tbl` 
    (coin_symbol,coin_price,last_change_date)
    VALUES
    ('BTC',615.998,DATE_SUB(NOW(), INTERVAL 1 DAY));
    INSERT INTO `coins_tbl` 
    (coin_symbol,coin_price,last_change_date)
    VALUES
    ('ETH',177.95,NOW());
    INSERT INTO `coins_tbl` 
    (coin_symbol,coin_price,last_change_date)
    VALUES
    ('EOS',4.5486,NOW());
    INSERT INTO `coins_tbl` 
    (coin_symbol,coin_price,last_change_date)
    VALUES
    ('EOS',3.007,DATE_SUB(NOW(), INTERVAL 1 DAY));
    INSERT INTO `coins_tbl` 
    (coin_symbol,coin_price,last_change_date)
    VALUES
    ('BNB',7.823,NOW());
    
    select coin_symbol,count(coin_symbol) as count,avg(coin_price) as avg_price 
    from coins_tbl
    group by coin_symbol;
    
    coin_symbol count   avg_price
    BTC 4   638.498
    ETH 1   177.95
    EOS 2   3.7778
    BNB 1   7.823
    
    

    one row to multi column

    DROP TABLE IF EXISTS `id_card_tbl`;
    
    CREATE TABLE IF NOT EXISTS `id_card_tbl` (
      `id` INT NOT NULL AUTO_INCREMENT,
      `id_number` varchar(150) NOT NULL,
      `user_name` varchar(150) NOT NULL
       PRIMARY KEY ( coin_id )
     )ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    INSERT INTO `id_card_tbl` 
    (id_number,user_name)
    VALUES
    ('320722199105014823,320722199105014824,','张三,李四');
    INSERT INTO `id_card_tbl` 
    (id_number,user_name)
    VALUES
    ('320722199105014823','王五');
    
    id_number   user_name
    320722199105014823,320722199105014824,  张三,李四
    320722199105014823  王五
    
    select 
    SUBSTRING_INDEX(SUBSTRING_INDEX(id_card_tbl.`id_number`, ',', numbers.n), ',', -1) `id_number`,
    SUBSTRING_INDEX(SUBSTRING_INDEX(id_card_tbl.`user_name`, ',', numbers.n), ',', -1) `user_name`
    from (
    select 1 n union all select 2
    ) numbers
    INNER JOIN `id_card_tbl` on CHAR_LENGTH(id_card_tbl.`id_number`)
         -CHAR_LENGTH(REPLACE(id_card_tbl.`id_number`, ',', ''))>=numbers.n-1;
    
    id_number   user_name
    320722199105014823  张三
    320722199105014824  李四
    320722199105014823  王五
    

    regular place

    -- 中国身份证
    mysql> select REGEXP_REPLACE('王大炮,320722199101020304','[\u0391-\uFFE5]{18,}','$0,');
    
    王大炮,320722199101020304,
    
    -- 香港身份证
    mysql> select REGEXP_REPLACE('王大炮,H123456(2)','[A-Z]{1,2}[0-9]{6}\\([0-9A]\\)','$0,');
    
    王大炮,H123456(2),
    
    -- 去除中文字符
    mysql> select REGEXP_REPLACE('王大炮,H123456(2)','[^\x00-\xff]','');
    
    H1234562
    
    

    制作报表

    维度&度量

    相关文章

      网友评论

          本文标题:制作一张报表的完整步骤

          本文链接:https://www.haomeiwen.com/subject/jxksfqtx.html