PowerBI调用Azure DevOps OData查询未显示关联工作项链接
问题描述
使用微软官方示例查询Azure DevOps工作项及关联项时,仅返回父项(Epic),未显示关联的Feature子项。代码原本旨在获取Feature类型工作项及其子User Story,但实际结果不符合预期。
原代码
let Source = OData.Feed ("https://analytics.dev.azure.com/{organization}/{project}/_odata/v3.0-preview/WorkItems?" &"$filter=WorkItemType eq 'Feature' " &"and State ne 'Closed' and State ne 'Removed' " &"and startswith(Area/AreaPath,'{areapath}') " &"&$select=WorkItemId,Title,WorkItemType,State,AreaSK " &"&$expand=AssignedTo($select=UserName),Iteration($select=IterationPath),Area($select=AreaPath), " &"Links( " &"$filter=LinkTypeName eq 'Child' " &"and TargetWorkItem/WorkItemType eq 'User Story'; " &"$select=LinkTypeName; " &"$expand=TargetWorkItem($select=WorkItemType,WorkItemId,Title,State) " &") " ,null, [Implementation="2.0",OmitValues = ODataOmitValues.Nulls,ODataVersion = 4]) in Source
解决步骤
替换占位符并验证筛选条件
- 将代码中的
{organization}、{project}、{areapath}替换为实际的Azure DevOps组织名、项目名和区域路径。 - 确认
WorkItemType eq 'Feature'的拼写与Azure DevOps中工作项类型的名称完全一致(区分大小写),避免因名称不匹配筛选出错误的工作项(比如Epic)。 - 检查
startswith(Area/AreaPath,'{areapath}')的区域路径是否正确,确保不会意外匹配到包含Epic的路径。
- 将代码中的
验证链接筛选逻辑
- 确认Feature工作项确实存在关联的User Story子项:在Azure DevOps门户中检查对应Feature的链接,确保有已创建的User Story作为其子项。
- 确认链接类型名称正确:Azure DevOps中父子链接的类型名称为
Child(父项指向子项时),原代码中的LinkTypeName eq 'Child'是正确的,反向查询子项查父项才需要用Parent。
展开嵌套的Links列
- 在Power Query编辑器中,查询结果的
Links列是嵌套表,默认不会自动展开。点击Links列右侧的展开按钮,选择TargetWorkItem相关字段,即可显示关联的User Story子项信息。
- 在Power Query编辑器中,查询结果的
检查OData查询语法
- 确保
$expand部分的语法正确:原代码中Links的筛选、选择和展开语句使用分号分隔符合OData规范,避免多余空格或符号导致解析错误。可以将完整的OData URL复制到浏览器中直接访问,查看返回的JSON数据是否包含Links字段及对应的TargetWorkItem内容,验证查询本身是否有效。
- 确保
内容的提问来源于stack exchange,提问作者user23314406
相关产品推荐
相关产品推荐

