Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

The Power BI Data Visualization World Championships is back! Get ahead of the game and start preparing now! Learn more

Reply
johanhallin
Frequent Visitor

Import JIRA Custom Fields using Powerbi's JIRA Connector

Hi,

I have been using Power Bi for a month or so now and really love it. I have managed to set up a couple of reports/dashboards using the Jira PowerBi content pack and it works great. I have change some of the custom fields to new once using the Jira field Id and get the values into Power Bi properly.

 

First question:

For some columns I get the "Expand" option from the dropdown menu in the graphical interface for editing the query, but for one column (Incident Classification, custom field), I only see "null" values and therefore don't get the expand option. But I know there are [Record] values in that column (it is shown as [Record] in the report). How can I expand that column some how? In Jira it is a custom field where only one value can be selected (from a drop down), so I assume there should be a "name" value in the record to be expanded and shown in the report. Any ideas on how to expand this field?

 

Second question:

I'm running the "Time to SLA" plugin in Jira and then manage to import the cusotm field for "SLA Overdue". Power Bi returns a [List] value. The list contains a text like "P2 Resolution: 2d 4h 30min 12s". I assume it could contains two (or more) values on the same format. I would like to have the list transformed to text format, maybe seperated by some delimiter, but I can't get it to work. I tried changing type but then when getting the data from Jira, I get a lot of errors. Any ideas?

 

Information about my setup

We run Jira on premisis. I'm not that interested in running things in the cloud due to privacy regulations.

 

I don't really understand the advanced query that much but managed to manipulate it a bit to get my custom fields etc. The advanced edit query looks like this:

 

