PowerBI处理API数据

一般来说,并不是所有的数据库厂商都与微软达成了商务合作,这就导致市面上还存在一部分数据源无法通过PowerBI内置的连接器进行数据连接。
但几乎所有的数据库,都可以通过各种各样的方式,提供给外界一个可以进行数据交互的接口,也就是说我们常说的API,而恰好,PowerBI是可以对API数据进行处理的。

API,应用程序编程接口,是企业一种主流的数据传输方式,避免了通过账户密码的方式给数据库带来的安全隐患性能问题,也是针对上面问题的答案。

对比通过数据库账户密码获取数据的方式,API具备如下优点:

  • 避免通过账户密码连接数据,杜绝了安全隐患

  • 避免对数据库进行查询操作,减轻了数据库负载压力

函数介绍

语法如下

let
    RequestUrl = "请求的网址",
    GetQuery = [参数1 = "条件1", 参数2 = "条件2"],
    PostContent = "参数1=条件1&参数2=条件2",
    Headers = [AccessToken = "Token的令牌", #"Content-Type" = "application/x-www-form-urlencoded"],
    Result = Json.Document(
        Web.Contents(RequestUrl, [Headers = Headers, Query = GetQuery, Content = Text.ToBinary(PostContent)])
    )
in
    Result

Web.Contents参数介绍

  1. RequestUrl就是需要请求API的网址

    • 如果是内部自开发的,那么询问开发者使用方法即可

    • 如果是外部公网的话,那么需要利用F12查询相关配置信息

    • Payload是目前存放POST请求参数的位置,之前都是存放在Headers下面

  2. GetQuery就是查询中我们需要使用到的参数,一般是针对GET的API类型,通常是网址问号后面的部分

    • 例如:www.baidu.com/s?wd=白茶,“wd=白茶”这部分就是参数
  3. PostContent是我们需要提交的数据,一旦填写这个参数,Url的请求会自动从GET转化为POST类型

  4. Headers是请求头,一般所有的API都是需要填写这部分的,包括Token、Content-Type等

  5. Content -Type这个参数,要看请求类型

    • 如果是GET类型的API请求,那么这个参数可以省略

    • 如果是POST类型的API请求,那么这个参数是必填项

    • 如果参数里面有"-"、空格、或者是一些特殊符号,那么就需要添加#作为前缀声明

  6. []是PowerQuery的基本语法,即为Record,返回的是行数据

  7. Web.Contents返回的结果是Json数据,我们利用Json.Document将其转化为结构数据

  8. Result返回的结果,可以根据自己的需求,决定数据深化程度调整代码

  9. 某些API需要我们先获取一些条件,例如Token、Pages等一些其他先决条件

  10. 某些API需要我们循环遍历,例如获取Pages不同页面的相同信息,最终汇总一下

注意事项[1]

  • API请求以GET类型或POST类型的形式发出

  • POST类型请求只能匿名发出

案例

案例1:GET多页面数据合并

http://quote.stockstar.com/stock/ranklist_a_3_1_1.html

结果

代码

let
    RequestUrl = "http://quote.stockstar.com/stock/ranklist_a_3_1_",
    Function = (Pages) =>
        let
            GetData = Web.Contents(RequestUrl & Text.From(Pages) & ".html"),
            UrlTable = Web.Page(GetData){0}[Data],
            RemoveLastNData = Table.RemoveLastN(UrlTable, 1),
            SelectColumns = Table.SelectColumns(
                RemoveLastNData, {"代码", "简称", "流通市值(万元)", "总市值(万元)", "流通股本(万元)", "总股本(万元)"}
            )
        in
            SelectColumns,
    Result = Table.Combine(List.Transform({1..2}, Function))
in
    Result

解析

  1. RequestUrl就是需要请求API的网址

    • 当前网址在浏览器查看可以知道是GET类型请求,且不需要Token验证
  2. Funcation添加了一个自定义函数,参数名为Pages,用来处理请求API

    • GetData是请求API的基本语法,因为API网址翻页是动态的,所以将其页面标识转化为变量Pages,当前返回结果为Html页面结构

    • UrlTable是利用Web.Page函数,将Html源码解析为表格结构

    • RemoveLastNData是为了删除每一页最后一行的多余数据

    • SelectColumns是为了删除其他不需要的空白列

  3. Result开始调用上面的自定义函数,用来循环合并数据

    • List.Transform可以让第一参数里面的每个值,都执行第二参数的操作

    • {1..2}是利用“…”构建了连续的列表,“…”前后分别代表开始和结束

    • Table.Combine的作用是为了合并多个表

案例2:POST多页面数据合并

http://www.drugfuture.com/cndrug/national.aspx?ApprovalDateStart=2016-01-01&ApprovalDateEnd=2016-12-31

结果

代码

let
    RequestUrl = "http://www.drugfuture.com/cndrug/national.aspx",
    Headers = [#"Content-Type" = "application/x-www-form-urlencoded"],
    GetQu
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fabric丨白茶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值