Monitoring you Jira like a master (eazyBI Community Days 2024 presentation)

Hi folks!

The following attachments are the exported definitions to create the sources and the reports and dashboards to have the data configurations of Jira that were presented in the eazyBI Community Days 2024.

The files can be found here: Bitbucket

  • Source definitions:
    (Some Source Definitions have an order to import to follow)
    (The source URL must be changed to yours Jira URL)
    (The authorization parameters must also be set)

    • Licenses:

      • Jira: folders path source definition → license → Jira license management.txt
      • Confluence:
        • The ammount of Data Sources to add data to the cube will depend on what are the groups defined to grant access to Confluence. Here is an example considering two groups (“site-admins” and “confluence-users”). The groups you are using must be replace in the “groupname” parameter of the Source URL.
          folders path source definition → license → Confluence License Management - Group 1.txt
          folders path source definition → license → Confluence License Management - Group 2.txt
    • Fields:

      • First import this definition: folders path source definition → field → Field Management - Main.txt
      • Then import this defintion to add more data in the cube: folders path source definition → field → Field Management - Complement.txt
    • Issue types:

      • First import this definition: folders path source definition → issue type → Issue Type Managament.txt
      • Then import these other two to add more data in the cube (no specific order):
        folders path source definition → issue type → Issue Type Management - Issue Type Scheme.txt
        folders path source definition → issue type → Issue Type Management - Projects.txt
    • Issue Type Schemes: folders path source definition → issue type scheme → Issue Type Scheme Management.txt

    • Issue Type Screen Schemes: folders path source definition → issue type screen scheme → Issue Type Screen Scheme Management.txt

    • Statuses: folders path source definition → status → Status Management.txt

    • Workflows:

      • Active workflows: folders path source definition → workflow → Workflow Management - Active.txt
      • Inactive workflows: folders path source definition → workflow → Workflow Management - Inactive.txt
    • Workflow Schemes: folders path source definition → workflow scheme → Workflow Scheme Management.txt

  • Dashboard/reports definition: folders path dashboard definitions → Dashboard - Jira Management.txt

Additionaly, I was not being able to create a “history” of those data. The REST API import was always only reflecting the current data of the Jira items configuration.

But thanks to the help of @janis.baiza we are now able to.

He created a custom javascript code that creates a source id column that can be used as a “Source id” to incremental imports.
I’ll now apply this javascript code in each data source and modify the reports. Once I do that I’ll post here the updated files!

Regards,
Rodrigo Kondo Fernandes

3 Likes

Hi @Kondo

Thanks for the write-up, and again, thanks for sharing the use case!

Here’s a follow-up with the setup that includes the incremental import settings to allow you to analyze the data across Time, to see the improvements you’ve made to the Jira instance.

With the incremental import, you can create reports like these:

Important to understand!
This approach uses a workaround for incremental import that will import the same data additionally to the existing one, but will map it to a different time stamp. So, any reports created with this data must also use the Time dimension (or Hour and Minute dimensions if the imports are run more than once a day).

Setting up:
Create a new eazyBI account for all these sources.
When copying a source definition, use a text editor to find and replace all “ecosystem.atlassian.net” links with your Cloud instance links “******.atlassian.net”.

When the links are replaced, do the following:
For each of the data sources, go to the Source Data tab, click “Add new source application” → “Import definition” and paste the definition in the text field.

In the authorization, provide your Email as Username and your Jira API key as Password.

License Management:

{
  "application_type": "rest_api",
  "application_params": {
    "source_params": {
      "url": "https://ecosystem.atlassian.net/rest/api/3/applicationrole",
      "request_method": "get",
      "pagination": "none",
      "page_parameter": "page",
      "page_parameter_in_body": null,
      "offset_parameter": "offset",
      "offset_parameter_in_body": null,
      "limit_parameter": "limit",
      "limit_parameter_in_body": null,
      "incremental": true,
      "incremental_stop_import": null,
      "authentication_type": "basic",
      "content_type": "json",
      "username": "email",
      "custom_javascript_code": "current_date = new Date();\n\ndoc.date = current_date.toISOString().substring(0,10);\ndoc.hour = current_date.getHours();\ndoc.minute = current_date.getMinutes();\ndoc.source_id = doc.key + \"_\" + current_date.toISOString().substring(0,16);"
    },
    "columns_options": { "hide_unmapped": true },
    "extra_options": {
      "regular_import_frequency": 0,
      "regular_import_at": "",
      "time_zone": ""
    }
  },
  "source_cube_name": "License Management",
  "columns": [
    {
      "name": "key",
      "data_type": "string",
      "dimension": "Product",
      "dimension_level": "Product",
      "key_column": true
    },
    {
      "name": "name",
      "data_type": "string",
      "dimension": "Product",
      "dimension_level": "Product",
      "name_column": true
    },
    { "name": "groups", "data_type": "array" },
    { "name": "groupDetails", "data_type": "array" },
    { "name": "defaultGroups", "data_type": "array" },
    { "name": "defaultGroupsDetails", "data_type": "array" },
    { "name": "selectedByDefault", "data_type": "string" },
    { "name": "defined", "data_type": "string" },
    {
      "name": "numberOfSeats",
      "data_type": "integer",
      "dimension": "Measures",
      "dimension_member": "Licenses"
    },
    {
      "name": "remainingSeats",
      "data_type": "integer",
      "dimension": "Measures",
      "dimension_member": "Remaining licenses"
    },
    {
      "name": "userCount",
      "data_type": "integer",
      "dimension": "Measures",
      "dimension_member": "Licenses in use"
    },
    { "name": "userCountDescription", "data_type": "string" },
    { "name": "hasUnlimitedSeats", "data_type": "string" },
    { "name": "platform", "data_type": "string" },
    { "name": "date", "data_type": "date", "dimension": "Time" },
    { "name": "hour", "data_type": "integer", "dimension": "Hour" },
    { "name": "minute", "data_type": "integer", "dimension": "Minute" },
    { "name": "source_id", "data_type": "string", "source_id_column": true }
  ]
}

Fields Management (1):