let
    Source = FetchPages("", 500),
    #"Expanded Column1" = Table.ExpandRecordColumn(Source, "Column1", {"expand", "id", "self", "key", "fields"}, {"expand", "id", "self", "key", "fields"}),
    #"Expanded fields" = Table.ExpandRecordColumn(#"Expanded Column1", "fields", {"issuetype", "timespent", "project", "fixVersions", "customfield_10110", "customfield_10111", "aggregatetimespent", "resolution", "customfield_10530", "customfield_14202", "customfield_10511", "customfield_15118", "customfield_10105", "customfield_10106", "customfield_10107", "customfield_10108", "customfield_10109", "resolutiondate", "workratio", "lastViewed", "watches", "created", "priority", "customfield_10100", "customfield_10101", "customfield_10102", "customfield_10103", "labels", "timeestimate", "aggregatetimeoriginalestimate", "versions", "issuelinks", "assignee", "updated", "status", "components", "timeoriginalestimate", "description", "customfield_10006", "customfield_10009", "aggregatetimeestimate", "summary", "creator", "subtasks", "reporter", "customfield_10000", "aggregateprogress", "customfield_10001", "customfield_10004", "customfield_10115", "customfield_10116", "customfield_10117", "environment", "customfield_10118", "customfield_10119", "duedate", "progress", "votes", "parent", "customfield_10005", "customfield_10007", "customfield_10008", "customfield_10002", "customfield_10003"}, {"issuetype", "timespent", "project", "fixVersions", "customfield_10110", "customfield_10111", "aggregatetimespent", "resolution", "customfield_10112", "customfield_10113", "customfield_10114", "customfield_10104", "customfield_10105", "customfield_10106", "customfield_10107", "customfield_10108", "customfield_10109", "resolutiondate", "workratio", "lastViewed", "watches", "created", "priority", "customfield_10100", "customfield_10101", "customfield_10102", "customfield_10103", "labels", "timeestimate", "aggregatetimeoriginalestimate", "versions", "issuelinks", "assignee", "updated", "status", "components", "timeoriginalestimate", "description", "customfield_10006", "customfield_10009", "aggregatetimeestimate", "summary", "creator", "subtasks", "reporter", "customfield_10000", "aggregateprogress", "customfield_10001", "customfield_10004", "customfield_10115", "customfield_10116", "customfield_10117", "environment", "customfield_10118", "customfield_10119", "duedate", "progress", "votes", "parent", "customfield_10005", "customfield_10007", "customfield_10008", "customfield_10002", "customfield_10003"}),
    #"Expanded components" = Table.ExpandListColumn(#"Expanded fields", "components"),
    #"Expanded components1" = Table.ExpandRecordColumn(#"Expanded components", "components", {"name"}, {"components.name"}),
    #"Expanded fixVersions" = Table.ExpandListColumn(#"Expanded components1", "fixVersions"),
    #"Expanded fixVersions1" = Table.ExpandRecordColumn(#"Expanded fixVersions", "fixVersions", {"name"}, {"fixVersions.name"}),
    #"Removed Columns" = Table.RemoveColumns(#"Expanded fixVersions1",{"expand"}),
    #"Filtered Rows" = Table.SelectRows(#"Removed Columns", each [id] <> null and [id] <> ""),
    #"Expanded issuetype" = Table.ExpandRecordColumn(#"Filtered Rows", "issuetype", {"name", "subtask"}, {"issuetype.name", "issuetype.subtask"}),
    #"Renamed Columns" = Table.RenameColumns(#"Expanded issuetype",{{"issuetype.name", "issuetype"}, {"issuetype.subtask", "isSubtask"}}),
    #"Expanded project" = Table.ExpandRecordColumn(#"Renamed Columns", "project", {"id", "key", "name"}, {"project.id", "project.key", "project.name"}),
    #"Expanded watches" = Table.ExpandRecordColumn(#"Expanded project", "watches", {"isWatching"}, {"isWatching"}),
    #"Expanded priority" = Table.ExpandRecordColumn(#"Expanded watches", "priority", {"name"}, {"name"}),
    #"Renamed Columns1" = Table.RenameColumns(#"Expanded priority",{{"name", "priority"}}),
    #"Removed Columns2" = Table.RemoveColumns(#"Renamed Columns1",{"customfield_10102"}),
    #"Expanded labels" = Table.ExpandListColumn(#"Removed Columns2", "labels"),
    #"Removed Columns3" = Table.RemoveColumns(#"Expanded labels",{"labels", "versions", "issuelinks"}),
    #"Expanded assignee" = Table.ExpandRecordColumn(#"Removed Columns3", "assignee", {"name", "emailAddress", "displayName", "active"}, {"assignee.name", "assignee.emailAddress", "assignee.displayName", "assignee.active"}),
    #"Renamed Columns2" = Table.RenameColumns(#"Expanded assignee",{{"assignee.displayName", "assignee"}, {"resolutiondate", "resolution date"}}),
    #"Expanded status" = Table.ExpandRecordColumn(#"Renamed Columns2", "status", {"name", "statusCategory"}, {"status.name", "status.statusCategory"}),
    #"Expanded status.statusCategory" = Table.ExpandRecordColumn(#"Expanded status", "status.statusCategory", {"colorName", "name"}, {"status.statusCategory.colorName", "status.statusCategory.name"}),
    #"Removed Columns4" = Table.RemoveColumns(#"Expanded status.statusCategory",{"subtasks"}),
    #"Expanded reporter" = Table.ExpandRecordColumn(#"Removed Columns4", "reporter", {"name", "emailAddress", "displayName", "active"}, {"reporter.name", "reporter.emailAddress", "reporter.displayName", "reporter.active"}),
    #"Expanded aggregateprogress" = Table.ExpandRecordColumn(#"Expanded reporter", "aggregateprogress", {"progress", "total"}, {"aggregateprogress.progress", "aggregateprogress.total"}),
    #"Expanded progress" = Table.ExpandRecordColumn(#"Expanded aggregateprogress", "progress", {"progress", "total"}, {"progress.progress", "progress.total"}),
    #"Expanded votes" = Table.ExpandRecordColumn(#"Expanded progress", "votes", {"votes"}, {"votes.votes"}),
    #"Expanded parent" = Table.ExpandRecordColumn(#"Expanded votes", "parent", {"id"}, {"parent.id"}),
    #"Changed Type" = Table.TransformColumnTypes(#"Expanded parent",{{"resolution date", type datetimezone}, {"created", type datetimezone}, {"updated", type datetimezone}}),
    #"Inserted Date" = Table.AddColumn(#"Changed Type", "Date", each DateTime.Date([resolution date]), type date),
    #"Renamed Columns3" = Table.RenameColumns(#"Inserted Date",{{"Date", "Resolution Day"}}),
    #"Inserted End of Week" = Table.AddColumn(#"Renamed Columns3", "EndOfWeek", each Date.EndOfWeek([Resolution Day]), type date),
    #"Renamed Columns4" = Table.RenameColumns(#"Inserted End of Week",{{"EndOfWeek", "Resolution Week"}}),
    #"Inserted Date1" = Table.AddColumn(#"Renamed Columns4", "Date", each DateTime.Date([created]), type date),
    #"Renamed Columns5" = Table.RenameColumns(#"Inserted Date1",{{"Date", "Created Day"}}),
    #"Inserted End of Week1" = Table.AddColumn(#"Renamed Columns5", "EndOfWeek", each Date.EndOfWeek([Created Day]), type date),
    #"Renamed Columns6" = Table.RenameColumns(#"Inserted End of Week1",{{"EndOfWeek", "Created Week"}}),
    #"Expanded customfield_10112" = Table.ExpandRecordColumn(#"Renamed Columns6", "customfield_10112", {"value"}, {"customfield_10112.value"}),
    #"Renamed Columns7" = Table.RenameColumns(#"Expanded customfield_10112",{{"customfield_10112.value", "customer.value"}, {"customfield_10113", "SLA_Overdue"}, {"customfield_10114", "Product_Area"}}),
    #"Expanded Product_Area" = Table.ExpandRecordColumn(#"Renamed Columns7", "Product_Area", {"value"}, {"Product_Area.value"}),
    #"Removed Columns1" = Table.RemoveColumns(#"Expanded Product_Area",{"customfield_10003", "customfield_10002", "customfield_10008", "customfield_10007", "customfield_10005"}),
    #"Renamed Columns8" = Table.RenameColumns(#"Removed Columns1",{{"customfield_10104", "Incident_Classification"}}),
    #"Removed Columns5" = Table.RemoveColumns(#"Renamed Columns8",{"customfield_10110", "customfield_10111"}),
    #"Expanded resolution" = Table.ExpandRecordColumn(#"Removed Columns5", "resolution", {"name"}, {"resolution.name"})
