首页 文章

具有刷新功能的Power BI数据源

提问于
浏览
2

我正在尝试在Power BI中设置一个数据集,可以根据需要刷新或计划刷新 .

我正在上传一个具有电源查询的excel工作簿 .

电源查询连接到Replicon Service以通过服务获取数据 . 查询如下所示:

Source = Web.Contents(
    "https://na2.replicon.com/services/ClientService1.svc/GetActiveClients",
    [
        Headers=
        [
            #"Authorization"="Bearer *ValidToken*",
            #"Accept"="application/json",
            #"Content-Type"="application/json"
        ],  
        Content=Text.ToBinary("{}")
    ]
)

请求是POST操作,因此Content字段用于 Web.Contents Options参数 . 身份验证通过Bearer令牌进行 .

数据源设置为匿名凭据,其隐私级别设置为无 .

这工作正常,我能够检索结果甚至刷新工作簿中的表单 .

一旦我将其上传到PowerBI并尝试刷新新创建的数据集,它会说:

您无法刷新,因为您需要为数据集中的数据源提供有效凭据 .

所以我去管理数据源 . 单击“编辑凭据” . 选择“匿名”身份验证方法,然后单击“登录”并显示“登录失败” .

为什么会这样?当我上传Excel工作簿时,似乎丢失了 Headers . 我怎么能做到这一点?有没有其他方法可以设置可以刷新的数据集 - 源是一个Web服务?

2 回答

  • 1

    这就是我最终做到的 .

    我的情景第一:

    • 我的请求是POST

    • 身份验证是通过承载令牌进行的,需要通过请求头传递 . 这是我试图调用的复制子服务的要求,我无法改变

    • 在PowerBI中创建的数据集需要可刷新 .

    由于我无法让它直接从PowerBI内部工作,我引入了一个中间层 . 这将解释来自PowerBI的GET请求 . 处理来自查询字符串的令牌 . 接受服务和操作也作为查询字符串参数 . 然后它会创建对Real Service的POST请求(在我的情况下是复制服务) . 服务名称和操作名称也从请求URL中获取 . 令牌被推送为请求标头的一部分

    所以来自PowerBI的请求看起来像PowerBI所需,即

    Web.Contents("https://intermediatelayer.com?access_token="*validtoken*"&ServiceName="ClientService"&Operation="GetActiveClients"")
    

    不是理想的解决方案,但有效 .

  • 0

    正如您所建议的那样,管理数据源正在使用对URL的GET请求验证匿名凭据,而不使用硬编码头 . 它基本上都在运行

    Web.Contents("https://na2.replicon.com/services/ClientService1.svc/GetActiveClients")
    

    因“(405):方法不允许”而失败,因此管理数据源认为凭据错误 .

    如果没有通过上述M的成功响应进行服务回复,我看不到有任何方法可以在此mashup上设置刷新 .

相关问题