{
  "application_type": "rest_api",
  "application_params": {
    "source_params": {
      "url": "https://ecosystem.atlassian.net/rest/api/3/field",
      "request_method": "get",
      "pagination": "none",
      "page_parameter": "page",
      "page_parameter_in_body": null,
      "offset_parameter": "offset",
      "offset_parameter_in_body": null,
      "limit_parameter": "limit",
      "limit_parameter_in_body": null,
      "incremental": true,
      "incremental_stop_import": null,
      "authentication_type": "basic",
      "content_type": "json",
      "username": "email",
      "custom_javascript_code": "current_date = new Date();\n\ndoc.date = current_date.toISOString().substring(0,10);\ndoc.hour = current_date.getHours();\ndoc.minute = current_date.getMinutes();\ndoc.source_id = doc.id + \"_\" + current_date.toISOString().substring(0,16);"
    },
    "columns_options": { "hide_unmapped": true },
    "extra_options": {
      "regular_import_frequency": 0,
      "regular_import_at": "",
      "time_zone": ""
    }
  },
  "source_cube_name": "Fields Management",
  "columns": [
    {
      "name": "name",
      "data_type": "string",
      "dimension": "Field",
      "dimension_level": "Field",
      "name_column": true
    },
    {
      "name": "id",
      "data_type": "string",
      "dimension": "Field",
      "dimension_level": "Field",
      "key_column": true
    },
    {
      "name": "custom",
      "data_type": "string",
      "dimension": "Field",
      "dimension_level": "Field",
      "javascript_code": "if (value) {\n  return \"Custom field\"\n} else {\n  return \"Default field\"\n}",
      "property": "Default or Custom field"
    },
    {
      "name": "schema\ntype (1)",
      "source_column_name": "schema\ntype",
      "data_type": "string",
      "dimension": "Field",
      "dimension_level": "Field",
      "property": "Type"
    },
    {
      "name": "custom (1)",
      "source_column_name": "custom",
      "data_type": "string",
      "dimension": "Default or Custom field",
      "dimension_level": "Default or Custom field",
      "javascript_code": "if (doc.custom == \"Custom field\") {\n  return \"Custom field\"\n} else {\n  return \"Default field\"\n}"
    },
    {
      "name": "schema\ntype",
      "data_type": "string",
      "dimension": "Type",
      "dimension_level": "Type"
    },
    { "name": "key", "data_type": "string" },
    { "name": "orderable", "data_type": "string" },
    { "name": "navigable", "data_type": "string" },
    { "name": "searchable", "data_type": "string" },
    { "name": "clauseNames", "data_type": "array" },
    { "name": "schema\nitems", "data_type": "string" },
    { "name": "schema\nsystem", "data_type": "string" },
    { "name": "untranslatedName", "data_type": "string" },
    { "name": "schema\ncustom", "data_type": "string" },
    { "name": "schema\ncustomId", "data_type": "integer" },
    { "name": "scope\ntype", "data_type": "string" },
    { "name": "scope\nproject\nid", "data_type": "integer" },
    { "name": "schema\nconfiguration\nisMulti", "data_type": "string" },
    {
      "name": "Row count",
      "dimension": "Measures",
      "dimension_member": "Custom fields created",
      "data_type": "integer",
      "source_column_name": "(internal)",
      "calculation": "row_count"
    },
    { "name": "date", "data_type": "date", "dimension": "Time" },
    { "name": "hour", "data_type": "integer", "dimension": "Hour" },
    { "name": "minute", "data_type": "integer", "dimension": "Minute" },
    { "name": "source_id", "data_type": "string", "source_id_column": true },
    {
      "name": "schema\nconfiguration\ncom.atlassian.jira.plugin.system.customfieldtypes:atlassian-team",
      "data_type": "string"
    }
  ]
}

Fields Management (2):

{
  "application_type": "rest_api",
  "application_params": {
    "source_params": {
      "url": "https://ecosystem.atlassian.net/rest/api/3/field/search?expand=lastUsed",
      "request_method": "get",
      "pagination": "offset_limit",
      "page_parameter": "page",
      "page_parameter_in_body": null,
      "offset_parameter": "startAt",
      "offset_parameter_in_body": null,
      "limit_parameter": "total",
      "limit_parameter_in_body": null,
      "limit_value": 50,
      "concurrency": 10,
      "incremental": true,
      "incremental_stop_import": null,
      "authentication_type": "basic",
      "content_type": "json",
      "json_data_path": "$.values",
      "username": "email",
      "custom_javascript_code": "current_date = new Date();\n\ndoc.date = current_date.toISOString().substring(0,10);\ndoc.hour = current_date.getHours();\ndoc.minute = current_date.getMinutes();\ndoc.source_id = doc.id + \"_\" + current_date.toISOString().substring(0,16);"
    },
    "columns_options": { "hide_unmapped": true },
    "extra_options": {
      "regular_import_frequency": 0,
      "regular_import_at": "",
      "time_zone": ""
    }
  },
  "source_cube_name": "Fields Management",
  "columns": [
    {
      "name": "id",
      "data_type": "string",
      "dimension": "Field",
      "key_column": true,
      "skip_missing": true,
      "dimension_level": "Field"
    },
    {
      "name": "description",
      "data_type": "text",
      "dimension": "Field",
      "property": "Description",
      "dimension_level": "Field"
    },
    { "name": "name", "data_type": "string" },
    { "name": "schema\ntype", "data_type": "string" },
    { "name": "schema\nitems", "data_type": "string" },
    { "name": "schema\nsystem", "data_type": "string" },
    { "name": "lastUsed\ntype", "data_type": "string" },
    { "name": "schema\ncustom", "data_type": "string" },
    { "name": "schema\ncustomId", "data_type": "integer" },
    {
      "name": "lastUsed\nvalue",
      "data_type": "datetime",
      "dimension": "Field",
      "property": "Last used",
      "dimension_level": "Field"
    },
    { "name": "date", "data_type": "date", "dimension": "Time" },
    { "name": "hour", "data_type": "integer", "dimension": "Hour" },
    { "name": "minute", "data_type": "integer", "dimension": "Minute" },
    { "name": "source_id", "data_type": "string", "source_id_column": true },
    {
      "name": "Row count",
      "dimension": "Measures",
      "dimension_member": "Custom fields created",
      "data_type": "integer",
      "source_column_name": "(internal)",
      "calculation": "row_count"
    }
  ]
}

Issue Type Management (1):

{
  "application_type": "rest_api",
  "application_params": {
    "source_params": {
      "url": "https://ecosystem.atlassian.net/rest/api/3/issuetype",
      "request_method": "get",
      "pagination": "none",
      "page_parameter": "page",
      "page_parameter_in_body": null,
      "offset_parameter": "offset",
      "offset_parameter_in_body": null,
      "limit_parameter": "limit",
      "limit_parameter_in_body": null,
      "incremental": true,
      "incremental_stop_import": null,
      "authentication_type": "basic",
      "content_type": "json",
      "username": "email",
      "custom_javascript_code": "current_date = new Date();\n\ndoc.date = current_date.toISOString().substring(0,10);\ndoc.hour = current_date.getHours();\ndoc.minute = current_date.getMinutes();\ndoc.source_id = doc.id + \"_\" + current_date.toISOString().substring(0,16);"
    },
    "columns_options": { "hide_unmapped": true },
    "extra_options": {
      "regular_import_frequency": 0,
      "regular_import_at": "",
      "time_zone": ""
    }
  },
  "source_cube_name": "Issue Type Management",
  "columns": [
    { "name": "self", "data_type": "string" },
    {
      "name": "id",
      "data_type": "integer",
      "dimension": "IssueType",
      "dimension_level": "IssueType",
      "property": "Key",
      "key_column": true
    },
    {
      "name": "name",
      "data_type": "string",
      "dimension": "IssueType",
      "dimension_level": "IssueType",
      "name_column": true
    },
    {
      "name": "subtask",
      "data_type": "string",
      "dimension": "Is SubTask",
      "dimension_level": "Is SubTask"
    },
    {
      "name": "scope\ntype",
      "data_type": "string",
      "dimension": "Issue Type Scope",
      "javascript_code": "if(value == null){\n  return 'Global'\n}else{\n  return 'Team-managed project'\n}",
      "dimension_level": "Issue Type Scope"
    },
    {
      "name": "Row count",
      "dimension": "Measures",
      "dimension_member": "Row count",
      "data_type": "integer",
      "source_column_name": "(internal)",
      "calculation": "row_count"
    },
    { "name": "description", "data_type": "string" },
    { "name": "iconUrl", "data_type": "string" },
    { "name": "untranslatedName", "data_type": "string" },
    { "name": "avatarId", "data_type": "integer" },
    { "name": "hierarchyLevel", "data_type": "integer" },
    { "name": "scope\nproject\nid", "data_type": "integer" },
    { "name": "date", "data_type": "date", "dimension": "Time" },
    { "name": "hour", "data_type": "integer", "dimension": "Hour" },
    { "name": "minute", "data_type": "integer", "dimension": "Minute" },
    { "name": "source_id", "data_type": "string", "source_id_column": true }
  ]
}

Issue Type Management (2):