in
    #"Expanded resolution"

It's very time consuming to test changes since Power Bi always seems to get all issues and we have around 350 000 issues in Jira so it takes a couple of hours to get the data. For now, I just want to solved my questions below and then I can get this report to the management board and then get a lot more allocated time to work with Power Bi, it has extremely good potential within our company.

 

Please let me know if you have any ideas or questions!

Kind regards, johan

 

 

 

 

1 ACCEPTED SOLUTION
Anonymous
Not applicable

@johanhallin,

Do you want to directly transform the list to Text and split Text without "Extract values"? If so, I am afraid that it is not possible.

Regards,
Lydia

View solution in original post

5 REPLIES 5
johanhallin
Frequent Visitor

I managed to clean up the advanced editor today after reading this post: https://community.powerbi.com/t5/Service/Import-JIRA-Custom-Fields-using-Powerbi-s-JIRA-Connector/t...

 

Here is the new query that seesm to work (waiting for the final update).

let
    Source = FetchPages("", 500),
    #"Expanded Column1" = Table.ExpandRecordColumn(Source, "Column1", {"expand", "id", "self", "key", "fields"}, {"expand", "id", "self", "key", "fields"}),
    #"Expanded fields" = Table.ExpandRecordColumn(#"Expanded Column1", "fields", 

