我正在尝试获取与Visual Studio Team Services板相关的所有工作项。
我很惊讶Microsoft在此处发布的API中没有“获取所有工作项”查询:https://www.visualstudio.com/en-us/docs/integrate/api/wit/work-items
因此,我在VSTS中创建了一个自定义查询,从中获取当前sprint中的所有工作项。
问题是Power BI将结果显示如下:
这很可悲,因为我必须导航到List =>转换为表=>展开列,并发现它显示的唯一内容是ID和URL:
我需要进入网址并抓住每个网址中的字段,如下所示:
但这似乎并不那么简单。 我不能像在示例中那样为每个元素指定ID,因为这不可扩展: https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/wit/workitems?ids=297,299,300&api-version=1.0
我需要迭代所有元素的id,将它与查询末尾的URL组合/连接,这样我就可以访问底层字段了。
我试图通过部分成功来做到这一点:
如果我点击“记录”,它会通过其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