{
  "application_type": "rest_api",
  "application_params": {
    "source_params": {
      "url": "https://ecosystem.atlassian.net/rest/api/3/issuetypescheme?expand=issueTypes",
      "request_method": "get",
      "pagination": "offset_limit",
      "page_parameter": "page",
      "page_parameter_in_body": null,
      "offset_parameter": "startAt",
      "offset_parameter_in_body": null,
      "limit_parameter": "total",
      "limit_parameter_in_body": null,
      "limit_value": 50,
      "concurrency": 10,
      "incremental": true,
      "incremental_stop_import": null,
      "authentication_type": "basic",
      "content_type": "json",
      "json_data_path": "$.values",
      "username": "email",
      "custom_javascript_code": "current_date = new Date();\n\ndoc.date = current_date.toISOString().substring(0,10);\ndoc.hour = current_date.getHours();\ndoc.minute = current_date.getMinutes();\ndoc.source_id = doc.id + \"_\" + current_date.toISOString().substring(0,16);"
    },
    "extra_options": {
      "regular_import_frequency": 0,
      "regular_import_at": "",
      "time_zone": "Berlin"
    }
  },
  "source_cube_name": "Issue Type Management",
  "columns": [
    {
      "name": "id",
      "data_type": "integer",
      "dimension": "IssueTypeScheme",
      "dimension_level": "IssueTypeScheme",
      "id_column": true
    },
    {
      "name": "name",
      "data_type": "string",
      "dimension": "IssueTypeScheme",
      "dimension_level": "IssueTypeScheme",
      "name_column": true
    },
    {
      "name": "Issue types in use",
      "data_type": "string",
      "source_column_name": "(internal)",
      "javascript_code": "var issueTypes = doc.issueTypes.values;\nvar issueTypeContexts = [];\nfor(var i = issueTypes.length-1; i>= 0; i--) {\n   var issueTypeId = issueTypes[i];\n    issueTypeContexts.push(\n       issueTypeId.id\n    );\n}\nreturn issueTypeContexts;",
      "dimension": "IssueTypeScheme",
      "property": "issueTypesInUse",
      "dimension_level": "IssueTypeScheme"
    },
    { "name": "description", "data_type": "string" },
    { "name": "isDefault", "data_type": "string" },
    { "name": "issueTypes\nmaxResults", "data_type": "integer" },
    { "name": "issueTypes\nstartAt", "data_type": "integer" },
    { "name": "issueTypes\ntotal", "data_type": "integer" },
    { "name": "issueTypes\nisLast", "data_type": "string" },
    { "name": "issueTypes\nvalues", "data_type": "array" },
    { "name": "defaultIssueTypeId", "data_type": "integer" },
    { "name": "date", "data_type": "date", "dimension": "Time" },
    { "name": "source_id", "data_type": "string", "source_id_column": true },
    { "name": "hour", "data_type": "integer", "dimension": "Hour" },
    { "name": "minute", "data_type": "integer", "dimension": "Minute" },
    {
      "name": "Row count",
      "dimension": "Measures",
      "dimension_member": "Row count",
      "data_type": "integer",
      "source_column_name": "(internal)",
      "calculation": "row_count"
    }
  ]
}

Issue Type Management (3):

{
  "application_type": "rest_api",
  "application_params": {
    "source_params": {
      "url": "https://ecosystem.atlassian.net/rest/api/3/project/search?expand=issueTypes",
      "request_method": "get",
      "pagination": "next_page_url",
      "page_parameter": "page",
      "page_parameter_in_body": null,
      "offset_parameter": "offset",
      "offset_parameter_in_body": null,
      "limit_parameter": "limit",
      "limit_parameter_in_body": null,
      "next_page_url_property": "nextPage",
      "incremental": true,
      "incremental_stop_import": null,
      "authentication_type": "basic",
      "content_type": "json",
      "json_data_path": "$.values",
      "username": "email",
      "custom_javascript_code": "current_date = new Date();\n\ndoc.date = current_date.toISOString().substring(0,10);\ndoc.hour = current_date.getHours();\ndoc.minute = current_date.getMinutes();\ndoc.source_id = doc.id + \"_\" + current_date.toISOString().substring(0,16);"
    },
    "columns_options": { "hide_unmapped": true },
    "extra_options": {
      "regular_import_frequency": 0,
      "regular_import_at": "",
      "time_zone": ""
    }
  },
  "source_cube_name": "Issue Type Management",
  "columns": [
    { "name": "expand", "data_type": "string" },
    { "name": "self", "data_type": "string" },
    {
      "name": "id",
      "data_type": "integer",
      "dimension": "Jira Project",
      "dimension_level": "Jira Project",
      "id_column": true
    },
    {
      "name": "key",
      "data_type": "string",
      "dimension": "Jira Project",
      "dimension_level": "Jira Project",
      "key_column": true
    },
    {
      "name": "name",
      "data_type": "string",
      "dimension": "Jira Project",
      "dimension_level": "Jira Project",
      "name_column": true
    },
    {
      "name": "Issue types in use",
      "data_type": "string",
      "source_column_name": "(internal)",
      "javascript_code": "var issueTypes = doc.issueTypes;\nvar issueTypeContexts = [];\nfor(var i = issueTypes.length-1; i>= 0; i--) {\n   var issueTypeId = issueTypes[i];\n    issueTypeContexts.push(\n       issueTypeId.id\n    );\n}\nreturn issueTypeContexts;",
      "dimension": "Jira Project",
      "property": "issueTypesInUse",
      "dimension_level": "Jira Project"
    },
    { "name": "issueTypes", "data_type": "array" },
    { "name": "avatarUrls\n48x48", "data_type": "string" },
    { "name": "avatarUrls\n24x24", "data_type": "string" },
    { "name": "avatarUrls\n16x16", "data_type": "string" },
    { "name": "avatarUrls\n32x32", "data_type": "string" },
    { "name": "projectTypeKey", "data_type": "string" },
    { "name": "simplified", "data_type": "string" },
    { "name": "style", "data_type": "string" },
    { "name": "isPrivate", "data_type": "string" },
    { "name": "entityId", "data_type": "string" },
    { "name": "uuid", "data_type": "string" },
    { "name": "projectCategory\nself", "data_type": "string" },
    { "name": "projectCategory\nid", "data_type": "integer" },
    { "name": "projectCategory\nname", "data_type": "string" },
    { "name": "projectCategory\ndescription", "data_type": "string" },
    { "name": "date", "data_type": "date", "dimension": "Time" },
    { "name": "hour", "data_type": "integer", "dimension": "Hour" },
    { "name": "minute", "data_type": "integer", "dimension": "Minute" },
    { "name": "source_id", "data_type": "string", "source_id_column": true },
    {
      "name": "Row count",
      "dimension": "Measures",
      "dimension_member": "Row count",
      "data_type": "integer",
      "source_column_name": "(internal)",
      "calculation": "row_count"
    }
  ]
}

Issue Type Scheme Management:

