通过API迭代并在Power BI中的Power Query中提取字段

时间:2016-08-24 22:07:33

标签: powerbi dax powerquery

我正在尝试获取与Visual Studio Team Services板相关的所有工作项。

我很惊讶Microsoft在此处发布的API中没有“获取所有工作项”查询:https://www.visualstudio.com/en-us/docs/integrate/api/wit/work-items

因此,我在VSTS中创建了一个自定义查询,从中获取当前sprint中的所有工作项。

问题是Power BI将结果显示如下:

enter image description here

这很可悲,因为我必须导航到List =>转换为表=>展开列,并发现它显示的唯一内容是ID和URL:

enter image description here

我需要进入网址并抓住每个网址中的字段,如下所示:

enter image description here

但这似乎并不那么简单。 我不能像在示例中那样为每个元素指定ID,因为这不可扩展: https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/wit/workitems?ids=297,299,300&api-version=1.0

我需要迭代所有元素的id,将它与查询末尾的URL组合/连接,这样我就可以访问底层字段了。

我试图通过部分成功来做到这一点:

enter image description here

如果我点击“记录”,它会通过其ID向我提供指定工作项内的字段。这一切都很好,但我无法增加数量。只有第一行成功,所有其他行都保留为“null”。

我尝试编写一些Power Query并查看DataChant给出的示例: 使用Power Query迭代动态Web API页面 - 如何解决基于游标的分页 - DataChant

这几乎与我尝试的完全相同,但我对Power Query没有经验。

如何修复此问题?

这是我的代码:

    let    Source = Json.Document(Web.Contents("https://dxno.visualstudio.com/DefaultCollection/DX/_apis/wit/wiql/222fd0c3-5ae6-4fad-86e8-23b0fa5fc6e7?api-version=2.2")),
    workItems = Source[workItems],
    #"Converted to Table" = Table.FromList(workItems, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    #"Expanded Column1" = Table.ExpandRecordColumn(#"Converted to Table", "Column1", {"id", "url"}, {"Column1.id", "Column1.url"}),
    #"Removed Columns" = Table.RemoveColumns(#"Expanded Column1",{"Column1.url"}),
    #"Renamed Columns" = Table.RenameColumns(#"Removed Columns",{{"Column1.id", "itemNumber"}}),
    #"Changed Type" = Table.TransformColumnTypes(#"Renamed Columns",{{"itemNumber", Int64.Type}}),
    itemNumber = #"Changed Type"[itemNumber],

    min = List.Min(itemNumber),
    max = List.Max(itemNumber),
    Variance = max-min,
    CountOfLoops = Number.ToText(Variance),


    iterations = Variance,
    url = Text.Combine({"https://dxno.visualstudio.com/DefaultCollection/_apis/wit/workItems/", CountOfLoops}, ""), 

FnGetOnePage =
  (url) as record =>
   let
    Sourcie = Json.Document(Web.Contents(url)),
    fields = try Sourcie[fields] otherwise null,
    res = [Data=fields]
   in
    res,

 GeneratedList =
  List.Generate(()=>[i=0, res = FnGetOnePage(url)], 
   each [i]null,
   each [i=[i]+1, res = FnGetOnePage([res])],
   each [res][Data])
in

    GeneratedList

0 个答案:

没有答案