2016-06-14 159 views
1

我正在嘗試使用Power BI桌面連接到使用CRM的新Web API方法的CRM Online(2016 Spring Wave 1)實例。Power BI連接到CRM 2016 Web API

當我把我的API到瀏覽器Chrome等我得到的返回結果。例如,如果我用https://xxx.crm.dynamics.com/api/data/v8.0/my_records?$select=my_recordid我可以看到被列出的所有結果(5000批次)

然而,當我嘗試在PowerBI同樣的事情,我得到一個錯誤,告訴我,一個場已經存在(見截圖)

PowerBI error screenshot

我已經看到了一些辦法,其中URL被包裹

= Json.Document(Web.Contents("<same url as above>") 

,但這似乎不是一個好辦法,我不知道如何使用分頁這種方法。

所以有沒有人設法讓權力與商業智能的新的Web API調用的工作?

回答

2

我創建了一個新的CRM在線試用實例,並使用電力BI中的WebAPI URL(https://xxx.crm.dynamics.com/api/data/v8.0/my_records?$select=my_recordid)這一次,它的工作重試。

它必須是與我有到位的定製。

另外,我注意到,即使我包括在我的WebAPI請求$select=my_recordid過濾器,即PowerBI仍然加載所有列的名稱;不過,只有在我的過濾器中指定的列纔有值。

這可以解釋爲什麼當我指定的$select

0

的單一屬性,我起步比較晚對這個問題甚至發生錯誤,但我已經與「Json.Document(網絡良好的成功。內容())「方法。分頁問題的竅門是將這個調用包裝在一個遞歸函數中。爲了方便起見,我已經封裝了遞歸函數,以便我可以傳入保存視圖/高級查找的名稱並獲取該查詢的結果。

其要點是:https://gist.github.com/d4hines/b5d9900fc1ea9d26311d2145505837cb

(OrgUrl as text, QueryName as text, UserView as logical) => 
let 

GetQueryByName = 
    //https://mycrm.mydomain.com/MYORG 
    (OrgUrl as text, QueryName as text, UserView as logical) => 
     let 
      QueryType = if UserView then "user" else "saved" 
      ,return = OData.Feed(
        OrgUrl & "/api/data/v8.0/" & QueryType & "queries?$select="& QueryType & "queryid&$filter=name eq '" & QueryName & "'" 
       )[userqueryid]{0} 

     in 
      return, 
QueryAll = 
    (nextURL, prev) => 
     let 
      prevList = if prev <> null then prev else {}, 
      responseData = Json.Document(Web.Contents(nextURL, [Headers=[Prefer="odata.include-annotations=""OData.Community.Display.V1.FormattedValue"""]])), 
      return = if responseData[#"@odata.nextLink"]? <> null then @QueryAll(responseData[#"@odata.nextLink"], prevList & responseData[value]) else responseData[value] & prevList 
     in return, 
NamedQuery = OrgUrl & "/api/data/v8.0/contacts?userQuery=" & GetQueryByName(OrgUrl, QueryName, UserView), 
return = Table.FromList(QueryAll(NamedQuery, null), Splitter.SplitByNothing(), null, null, ExtraValues.Error) 
in return 

上有依據更多的指令是否有幫助。希望它能幫助別人!