{"issuetype", "timespent", "project", "fixVersions", "aggregatetimespent", "resolution", "customfield_10530", "customfield_14202", "customfield_10511", "customfield_15118", "resolutiondate", "workratio", "lastViewed", "watches", "created", "priority", "labels", "timeestimate", "aggregatetimeoriginalestimate", "versions", "issuelinks", "assignee", "updated", "status", "components", "timeoriginalestimate", "description", "aggregatetimeestimate", "summary", "creator", "subtasks", "reporter", "aggregateprogress", "environment", "duedate", "progress", "votes", "parent"}, 

{"issuetype", "timespent", "project", "fixVersions", "aggregatetimespent", "resolution", "Customer", "Overdue_Status", "Product_Area", "Incident_classification", "resolutiondate", "workratio", "lastViewed", "watches", "created", "priority", "labels", "timeestimate", "aggregatetimeoriginalestimate", "versions", "issuelinks", "assignee", "updated", "status", "components", "timeoriginalestimate", "description", "aggregatetimeestimate", "summary", "creator", "subtasks", "reporter", "aggregateprogress", "environment", "duedate", "progress", "votes", "parent"}),
 

   #"Expanded components" = Table.ExpandListColumn(#"Expanded fields", "components"),
    #"Expanded components1" = Table.ExpandRecordColumn(#"Expanded components", "components", {"name"}, {"components.name"}),
    #"Expanded fixVersions" = Table.ExpandListColumn(#"Expanded components1", "fixVersions"),
    #"Expanded fixVersions1" = Table.ExpandRecordColumn(#"Expanded fixVersions", "fixVersions", {"name"}, {"fixVersions.name"}),
    #"Removed Columns" = Table.RemoveColumns(#"Expanded fixVersions1",{"expand"}),
    #"Filtered Rows" = Table.SelectRows(#"Removed Columns", each [id] <> null and [id] <> ""),
    #"Expanded issuetype" = Table.ExpandRecordColumn(#"Filtered Rows", "issuetype", {"name", "subtask"}, {"issuetype.name", "issuetype.subtask"}),
    #"Renamed Columns" = Table.RenameColumns(#"Expanded issuetype",{{"issuetype.name", "issuetype"}, {"issuetype.subtask", "isSubtask"}}),
    #"Expanded project" = Table.ExpandRecordColumn(#"Renamed Columns", "project", {"id", "key", "name"}, {"project.id", "project.key", "project.name"}),
    #"Expanded watches" = Table.ExpandRecordColumn(#"Expanded project", "watches", {"isWatching"}, {"isWatching"}),
    #"Expanded priority" = Table.ExpandRecordColumn(#"Expanded watches", "priority", {"name"}, {"name"}),
    #"Renamed Columns1" = Table.RenameColumns(#"Expanded priority",{{"name", "priority"}}),
    #"Expanded labels" = Table.ExpandListColumn(#"Renamed Columns1", "labels"),
    #"Removed Columns3" = Table.RemoveColumns(#"Expanded labels",{"labels", "versions", "issuelinks"}),
    #"Expanded assignee" = Table.ExpandRecordColumn(#"Removed Columns3", "assignee", {"name", "emailAddress", "displayName", "active"}, {"assignee.name", "assignee.emailAddress", "assignee.displayName", "assignee.active"}),
    #"Renamed Columns2" = Table.RenameColumns(#"Expanded assignee",{{"assignee.displayName", "assignee"}, {"resolutiondate", "resolution date"}}),
    #"Expanded status" = Table.ExpandRecordColumn(#"Renamed Columns2", "status", {"name", "statusCategory"}, {"status.name", "status.statusCategory"}),
    #"Expanded status.statusCategory" = Table.ExpandRecordColumn(#"Expanded status", "status.statusCategory", {"colorName", "name"}, {"status.statusCategory.colorName", "status.statusCategory.name"}),
    #"Removed Columns4" = Table.RemoveColumns(#"Expanded status.statusCategory",{"subtasks"}),
    #"Expanded reporter" = Table.ExpandRecordColumn(#"Removed Columns4", "reporter", {"name", "emailAddress", "displayName", "active"}, {"reporter.name", "reporter.emailAddress", "reporter.displayName", "reporter.active"}),
    #"Expanded aggregateprogress" = Table.ExpandRecordColumn(#"Expanded reporter", "aggregateprogress", {"progress", "total"}, {"aggregateprogress.progress", "aggregateprogress.total"}),
    #"Expanded progress" = Table.ExpandRecordColumn(#"Expanded aggregateprogress", "progress", {"progress", "total"}, {"progress.progress", "progress.total"}),
    #"Expanded votes" = Table.ExpandRecordColumn(#"Expanded progress", "votes", {"votes"}, {"votes.votes"}),
    #"Expanded parent" = Table.ExpandRecordColumn(#"Expanded votes", "parent", {"id"}, {"parent.id"}),
    #"Changed Type" = Table.TransformColumnTypes(#"Expanded parent",{{"resolution date", type datetimezone}, {"created", type datetimezone}, {"updated", type datetimezone}}),
    #"Expanded resolution" = Table.ExpandRecordColumn(#"Changed Type", "resolution", {"name"}, {"resolution.name"}),
    #"Expanded Customer" = Table.ExpandRecordColumn(#"Expanded resolution", "Customer", {"value"}, {"Customer.value"}),
    #"Expanded Incident_Classification" = Table.ExpandRecordColumn(#"Expanded Customer", "Incident_classification", {"value"}, {"Incident_classification.value"}), 
   #"Expanded Product_Area" = Table.ExpandRecordColumn(#"Expanded Incident_Classification", "Product_Area", {"value"}, {"Product_Area.value"})