{
  "application_type": "rest_api",
  "application_params": {
    "source_params": {
      "url": "https://ecosystem.atlassian.net/rest/api/3/issuetypescheme?expand=projects",
      "request_method": "get",
      "pagination": "offset_limit",
      "page_parameter": "page",
      "page_parameter_in_body": null,
      "offset_parameter": "startAt",
      "offset_parameter_in_body": null,
      "limit_parameter": "total",
      "limit_parameter_in_body": null,
      "limit_value": 50,
      "concurrency": 10,
      "incremental": true,
      "incremental_stop_import": null,
      "authentication_type": "basic",
      "content_type": "json",
      "json_data_path": "$.values",
      "username": "email",
      "custom_javascript_code": "current_date = new Date();\n\ndoc.date = current_date.toISOString().substring(0,10);\ndoc.hour = current_date.getHours();\ndoc.minute = current_date.getMinutes();\ndoc.source_id = doc.id + \"_\" + current_date.toISOString().substring(0,16);"
    },
    "columns_options": { "hide_unmapped": true },
    "extra_options": {
      "regular_import_frequency": 0,
      "regular_import_at": "",
      "time_zone": ""
    }
  },
  "source_cube_name": "Issue Type Scheme Management",
  "columns": [
    {
      "name": "name",
      "data_type": "string",
      "dimension": "Issue Type Scheme",
      "dimension_level": "Issue Type Scheme",
      "name_column": true
    },
    {
      "name": "id",
      "data_type": "integer",
      "dimension": "Issue Type Scheme",
      "dimension_level": "Issue Type Scheme",
      "key_column": true,
      "property": "Key"
    },
    {
      "name": "description",
      "data_type": "text",
      "dimension": "Issue Type Scheme",
      "dimension_level": "Issue Type Scheme",
      "property": "Description"
    },
    {
      "name": "projects\nmaxResults (1)",
      "source_column_name": "projects\nmaxResults",
      "data_type": "string",
      "javascript_code": "if(value > 0){\n  return 'Active'\n}else{\n  return 'Inactive'\n}",
      "dimension": "Issue Type Scheme",
      "dimension_level": "Issue Type Scheme",
      "property": "Status"
    },
    {
      "name": "projects\nmaxResults",
      "data_type": "string",
      "javascript_code": "if(value > 0){\n  return 'Active'\n}else{\n  return 'Inactive'\n}",
      "dimension": "Issue Type Scheme Status",
      "dimension_level": "Issue Type Scheme Status"
    },
    { "name": "isDefault", "data_type": "string" },
    { "name": "defaultIssueTypeId", "data_type": "integer" },
    {
      "name": "Row count",
      "dimension": "Measures",
      "dimension_member": "Issue Type Scheme count",
      "data_type": "integer",
      "source_column_name": "(internal)",
      "calculation": "row_count"
    },
    { "name": "projects\nstartAt", "data_type": "integer" },
    { "name": "projects\ntotal", "data_type": "integer" },
    { "name": "projects\nisLast", "data_type": "string" },
    { "name": "projects\nvalues", "data_type": "array" },
    { "name": "date", "data_type": "date", "dimension": "Time" },
    { "name": "hour", "data_type": "integer", "dimension": "Hour" },
    { "name": "minute", "data_type": "integer", "dimension": "Minute" },
    { "name": "source_id", "data_type": "string", "source_id_column": true }
  ]
}

Issue Type Screen Scheme Management:

{
  "application_type": "rest_api",
  "application_params": {
    "source_params": {
      "url": "https://ecosystem.atlassian.net/rest/api/3/issuetypescreenscheme?expand=projects",
      "request_method": "get",
      "pagination": "offset_limit",
      "page_parameter": "page",
      "page_parameter_in_body": null,
      "offset_parameter": "startAt",
      "offset_parameter_in_body": null,
      "limit_parameter": "total",
      "limit_parameter_in_body": null,
      "limit_value": 50,
      "concurrency": 10,
      "incremental": true,
      "incremental_stop_import": null,
      "authentication_type": "basic",
      "content_type": "json",
      "json_data_path": "$.values",
      "username": "email",
      "custom_javascript_code": "current_date = new Date();\n\ndoc.date = current_date.toISOString().substring(0,10);\ndoc.hour = current_date.getHours();\ndoc.minute = current_date.getMinutes();\ndoc.source_id = doc.id + \"_\" + current_date.toISOString().substring(0,16);"
    },
    "columns_options": { "hide_unmapped": true },
    "extra_options": {
      "regular_import_frequency": 0,
      "regular_import_at": "",
      "time_zone": "Berlin"
    }
  },
  "source_cube_name": "Issue Type Screen Scheme Management",
  "columns": [
    {
      "name": "id",
      "data_type": "integer",
      "dimension": "IssueType Screen Scheme",
      "dimension_level": "IssueType Screen Scheme",
      "id_column": true
    },
    {
      "name": "name",
      "data_type": "string",
      "dimension": "IssueType Screen Scheme",
      "name_column": true,
      "dimension_level": "IssueType Screen Scheme"
    },
    {
      "name": "schemeStatus",
      "data_type": "string",
      "source_column_name": "(internal)",
      "javascript_code": "if(doc.projects.maxResults > 0){\n  return \"In use\";\n}else{\n  return \"Not in use\";\n}",
      "dimension": "IssueType Screen Scheme",
      "dimension_level": "IssueType Screen Scheme",
      "property": "Status"
    },
    {
      "name": "Status",
      "data_type": "string",
      "source_column_name": "(internal)",
      "javascript_code": "if(doc.projects.maxResults > 0){\n  return \"In use\";\n}else{\n  return \"Not in use\";\n}",
      "dimension": "IssueType Screen Scheme Status"
    },
    { "name": "description", "data_type": "string" },
    { "name": "projects\nmaxResults", "data_type": "integer" },
    { "name": "projects\nstartAt", "data_type": "integer" },
    { "name": "projects\ntotal", "data_type": "integer" },
    { "name": "projects\nisLast", "data_type": "string" },
    { "name": "projects\nvalues", "data_type": "array" },
    {
      "name": "Row count",
      "dimension": "Measures",
      "dimension_member": "Issue Type Screen Scheme count",
      "data_type": "integer",
      "source_column_name": "(internal)",
      "calculation": "row_count"
    },
    { "name": "date", "data_type": "date", "dimension": "Time" },
    { "name": "hour", "data_type": "integer", "dimension": "Hour" },
    { "name": "minute", "data_type": "integer", "dimension": "Minute" },
    { "name": "source_id", "data_type": "string", "source_id_column": true }
  ]
}

Status Management:

{
  "application_type": "rest_api",
  "application_params": {
    "source_params": {
      "url": "https://ecosystem.atlassian.net/rest/api/3/statuses/search?expand=usages,workflowUsages",
      "request_method": "get",
      "pagination": "next_page_url",
      "page_parameter": "page",
      "page_parameter_in_body": null,
      "offset_parameter": "offset",
      "offset_parameter_in_body": null,
      "limit_parameter": "limit",
      "limit_parameter_in_body": null,
      "incremental": true,
      "incremental_stop_import": null,
      "authentication_type": "basic",
      "content_type": "json",
      "json_data_path": "$.values",
      "next_page_url_property": "nextPage",
      "username": "email",
      "custom_javascript_code": "current_date = new Date();\n\ndoc.date = current_date.toISOString().substring(0,10);\ndoc.hour = current_date.getHours();\ndoc.minute = current_date.getMinutes();\ndoc.source_id = doc.id + \"_\" + current_date.toISOString().substring(0,16);"
    },
    "extra_options": {
      "regular_import_frequency": 0,
      "regular_import_at": "",
      "time_zone": ""
    }
  },
  "source_cube_name": "Status Management",
  "columns": [
    {
      "name": "name",
      "data_type": "string",
      "dimension": "Status",
      "dimension_level": "Status",
      "name_column": true
    },
    {
      "name": "id",
      "data_type": "integer",
      "dimension": "Status",
      "dimension_level": "Status",
      "property": "Status ID"
    },
    {
      "name": "statusCategory (1)",
      "source_column_name": "statusCategory",
      "data_type": "string",
      "dimension": "Status",
      "dimension_level": "Status",
      "property": "Category"
    },
    {
      "name": "statusCategory",
      "data_type": "string",
      "dimension": "Status Category",
      "dimension_level": "Status Category"
    },
    {
      "name": "scope\ntype",
      "data_type": "string",
      "dimension": "Scope Type",
      "dimension_level": "Scope Type"
    },
    {
      "name": "description",
      "data_type": "string",
      "dimension": "Status",
      "dimension_level": "Status",
      "property": "Status Description"
    },
    { "name": "usages", "data_type": "array" },
    {
      "name": "In use",
      "data_type": "string",
      "source_column_name": "(internal)",
      "javascript_code": "var use\nif(_.some(doc.usages, \"project\", true, false)){\n  use = \"In use\"\n}else{\n  use = \"Not in use\"\n}\nreturn use",
      "dimension": "In use",
      "dimension_level": "In use"
    },
    {
      "name": "Row count",
      "dimension": "Measures",
      "dimension_member": "Status Count",
      "data_type": "integer",
      "source_column_name": "(internal)",
      "calculation": "row_count"
    },
    { "name": "workflowUsages", "data_type": "array" },
    {
      "name": "In use in any workflow",
      "data_type": "string",
      "source_column_name": "(internal)",
      "javascript_code": "var use\nif(_.some(doc.workflowUsages, \"workflowName\", true, false)){\n  use = \"In use\"\n}else{\n  use = \"Not in use\"\n}\nreturn use",
      "dimension": "In use in workflow",
      "dimension_level": "In use in workflow"
    },
    { "name": "date", "data_type": "date", "dimension": "Time" },
    { "name": "hour", "data_type": "integer", "dimension": "Hour" },
    { "name": "minute", "data_type": "integer", "dimension": "Minute" },
    { "name": "source_id", "data_type": "string", "source_id_column": true }
  ]
}

