你要上天?PowerQuery 中使用工作表函数

话说微软的Microsoft Graph想要一统微软所有数据访问接口?
看看牛逼是不是吹过头了?
一些童鞋不是一直吵着要在PQ里面用工作表函数吗?
那就试试吧!
首先我有个office365账号,然后登陆以下网址:

https://developer.microsoft.com/zh-CN/graph/graph-explorer

不出啥意外你会看到如下界面
file
然后用你的office365账号登陆
file
file
接下来你得做一些准备工作了:
1.授权Microsoft Graph连接数据
file
file
反正我也看不懂英文,统统打钩了 没啥隐私数据不怕,,,
2.在你的云盘准备个测试的空工作簿,如"书籍 1.xlsx"
file
做好准备后你可以先看下微软的Excel Rest Api引用样例
file
file
默认的7个样例中有个调用工作表函数的例子
file
点开你会发现测试栏已经有rest api的调用URL
只不过这个地址需要变为你的云盘中的具体文件地址:
file
比如我的onedrive中有"书籍 1.xlsx"
那么URL写为:

https://graph.microsoft.com/v1.0/me/drive/root/children/书籍 1.xlsx/workbook/functions/base

注意更改请求方式:
file
同时传入函数的参数,比如base函数的两个参数我传入:

{"number":100,"radix":36}

不要问我怎么知道这两个参数的属性名称的,拿起excel就干
file
然后点击运行:
file
下面的相应栏就会返回结果,这结果是json格式的。
file
以上都是模拟,那么在PQ怎么拿到这个过程返回的结果呢?
首先Web通过Post方式请求
那么咱们需要特别注意他的Headers参数,以及后面函数参数值的传递
套路我已经帮你写好了:

let
hd=[#"Content-Type"="application/json",Authorization="Bearer 你的token值"], 
post=Web.Contents("https://graph.microsoft.com/v1.0/me/drive/root/children/书籍 1.xlsx/workbook/functions/base",[Headers=hd,Content=Text.ToBinary("{number:100,radix:36}")])
in
post

由于返回json结构,只需在Web.Contents外套Json.Document函数即可解析从而进一步深化引用拿到value返回值。
注意:上面那个token值在Graph测试页面的网址栏已经有了,不过也能通过Web查询获取,注意调用会话时效,这个留给大家自己摸索。
file
还有就是PQ中会提示你只能匿名方式访问,因为你的头文件传入的那堆东东。
另外关于Excel rest api相关参考如下:

https://docs.microsoft.com/zh-cn/sharepoint/dev/general-development/sample-uri-for-excel-services-rest-api
https://docs.microsoft.com/zh-cn/graph/
https://docs.microsoft.com/zh-cn/graph/excel-use-functions
当然你传入的函数参数也可以引用表的区域:
{"values":[{"address":"Sheet2!A1:A5" }]}
允许多个区域传入,貌似也有个数限制。
或者多个参数值的传入:
sum函数中传入参数:   {values:[1,2,3]}
Text函数中传入参数:      {"value":43327,"formatText":"[DBNum2][$-804]General"}
具体函数参数的属性名称请参考官网对应函数语法。

file

道高一尺 魔高一丈
https://pbihub.cn/users/44
M与DAX的恩怨纠葛