in
    #"Expanded Product_Area"

The "Incident_Clarification fields that was a [Record] (question 1) seems to be expanded now but I have not solved question 2 ([List] problem for SLA_Overdue yet...

 

Kind regard,

Johan

Anonymous
Not applicable

@johanhallin,

Extract value from the list column and then use "Split column" feature in Power BI, you can review the following screenshots.
1.JPG2.JPG3.JPG

If you have any questions, please post sample data of the list column. Do mask sensitive data before uploading sample data.

Regards,
Lydia

Hi,

that could work but I don't really like it. The problem is that I don't know how many items there is in the list. 95% of the time, it would be just one value. But it could be two values. In the future it could be many more values depending on how we set it up in Jira.

 

The values are text strings structured as:
"P1 Response: 1d 2h 32m 34s"

"P2 Resolution: 32d 14h 2m 12s".

 

So I would prefer the values to be translated to a text (string), maybe with seperated by a colon or semi-colon or something. Is that possible?

Anonymous
Not applicable

@johanhallin,

Do you want to directly transform the list to Text and split Text without "Extract values"? If so, I am afraid that it is not possible.

Regards,
Lydia

Ahh...ok! To bad but now I know that I'm not missing anything. I'll take a look at the extract values or maybe to do the calculations based on some extra dates instead to get the same information in Power BI without importing my cusotm field from Jira. 

 

Thanks for replies!

 

Kind regards, Johan

Helpful resources

Announcements
Power BI DataViz World Championships

Power BI Dataviz World Championships

The Power BI Data Visualization World Championships is back! Get ahead of the game and start preparing now!

November Power BI Update Carousel

Power BI Monthly Update - November 2025

Check out the November 2025 Power BI update to learn about new features.

FabCon Atlanta 2026 carousel

FabCon Atlanta 2026

Join us at FabCon Atlanta, March 16-20, for the ultimate Fabric, Power BI, AI and SQL community-led event. Save $200 with code FABCOMM.