Power BI未显示Azure OData所有层级数据的配置问询
解决Power BI中Azure Analytics OData多级关联记录展示问题
Power BI默认只会展开OData查询中$expand指定的第一层级关联数据,要获取完整的多级父级及关联记录,可通过以下两种方式配置:
方法一:修改OData查询的嵌套展开参数
如果只需要固定层级的关联数据,可以在原查询的$expand中嵌套展开关联项。比如要展开两级关联,修改后的查询URL如下:
https://analytics.dev.azure.com/XXXX/XXX/_odata/v4.0-preview/WorkItems?$select=WorkItemId,Title,WorkItemType,State&$filter=WorkItemId%20eq%20431622&$expand=Links($select=SourceWorkItemId,TargetWorkItemId,LinkTypeName;$expand=Links($select=SourceWorkItemId,TargetWorkItemId,LinkTypeName))
这种方式适合层级较少的场景,层级过多时需要手动嵌套多次,灵活性较差。
方法二:用Power Query递归函数加载全层级数据
对于不确定层级数量的场景,推荐使用Power Query的递归函数自动遍历所有关联记录,步骤如下:
- 导入初始数据:在Power BI中通过「数据>获取数据>从OData源」导入原查询的结果,进入Power Query编辑器。
- 创建递归函数:新建空白查询,打开高级编辑器,粘贴以下代码(替换
XXXX和XXX为你的组织名和项目名):
let GetRelatedWorkItems = (workItemId as number) as table => let url = "https://analytics.dev.azure.com/XXXX/XXX/_odata/v4.0-preview/WorkItems?$select=WorkItemId,Title,WorkItemType,State&$filter=WorkItemId in (select TargetWorkItemId from Links where SourceWorkItemId eq " & Text.From(workItemId) & ") or WorkItemId in (select SourceWorkItemId from Links where TargetWorkItemId eq " & Text.From(workItemId) & ")", source = OData.Feed(url), relatedItems = Table.AddColumn(source, "RelatedItems", each try GetRelatedWorkItems([WorkItemId]) otherwise null), expandedRelated = Table.ExpandTableColumn(relatedItems, "RelatedItems", {"WorkItemId", "Title", "WorkItemType", "State", "RelatedItems"}, {"Related_WorkItemId", "Related_Title", "Related_WorkItemType", "Related_State", "Related_RelatedItems"}) in expandedRelated in GetRelatedWorkItems
- 关联递归数据:回到初始的WorkItems表,添加自定义列,调用
GetRelatedWorkItems([WorkItemId]),然后逐步展开所有嵌套的关联列,即可获取完整的多级关联数据。
注意:使用递归函数时需注意Azure DevOps Analytics的API调用限制,避免因频繁请求触发限流。
内容的提问来源于stack exchange,提问作者robson Zimmermann
相关产品推荐
相关产品推荐

