Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powerbi Power BI中有没有更好的方法让REST API调用(如HTTP)使用动态访问令牌(密钥)读取数据_Powerbi_Etl_Powerquery_Business Intelligence_Restapi - Fatal编程技术网

Powerbi Power BI中有没有更好的方法让REST API调用(如HTTP)使用动态访问令牌(密钥)读取数据

Powerbi Power BI中有没有更好的方法让REST API调用(如HTTP)使用动态访问令牌(密钥)读取数据,powerbi,etl,powerquery,business-intelligence,restapi,Powerbi,Etl,Powerquery,Business Intelligence,Restapi,尝试使用RESTAPI调用生成少量Power BI报告。这将需要最初生成一个“访问令牌”,然后将该密钥传递给各种API调用以进行身份验证,以读取数据 我看到许多线程使用“访问令牌”(Key)作为URL查询字符串或PowerBIWeb数据源中的HTTP头。但是尝试实现动态创建的访问令牌,然后在GET调用中作为头传递 目前,我正在尝试从中读取数据,他们通过RESTAPI调用公开数据,授权用户可以使用HTTPGET从他们的门户读取数据。有一个设施可以创建特定于组织的应用程序,并使用其API访问令牌 所

尝试使用RESTAPI调用生成少量Power BI报告。这将需要最初生成一个“访问令牌”,然后将该密钥传递给各种API调用以进行身份验证,以读取数据

我看到许多线程使用“访问令牌”(Key)作为URL查询字符串或PowerBIWeb数据源中的HTTP头。但是尝试实现动态创建的访问令牌,然后在GET调用中作为头传递

目前,我正在尝试从中读取数据,他们通过RESTAPI调用公开数据,授权用户可以使用HTTPGET从他们的门户读取数据。有一个设施可以创建特定于组织的应用程序,并使用其API访问令牌

所以,如果您知道如何在每次数据集刷新期间使用POST动态生成访问令牌,然后调用GET获取报告所需的数据,请与我们分享

下面的图片是建议的API调用,并通过


我通过创建powerbi自定义连接器实现了类似的功能。 它允许您轻松地对任何标准RESTAPI(或任何其他源)进行身份验证。当然,您还可以做一些工作来验证更多的自定义API(我遇到了这个问题)。但是AdobeSignAPI有相当好的oauth2实现。 定制连接器可能是最好的推荐解决方案。你可以做非常强大的事情(我做过)。这是生产就绪解决方案的方法

如何创建自定义连接器:

  • 从Visual Studio Marketplace安装Power Query SDK
  • 创建新的数据连接器项目
  • 定义连接器逻辑
  • 生成项目以生成扩展文件
  • 创建[My Documents]\Power BI Desktop\Custom Connectors目录
  • 将扩展名文件复制到此目录中
  • 在Power BI中启用自定义数据连接器预览功能 桌面(在文件|选项和设置|自定义数据连接器下)
  • 重新启动Power BI桌面
  • 当您有一些基本连接器时,您可以实现OAuth身份验证 在这里,你几乎有复制粘贴解决方案 (来自上述资源)

    然后,当您第一次运行连接器时,它将要求用户进行身份验证,然后它将存储令牌

    稍后,当您运行连接器时,对API的所有请求都由Web.Contents方法完成 将进行身份验证

    GithubSample = [
        Authentication = [
            OAuth = [
                StartLogin = StartLogin,
                FinishLogin = FinishLogin
            ]
        ],
        Label = Extension.LoadString("DataSourceLabel")
    ];
    StartLogin = (resourceUrl, state, display) =>
            let
                AuthorizeUrl = "https://Github.com/login/oauth/authorize?" & Uri.BuildQueryString([
                    client_id = client_id,
                    scope = "user, repo",
                    state = state,
                    redirect_uri = redirect_uri])
            in
                [
                    LoginUri = AuthorizeUrl,
                    CallbackUri = redirect_uri,
                    WindowHeight = windowHeight,
                    WindowWidth = windowWidth,
                    Context = null
                ];
    FinishLogin = (context, callbackUri, state) =>
        let
            Parts = Uri.Parts(callbackUri)[Query]
        in
            TokenMethod(Parts[code]);
    TokenMethod = (code) =>
        let
            Response = Web.Contents("https://Github.com/login/oauth/access_token", [
                Content = Text.ToBinary(Uri.BuildQueryString([
                    client_id = client_id,
                    client_secret = client_secret,
                    code = code,
                    redirect_uri = redirect_uri])),
                Headers=[#"Content-type" = "application/x-www-form-urlencoded",#"Accept" = "application/json"]]),
            Parts = Json.Document(Response)
        in
            Parts;