Workflow Management (1):

{
  "application_type": "rest_api",
  "application_params": {
    "source_params": {
      "url": "https://ecosystem.atlassian.net/rest/api/3/workflow/search?isActive=true",
      "request_method": "get",
      "pagination": "offset_limit",
      "page_parameter": "page",
      "page_parameter_in_body": null,
      "offset_parameter": "startAt",
      "offset_parameter_in_body": null,
      "limit_parameter": "total",
      "limit_parameter_in_body": null,
      "limit_value": 50,
      "concurrency": 10,
      "incremental": true,
      "incremental_stop_import": null,
      "authentication_type": "basic",
      "content_type": "json",
      "json_data_path": "$.values",
      "username": "email",
      "custom_javascript_code": "current_date = new Date();\n\ndoc.date = current_date.toISOString().substring(0,10);\ndoc.hour = current_date.getHours();\ndoc.minute = current_date.getMinutes();\ndoc.source_id = doc.id.entityId + \"_\" + current_date.toISOString().substring(0,16);"
    },
    "columns_options": { "hide_unmapped": true },
    "extra_options": {
      "regular_import_frequency": 0,
      "regular_import_at": "",
      "time_zone": ""
    }
  },
  "source_cube_name": "Workflow Management",
  "columns": [
    {
      "name": "id\nname",
      "data_type": "string",
      "dimension": "Workflow",
      "property": "Workflow Name",
      "dimension_level": "Workflow"
    },
    {
      "name": "id\nentityId",
      "data_type": "string",
      "dimension": "Workflow",
      "property": "Workflow entityId",
      "dimension_level": "Workflow"
    },
    {
      "name": "description",
      "data_type": "string",
      "dimension": "Workflow",
      "property": "Workflow Description",
      "dimension_level": "Workflow"
    },
    {
      "name": "created",
      "data_type": "datetime",
      "dimension": "Workflow",
      "property": "Workflow created date",
      "dimension_level": "Workflow"
    },
    {
      "name": "workflowStatus",
      "data_type": "string",
      "source_column_name": "(internal)",
      "javascript_code": "return \"Active\"",
      "dimension": "Workflow",
      "dimension_level": "Workflow",
      "property": "Status"
    },
    { "name": "updated", "data_type": "datetime" },
    {
      "name": "Row count",
      "dimension": "Measures",
      "dimension_member": "Row count",
      "data_type": "integer",
      "source_column_name": "(internal)",
      "calculation": "row_count"
    },
    {
      "name": "Workflow Status",
      "data_type": "string",
      "source_column_name": "(internal)",
      "javascript_code": "return \"Active\"",
      "dimension": "Workflow Status",
      "dimension_level": "Workflow Status"
    },
    { "name": "date", "data_type": "date", "dimension": "Time" },
    { "name": "hour", "data_type": "integer", "dimension": "Hour" },
    { "name": "minute", "data_type": "integer", "dimension": "Minute" },
    { "name": "source_id", "data_type": "string", "source_id_column": true }
  ]
}

Workflow Management (2):

{
  "application_type": "rest_api",
  "application_params": {
    "source_params": {
      "url": "https://ecosystem.atlassian.net/rest/api/3/workflow/search?isActive=false",
      "request_method": "get",
      "pagination": "offset_limit",
      "page_parameter": "page",
      "page_parameter_in_body": null,
      "offset_parameter": "startAt",
      "offset_parameter_in_body": null,
      "limit_parameter": "total",
      "limit_parameter_in_body": null,
      "limit_value": 50,
      "concurrency": 10,
      "incremental": true,
      "incremental_stop_import": null,
      "authentication_type": "basic",
      "content_type": "json",
      "json_data_path": "$.values",
      "username": "email",
      "custom_javascript_code": "current_date = new Date();\n\ndoc.date = current_date.toISOString().substring(0,10);\ndoc.hour = current_date.getHours();\ndoc.minute = current_date.getMinutes();\ndoc.source_id = doc.id.entityId + \"_\" + current_date.toISOString().substring(0,16);"
    },
    "extra_options": {
      "regular_import_frequency": 0,
      "regular_import_at": "",
      "time_zone": ""
    }
  },
  "source_cube_name": "Workflow Management",
  "columns": [
    {
      "name": "id\nname",
      "data_type": "string",
      "dimension": "Workflow",
      "property": "Workflow Name",
      "dimension_level": "Workflow"
    },
    {
      "name": "id\nentityId",
      "data_type": "string",
      "dimension": "Workflow",
      "property": "Workflow entityId",
      "dimension_level": "Workflow"
    },
    {
      "name": "description",
      "data_type": "string",
      "dimension": "Workflow",
      "property": "Workflow Description",
      "dimension_level": "Workflow"
    },
    {
      "name": "created",
      "data_type": "datetime",
      "dimension": "Workflow",
      "property": "Workflow created date",
      "dimension_level": "Workflow"
    },
    {
      "name": "status",
      "data_type": "string",
      "source_column_name": "(internal)",
      "javascript_code": "return \"Inactive\"",
      "dimension": "Workflow",
      "dimension_level": "Workflow",
      "property": "Status"
    },
    {
      "name": "Workflow Status",
      "data_type": "string",
      "source_column_name": "(internal)",
      "javascript_code": "return \"Inactive\"",
      "dimension": "Workflow Status",
      "dimension_level": "Workflow Status"
    },
    { "name": "updated", "data_type": "datetime" },
    {
      "name": "Row count",
      "dimension": "Measures",
      "dimension_member": "Row count",
      "data_type": "integer",
      "source_column_name": "(internal)",
      "calculation": "row_count"
    },
    { "name": "date", "data_type": "date", "dimension": "Time" },
    { "name": "hour", "data_type": "integer", "dimension": "Hour" },
    { "name": "minute", "data_type": "integer", "dimension": "Minute" },
    { "name": "source_id", "data_type": "string", "source_id_column": true }
  ]
}

Workflow Scheme Management:

