You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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)

这段查询生成的表格如下:

ProjectKeyProjectName
ID-1My First Project
ID-2My 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 16:37:46