Power BI中加载所选Jira项目对应版本的实现难题求助
问题描述
我已连接到Jira Cloud实例,并通过以下名为LoadReleases的查询将所有项目及其ID加载到Power BI的表格中:
let apiUrl="http://my-jira-instance.atlassian.net/rest/api/3/", auth = "Basic " & Binary.ToText(Text.ToBinary(JiraUsername & ":" & JiraApiKey),BinaryEncoding.Base64), headers = [#"Content-Type"="application/json",#"Authorization"=auth], response = Json.Document(Web.Contents(apiUrl &"project", [Headers=headers])), #"Converted to Table" = Table.FromList(response, Splitter.SplitByNothing(), null, null, ExtraValues.Error), #"Expanded Column1" = Table.ExpandRecordColumn(#"Converted to Table", "Column1", {"key", "name"}, {"Column1.key", "Column1.name"}), #"Renamed Columns" = Table.RenameColumns(#"Expanded Column1",{{"Column1.key", "ProjectKey"}, {"Column1.name", "ProjectName"}}) in #"Renamed Columns"
(注:原代码中JirApiUrl为笔误,已修正为apiUrl)
这段查询生成的表格如下:
| ProjectKey | ProjectName |
|---|---|
| ID-1 | My First Project |
| ID-2 | My Second Project |
我希望实现:选择一个项目后,通过另一个查询加载该项目的所有版本。参考代码示例(Excel中可正常运行)如下:
selectedProjectjKey = <<Get the selected project ID here somehow>> response = Json.Document(Web.Contents(apiUrl &"project/" & selectedProjectjKey &"/version",[Headers=headers])),
我尝试用度量值SelectedProject = SELECTEDVALUE(LoadReleases[ProjectKey]),但无法在第二个查询中访问该值,可能思路有误,求帮助或建议。
解决方案
方法一:用参数实现动态加载(需手动刷新)
1. 创建项目选择参数
- 进入Power Query编辑器,点击「主页」→「管理参数」→「新建参数」:
- 名称:
SelectedProjectKey - 类型:文本
- 允许的值:列表
- 从查询获取值:选择
LoadReleases,值列选ProjectKey,显示列选ProjectName - 默认值:可设为任意项目Key(如
ID-1)
- 名称:
2. 新建加载版本的查询
新建空白查询并命名为ProjectVersions,输入以下代码:
let apiUrl="http://my-jira-instance.atlassian.net/rest/api/3/", auth = "Basic " & Binary.ToText(Text.ToBinary(JiraUsername & ":" & JiraApiKey),BinaryEncoding.Base64), headers = [#"Content-Type"="application/json",#"Authorization"=auth], selectedProjectKey = SelectedProjectKey, // 引用创建的参数 response = Json.Document(Web.Contents(apiUrl & "project/" & selectedProjectKey & "/version", [Headers=headers])), #"Converted to Table" = Table.FromList(response, Splitter.SplitByNothing(), null, null, ExtraValues.Error), #"Expanded Column1" = Table.ExpandRecordColumn(#"Converted to Table", "Column1", {"id", "name", "releaseDate", "archived", "released"}, {"VersionID", "VersionName", "ReleaseDate", "IsArchived", "IsReleased"}) in #"Expanded Column1"
3. 前端选择并刷新
返回报表视图,在「建模」面板勾选「显示参数切片器」,通过切片器选择项目后,点击「刷新」即可加载对应版本数据。
方法二:用自定义函数实现实时筛选
1. 创建自定义版本查询函数
新建空白查询并命名为GetProjectVersions,输入:
(projectKey as text) as table => let apiUrl="http://my-jira-instance.atlassian.net/rest/api/3/", auth = "Basic " & Binary.ToText(Text.ToBinary(JiraUsername & ":" & JiraApiKey),BinaryEncoding.Base64), headers = [#"Content-Type"="application/json",#"Authorization"=auth], response = Json.Document(Web.Contents(apiUrl & "project/" & projectKey & "/version", [Headers=headers])), #"Converted to Table" = Table.FromList(response, Splitter.SplitByNothing(), null, null, ExtraValues.Error), #"Expanded Column1" = Table.ExpandRecordColumn(#"Converted to Table", "Column1", {"id", "name", "releaseDate", "archived", "released"}, {"VersionID", "VersionName", "ReleaseDate", "IsArchived", "IsReleased"}) in #"Expanded Column1"
2. 批量加载所有项目版本
打开LoadReleases查询,点击「添加列」→「自定义列」,输入:
GetProjectVersions([ProjectKey])
展开该自定义列,选择需要的版本字段。
3. 用切片器实时筛选
返回报表视图,添加ProjectKey或ProjectName切片器,选择项目后,版本数据会自动筛选出对应内容,无需手动刷新。
为什么之前的方法行不通?
度量值是报表交互阶段的计算值,仅能在报表视图中使用;而Power Query查询属于数据加载阶段,执行时间早于报表交互,因此无法直接访问度量值。
内容的提问来源于stack exchange,提问作者Simon Long
相关产品推荐
相关产品推荐