{
  "application_type": "rest_api",
  "application_params": {
    "source_params": {
      "url": "https://ecosystem.atlassian.net/rest/api/3/workflowscheme",
      "request_method": "get",
      "pagination": "offset_limit",
      "page_parameter": "page",
      "page_parameter_in_body": null,
      "offset_parameter": "startAt",
      "offset_parameter_in_body": null,
      "limit_parameter": "total",
      "limit_parameter_in_body": null,
      "next_page_url_property": "nextPage",
      "incremental": true,
      "incremental_stop_import": null,
      "authentication_type": "basic",
      "content_type": "json",
      "json_data_path": "$.values",
      "limit_value": 50,
      "concurrency": 10,
      "username": "email",
      "custom_javascript_code": "current_date = new Date();\n\ndoc.date = current_date.toISOString().substring(0,10);\ndoc.hour = current_date.getHours();\ndoc.minute = current_date.getMinutes();\ndoc.source_id = doc.id + \"_\" + current_date.toISOString().substring(0,16);"
    },
    "columns_options": { "hide_unmapped": true },
    "extra_options": {
      "regular_import_frequency": 0,
      "regular_import_at": "",
      "time_zone": "Berlin"
    }
  },
  "source_cube_name": "Workflow Scheme Management",
  "columns": [
    {
      "name": "name",
      "data_type": "string",
      "dimension": "Workflow Scheme",
      "dimension_level": "Workflow Scheme",
      "name_column": true
    },
    {
      "name": "id",
      "data_type": "integer",
      "dimension": "Workflow Scheme",
      "dimension_level": "Workflow Scheme",
      "id_column": true
    },
    {
      "name": "description",
      "data_type": "string",
      "dimension": "Workflow Scheme",
      "property": "Description",
      "dimension_level": "Workflow Scheme"
    },
    {
      "name": "defaultWorkflow",
      "data_type": "string",
      "dimension": "Workflow Scheme",
      "dimension_level": "Workflow Scheme",
      "property": "Default Workflow"
    },
    { "name": "self", "data_type": "string" },
    {
      "name": "Row count",
      "dimension": "Measures",
      "dimension_member": "WF Scheme count",
      "data_type": "integer",
      "source_column_name": "(internal)",
      "calculation": "row_count"
    },
    { "name": "issueTypeMappings\n10019", "data_type": "string" },
    { "name": "issueTypeMappings\n10018", "data_type": "string" },
    { "name": "date", "data_type": "date", "dimension": "Time" },
    { "name": "hour", "data_type": "integer", "dimension": "Hour" },
    { "name": "minute", "data_type": "integer", "dimension": "Minute" },
    { "name": "source_id", "data_type": "string", "source_id_column": true },
    { "name": "issueTypeMappings\n10008", "data_type": "string" },
    { "name": "issueTypeMappings\n10009", "data_type": "string" },
    { "name": "issueTypeMappings\n10020", "data_type": "string" },
    { "name": "issueTypeMappings\n10022", "data_type": "string" },
    { "name": "issueTypeMappings\n10021", "data_type": "string" },
    { "name": "issueTypeMappings\n10069", "data_type": "string" },
    { "name": "issueTypeMappings\n10057", "data_type": "string" },
    { "name": "issueTypeMappings\n10068", "data_type": "string" },
    { "name": "issueTypeMappings\n10072", "data_type": "string" },
    { "name": "issueTypeMappings\n10064", "data_type": "string" },
    { "name": "issueTypeMappings\n10063", "data_type": "string" },
    { "name": "issueTypeMappings\n10066", "data_type": "string" },
    { "name": "issueTypeMappings\n10065", "data_type": "string" },
    { "name": "issueTypeMappings\n10067", "data_type": "string" },
    { "name": "issueTypeMappings\n10010", "data_type": "string" },
    { "name": "issueTypeMappings\n10058", "data_type": "string" },
    { "name": "issueTypeMappings\n10056", "data_type": "string" }
  ]
}

Dashboards:

After all of the data source are created and imported, you can go to the Dashboards section and import the following dashboard definitions, to achieve the reports seen in the above screenshot. Note that these reports use both Day and Hour level on the X axis, you can change this in each report individually if necessary.

{
  "dashboards": [ {
    "name": "Jira Custom fields",
    "definition": {"pages":[{"cube_name":"Fields Management","name":"Default or Custom field","selected_set":["[Default or Custom field].[All Default or Custom fields]"],"members":[{"depth":0,"name":"All Default or Custom fields","full_name":"[Default or Custom field].[All Default or Custom fields]","drillable":true,"type":"all","expanded":true,"drilled_into":false,"caption":"All Default or Custom fields"},{"depth":1,"name":"Custom field","full_name":"[Default or Custom field].[Custom field]","caption":"Custom field"}],"current_page_members":["[Default or Custom field].[Custom field]"]},{"cube_name":"Fields Management","name":"Type","selected_set":["[Type].[All Types]"],"members":[{"depth":0,"name":"All Types","full_name":"[Type].[All Types]","drillable":true,"type":"all","caption":"All Types","expanded":true,"drilled_into":false},{"depth":1,"name":"number","full_name":"[Type].[number]","caption":"number"}],"current_page_members":["[Type].[number]"]}],"reports":[{"width":33.33,"cube_report_name":"Number of Custom fields by day","cube_name":"Fields Management"},{"width":66.66,"cube_report_name":"Custom fields by Type","cube_name":"Fields Management"}],"pages_options":{}}
  },{
    "name": "Jira Issue Types",
    "definition": {"pages":[],"reports":[{"width":33.33,"cube_report_name":"Number of Issue Types","cube_name":"Issue Type Management"},{"width":33.33,"cube_report_name":"Issue Type Schemes count by day","cube_name":"Issue Type Scheme Management"},{"width":33.33,"cube_report_name":"Issue Type Screen Schemes count by day","cube_name":"Issue Type Screen Scheme Management"}],"pages_options":{}}
  },{
    "name": "Jira Statuses and Workflows",
    "definition": {"pages":[],"reports":[{"width":33.33,"cube_report_name":"Statuses by Category by day","cube_name":"Status Management"},{"width":33.33,"cube_report_name":"Workflows by Status by day","cube_name":"Workflow Management"},{"width":33.33,"cube_report_name":"Workflow Scheme count by day","cube_name":"Workflow Scheme Management"}],"pages_options":{}}
  },{
    "name": "Jira Item count across Time",
    "definition": {"pages":[],"reports":[{"width":33.33,"cube_report_name":"Statuses by Category by day","cube_name":"Status Management"},{"width":33.33,"cube_report_name":"Issue Type Schemes count by day","cube_name":"Issue Type Scheme Management"},{"width":33.33,"cube_report_name":"Issue Type Screen Schemes count by day","cube_name":"Issue Type Screen Scheme Management"},{"width":33.33,"cube_report_name":"Workflow Scheme count by day","cube_name":"Workflow Scheme Management"},{"width":33.33,"cube_report_name":"Workflows by Status by day","cube_name":"Workflow Management"},{"width":33.33,"cube_report_name":"Number of Issue Types","cube_name":"Issue Type Management"}],"pages_options":{}}
  } ],
  "dashboard_reports": [ {
    "cube_name": "Fields Management",
    "cube_reports": [ {
       "name": "Number of Custom fields by day",
       "result_view": "line_chart",
       "definition": {"columns":{"dimensions":[{"name":"Measures","selected_set":["[Measures].[Field count]"],"members":[]}]},"rows":{"dimensions":[{"name":"Time","selected_set":["[Time].[Day].Members"],"members":[],"bookmarked_members":[]},{"name":"Hour","selected_set":["[Hour].[Hour].Members"],"members":[],"bookmarked_members":[]}],"nonempty_crossjoin":true},"pages":{"dimensions":[{"name":"Default or Custom field","selected_set":["[Default or Custom field].[All Default or Custom fields]"],"members":[{"depth":0,"name":"All Default or Custom fields","full_name":"[Default or Custom field].[All Default or Custom fields]","drillable":true,"type":"all","expanded":true,"drilled_into":false},{"depth":1,"name":"Custom field","full_name":"[Default or Custom field].[Custom field]","parent_full_name":"[Default or Custom field].[All Default or Custom fields]"}],"bookmarked_members":[],"current_page_members":["[Default or Custom field].[Custom field]"]},{"name":"Type","selected_set":["[Type].[All Types]"],"members":[{"depth":0,"name":"All Types","full_name":"[Type].[All Types]","drillable":true,"type":"all"}],"bookmarked_members":[],"current_page_members":["[Type].[All Types]"]}]},"options":{},"view":{"current":"line_chart","maximized":false,"line_chart":{"area":false,"swap_axes":false,"data_labels":true,"series_options":{"Field count":{"color":"#5A89CE"}}},"table":{}},"calculated_members":[]}
    },{
       "name": "Custom fields by Type",
       "result_view": "table",
       "definition": {"columns":{"dimensions":[{"name":"Measures","selected_set":["[Measures].[Field count]","[Measures].[Field Type]","[Measures].[Field Description]"],"members":[]}]},"rows":{"dimensions":[{"name":"Field","selected_set":["[Field.Type].[Field].Members"],"members":[],"bookmarked_members":[]}],"order_by":{"expression":["[Measures].[Field Default or Custom field]"],"order":"DESC"},"nonempty_crossjoin":true},"pages":{"dimensions":[{"name":"Default or Custom field","selected_set":["[Default or Custom field].[All Default or Custom fields]"],"members":[{"depth":0,"name":"All Default or Custom fields","full_name":"[Default or Custom field].[All Default or Custom fields]","drillable":true,"type":"all","expanded":true,"drilled_into":false},{"depth":1,"name":"Custom field","full_name":"[Default or Custom field].[Custom field]","parent_full_name":"[Default or Custom field].[All Default or Custom fields]"}],"bookmarked_members":[],"current_page_members":["[Default or Custom field].[Custom field]"]},{"name":"Type","selected_set":["[Type].[Type].Members"],"members":[{"depth":1,"name":"number","full_name":"[Type].[number]"}],"bookmarked_members":[],"current_page_members":["[Type].[number]"]},{"name":"Time","selected_set":["[Time].[Day].Members"],"members":[{"depth":4,"name":"Jul 03 2024","full_name":"[Time].[2024].[Q3 2024].[Jul 2024].[Jul 03 2024]"}],"bookmarked_members":[],"current_page_members":["[Time].[2024].[Q3 2024].[Jul 2024].[Jul 03 2024]"]},{"name":"Hour","selected_set":["[Hour].[Hour].Members"],"members":[{"depth":1,"name":"13","full_name":"[Hour].[13]"}],"bookmarked_members":[],"current_page_members":["[Hour].[13]"]}]},"options":{"total":"rows"},"view":{"current":"table","maximized":false,"table":{}},"calculated_members":[]}
    } ],
    "calculated_members": [{"name":"Field count","dimension":"Measures","formula":"Count(\n  Filter(\n    Descendants([Field].CurrentMember,[Field].[Field]),\n    [Measures].[Custom fields created] \u003e 0\n  )\n)","format_string":""},{"name":"Field Default or Custom field","dimension":"Measures","formula":"[Field].CurrentHierarchyMember.get('Default or Custom field')","format_string":""},{"name":"Field Type","dimension":"Measures","formula":"[Field].CurrentHierarchyMember.get('Type')","format_string":""},{"name":"Field Description","dimension":"Measures","formula":"[Field].CurrentHierarchyMember.get('Description')","format_string":""}]
  },{
    "cube_name": "Issue Type Management",
    "cube_reports": [ {
       "name": "Number of Issue Types",
       "result_view": "bar_chart",
       "definition": {"columns":{"dimensions":[{"name":"Measures","selected_set":["[Measures].[Issue Type count]"],"members":[]},{"name":"Is SubTask","selected_set":["[Is SubTask].[Standard]","[Is SubTask].[Sub-task]"],"members":[],"bookmarked_members":[]}]},"rows":{"dimensions":[{"name":"Time","selected_set":["[Time].[Day].Members"],"members":[],"bookmarked_members":[]},{"name":"Hour","selected_set":["[Hour].[Hour].Members"],"members":[],"bookmarked_members":[]}]},"pages":{"dimensions":[{"name":"Issue Type Scope","selected_set":["[Issue Type Scope].[Issue Type Scope].Members"],"members":[{"depth":1,"name":"Global","full_name":"[Issue Type Scope].[Global]"}],"bookmarked_members":[],"current_page_members":["[Issue Type Scope].[Global]"]}]},"options":{"total":"columns"},"view":{"current":"bar_chart","maximized":false,"bar_chart":{"stacked":true,"vertical":true,"swap_axes":false,"data_labels":false,"series_options":{"$total;$total":{"type":"scatter","color":"#006F92","dataLabelType":"top horizontal"},"Issue Type count;Standard":{"color":"#0093B5","dataLabelType":"middle horizontal"},"Issue Type count;Sub-task":{"color":"#00C7E5","dataLabelType":"middle horizontal"}}},"table":{}},"calculated_members":[]}
    } ],
    "calculated_members": [{"name":"Issue Type count","dimension":"Measures","formula":"Count(\n  Filter(\n    Descendants([IssueType].CurrentMember,[IssueType].[IssueType]),\n    [Measures].[Row count] \u003e 0\n  )\n)","format_string":""},{"name":"Standard","dimension":"Is SubTask","formula":"[Is SubTask].[false]","format_string":""},{"name":"Sub-task","dimension":"Is SubTask","formula":"[Is SubTask].[true]","format_string":""}]
  },{
    "cube_name": "Issue Type Scheme Management",
    "cube_reports": [ {
       "name": "Issue Type Schemes count by day",
       "result_view": "line_chart",
       "definition": {"columns":{"dimensions":[{"name":"Measures","selected_set":["[Measures].[Scheme count]"],"members":[]},{"name":"Issue Type Scheme Status","selected_set":["[Issue Type Scheme Status].[Issue Type Scheme Status].Members"],"members":[],"bookmarked_members":[]}]},"rows":{"dimensions":[{"name":"Time","selected_set":["[Time].[Day].Members"],"members":[],"bookmarked_members":[]},{"name":"Hour","selected_set":["[Hour].[Hour].Members"],"members":[],"bookmarked_members":[]}]},"pages":{"dimensions":[]},"options":{},"view":{"current":"line_chart","maximized":false,"line_chart":{"area":true,"stacked":true,"swap_axes":false,"data_labels":true,"series_options":{"Scheme count":{"color":"#FF983D"},"Active":{"color":"#79E2F2"},"Inactive":{"color":"#CAF8FF"}}},"table":{}},"calculated_members":[]}
    } ],
    "calculated_members": [{"name":"Scheme count","dimension":"Measures","formula":"Count(\n  Filter(\n    Descendants([Issue Type Scheme].CurrentMember,[Issue Type Scheme].[Issue Type Scheme]),\n    [Measures].[Issue Type Scheme count] \u003e 0\n  )\n)","format_string":""}]
  },{
    "cube_name": "Issue Type Screen Scheme Management",
    "cube_reports": [ {
       "name": "Issue Type Screen Schemes count by day",
       "result_view": "line_chart",
       "definition": {"columns":{"dimensions":[{"name":"Measures","selected_set":["[Measures].[Screen Scheme count]"],"members":[]}]},"rows":{"dimensions":[{"name":"Time","selected_set":["[Time].[Day].Members"],"members":[],"bookmarked_members":[]},{"name":"Hour","selected_set":["[Hour].[Hour].Members"],"members":[],"bookmarked_members":[]}]},"pages":{"dimensions":[]},"options":{},"view":{"current":"line_chart","maximized":false,"line_chart":{"area":false,"swap_axes":false,"data_labels":true,"series_options":{"Screen Scheme count":{"color":"#C28AE0"}}},"table":{}},"calculated_members":[]}
    } ],
    "calculated_members": [{"name":"Screen Scheme count","dimension":"Measures","formula":"Count(\n  Filter(\n    Descendants([IssueType Screen Scheme].CurrentMember,[IssueType Screen Scheme].[IssueType Screen Scheme]),\n    [Measures].[Issue Type Screen Scheme count] \u003e 0\n  )\n)","format_string":""}]
  },{
    "cube_name": "Status Management",
    "cube_reports": [ {
       "name": "Statuses by Category by day",
       "result_view": "line_chart",
       "definition": {"columns":{"dimensions":[{"name":"Measures","selected_set":["[Measures].[Number of Statuses]"],"members":[]},{"name":"Status Category","selected_set":["[Status Category].[Status Category].Members"],"members":[],"bookmarked_members":[]}]},"rows":{"dimensions":[{"name":"Time","selected_set":["[Time].[Day].Members"],"members":[],"bookmarked_members":[]},{"name":"Hour","selected_set":["[Hour].[Hour].Members"],"members":[],"bookmarked_members":[]}]},"pages":{"dimensions":[]},"options":{},"view":{"current":"line_chart","maximized":false,"line_chart":{"area":true,"stacked":true,"swap_axes":false,"data_labels":"values","series_options":{"DONE":{"color":"#86DBA6"},"IN_PROGRESS":{"color":"#79E2F2"},"TODO":{"color":"#EBECF0"}}},"table":{}},"calculated_members":[]}
    } ],
    "calculated_members": [{"name":"Number of Statuses","dimension":"Measures","formula":"Count(\n  Filter(\n    Descendants([Status].CurrentMember,[Status].[Status]),\n    [Measures].[Status Count] \u003e 0\n  )\n)","format_string":""}]
  },{
    "cube_name": "Workflow Management",
    "cube_reports": [ {
       "name": "Workflows by Status by day",
       "result_view": "line_chart",
       "definition": {"columns":{"dimensions":[{"name":"Measures","selected_set":["[Measures].[Workflow count]"],"members":[]},{"name":"Workflow Status","selected_set":["[Workflow Status].[Workflow Status].Members"],"members":[],"bookmarked_members":[]}]},"rows":{"dimensions":[{"name":"Time","selected_set":["[Time].[Day].Members"],"members":[],"bookmarked_members":[]},{"name":"Hour","selected_set":["[Hour].[Hour].Members"],"members":[],"bookmarked_members":[]}]},"pages":{"dimensions":[]},"options":{},"view":{"current":"line_chart","maximized":false,"line_chart":{"area":true,"stacked":true,"swap_axes":false,"data_labels":"values","series_options":{"Active":{"color":"#79E2F2"},"Inactive":{"color":"#DCBCED"}}},"table":{}},"calculated_members":[]}
    } ],
    "calculated_members": [{"name":"Workflow count","dimension":"Measures","formula":"Count(\n  Filter(\n    Descendants([Workflow].CurrentMember,[Workflow].[Workflow]),\n    [Measures].[Row count] \u003e 0\n  )\n)","format_string":""}]
  },{
    "cube_name": "Workflow Scheme Management",
    "cube_reports": [ {
       "name": "Workflow Scheme count by day",
       "result_view": "line_chart",
       "definition": {"columns":{"dimensions":[{"name":"Measures","selected_set":["[Measures].[Workflow Scheme count]"],"members":[]}]},"rows":{"dimensions":[{"name":"Time","selected_set":["[Time].[Day].Members"],"members":[],"bookmarked_members":[]},{"name":"Hour","selected_set":["[Hour].[Hour].Members"],"members":[],"bookmarked_members":[]}]},"pages":{"dimensions":[]},"options":{},"view":{"current":"line_chart","maximized":false,"line_chart":{"area":false,"swap_axes":false,"data_labels":true,"series_options":{"Scheme count":{"color":"#00C7E5"},"Workflow Scheme count":{"color":"#00C7E5"}}},"table":{}},"calculated_members":[]}
    } ],
    "calculated_members": [{"name":"Workflow Scheme count","dimension":"Measures","formula":"Count(\n  Filter(\n    Descendants([Workflow Scheme].CurrentMember,[Workflow Scheme].[Workflow Scheme]),\n    [Measures].[WF Scheme count] \u003e 0\n  )\n)","format_string":""}]
  } ]
}

​Best regards,
​Nauris

Does this work for Jira DC ???

Hi @nauris.malitis

Thanks a lot for this reply!
Will test this again in my test instance.

Regards,
Rodrigo Kondo Fernandes

1 Like

Hi @morjo02

The way this is currently configured it only works for Jira Cloud.
For DC at least the base URL will need to be changed. And if the return body of the endpoints are different than what is returned for Cloud, the mapping of data into the cube also needs to be updated.

Regards,
Rodrigo Kondo Fernandes

Thank you - I am receiving the following import error…

org.postgresql.util.PSQLException: ERROR: permission denied for database eazybi_jira

Hi Rodrigo, do you have the Jira DC API v2 equivalent to the Jira Cloud API v3

Hi @morjo02

We currently don’t have examples for Jira DC, however we’ll investigate the possibilities.
Which would be the most important metrics for you?

​Best regards,
​Nauris / eazyBI support

Hi Nauris,

We are preparing to migrate from Jira DC to Jira Cloud with plans to clean up our existing Jira DC before we start the migration to Jira Cloud. All of the remaining data would be beneficials for us to collect to assist with the Jira DC clean up.

We have the following 3 data sources working.

rest/api/2/issuetypescheme?expand=projects
rest/api/2/field
rest/api/2/applicationrole

we are interested in

Field Management
Issue Types
Issue Type Schemes
Issue Type Screen Schemes
Statuses
Workflows - Active and Inactive
Workflow Schemes

Hi @morjo02

I’m heading out for vacation, but I’ll leave the potential REST API endpoints here for future reference:

Field Management:
/rest/api/2/field
Issue Types:
/rest/api/2/issuetype
Issue Type Schemes:
/issuetypescheme?expand=schemes.issueTypes,schemes.defaultIssueType
Issue Type Screen Schemes:
rest/api/2/screens
additional requests to get the list of available fields in each screen:
rest/api/2/screens/{screenId}/availableFields
Statuses (with status categories):
rest/api/2/status
Workflows (gets you a list of workflows, but no info to say if it is active or not):
rest/api/2/workflow
Workflow Schemes:
No GET request to get WorkflowSchemes with IDs, only individual GET requests by WorkflowScheme IDs, which is kinda useless since there are no REST API endpoints that would return the individual IDs in the first place.

I’m returning at the end of August and will continue to investigate the possible data sources and potential mappings. There is also a possibility to set up a data import directly from the Jira database with SQL data import. This way, there would be no limitations currently experienced with the REST API endpoints, however, it would take additional tinkering to figure out the best SQL queries to extract the necessary data directly from the Jira DB.

Let me know if anything new comes up, but anyway, I’ll be back at the end of August!
Best regards,
Nauris

Thank you for the update and enjoy your vacation…

1 Like