페이지 트리

이 페이지의 이전 버전을 보고 있습니다. 현재 버전 보기.

현재와 비교 페이지 이력 보기

« 이전 버전 3 다음 »

Overview

EazyBI는 Jira 정보를 가시화하고 분석하는 Add-on이다.

Dashboard 생성

Step 1) EazyBI Account 생성

Jira EazyBI 메뉴 >> Create new account

Step 2) Add Jira application

Jira 선택

Step 3) Import 설정

 프로젝트 선택

import 주기 설정

추가 필터 설정

필요한 이슈만 import 하는 설정

기타 설정

  • Status and history: 이슈의 상태와 이력을 분석할 경우 선택
  • Time dimension:  시간정보 선택
  • User groups: 사용자 정보 선택
  • Add-on이 생성한 정보 선택


Custom fields 설정

아래 이미지에서 선택된 항목과 같이 설정

Step 4) 보고서 만들기

EazyBI >> Account 이름 >> Analyze >> New report

아래 이미지와 같이 좌측에는 Project와 Issue 그리고 상단은 Measures를 배치하여 보고서를 설계한다.

{
"cube_name": "Jira",
"cube_reports": [ {
"name": "MOIMSTONE-Report",
"result_view": "table",
"definition": {"columns":{"dimensions":[{"name":"Measures","selected_set":["[Measures].[Issue Start date]","[Measures].[Issue End date]","[Measures].[\uacc4\ud68d \uc77c\uc218]","[Measures].[\uc9c4\ud589 \uc77c\uc218]","[Measures].[\uc2e4\uc81c\uc9c4\ud589\ub960]","[Measures].[\uacc4\ud68d\uc77c\uc218 (baseline)]","[Measures].[\uacc4\ud68d\uc9c4\ud589\uc77c\uc218 (baseline)]","[Measures].[\uacc4\ud68d\uc9c4\ud589\uc728 (baseline)]","[Measures].[\uc9c0\uc5f0\uc728]"],"members":[]}]},"rows":{"dimensions":[{"name":"Issue","selected_set":["[Issue].[Project].Members"],"members":[],"bookmarked_members":[]}],"nonempty_crossjoin":true},"pages":{"dimensions":[{"name":"Project","selected_set":["[Project].[Project].Members"],"members":[{"depth":1,"name":"(MOIM) DS100-Smart Docking Station \uc2e0\uaddc\uac1c\ubc1c","full_name":"[Project].[(MOIM) DS100-Smart Docking Station \uc2e0\uaddc\uac1c\ubc1c]","drillable":true,"key":"M1240006"},{"depth":1,"name":"(MOIM) IP450P-PoE\uc9c0\uc6d0 IP Phone \uc2e0\uaddc\uac1c\ubc1c","full_name":"[Project].[(MOIM) IP450P-PoE\uc9c0\uc6d0 IP Phone \uc2e0\uaddc\uac1c\ubc1c]","drillable":true,"key":"M1240003"},{"depth":1,"name":"(MOIM) IP450S-Basic IP Phone \uc2e0\uaddc\uac1c\ubc1c","full_name":"[Project].[(MOIM) IP450S-Basic IP Phone \uc2e0\uaddc\uac1c\ubc1c]","drillable":true,"key":"M1230001"},{"depth":1,"name":"(MOIM) IP455G-Giga IP Phone \uc2e0\uaddc\uac1c\ubc1c","full_name":"[Project].[(MOIM) IP455G-Giga IP Phone \uc2e0\uaddc\uac1c\ubc1c]","drillable":true,"key":"M1240002"},{"depth":1,"name":"(MOIM) IP455S-Basic IP Phone \uc2e0\uaddc\uac1c\ubc1c","full_name":"[Project].[(MOIM) IP455S-Basic IP Phone \uc2e0\uaddc\uac1c\ubc1c]","drillable":true,"key":"M1230001C"},{"depth":1,"name":"(MOIM) IP460P-POE\uc9c0\uc6d0 IP Phone \uc2e0\uaddc\uac1c\ubc1c","full_name":"[Project].[(MOIM) IP460P-POE\uc9c0\uc6d0 IP Phone \uc2e0\uaddc\uac1c\ubc1c]","drillable":true,"key":"M1240003B"},{"depth":1,"name":"(MOIM) IP460S-Basic IP Phone \uc2e0\uaddc\uac1c\ubc1c","full_name":"[Project].[(MOIM) IP460S-Basic IP Phone \uc2e0\uaddc\uac1c\ubc1c]","drillable":true,"key":"M1230001B"},{"depth":1,"name":"(MOIM) IP460T-BT\uc9c0\uc6d0 IP Phone \uc2e0\uaddc\uac1c\ubc1c","full_name":"[Project].[(MOIM) IP460T-BT\uc9c0\uc6d0 IP Phone \uc2e0\uaddc\uac1c\ubc1c]","drillable":true,"key":"M1240004"},{"depth":1,"name":"(MOIM) IP470G-Giga IP Phone \uc2e0\uaddc\uac1c\ubc1c","full_name":"[Project].[(MOIM) IP470G-Giga IP Phone \uc2e0\uaddc\uac1c\ubc1c]","drillable":true,"key":"M1240002B"},{"depth":1,"name":"(MOIM) IP470H-Basic IP Phone \uc2e0\uaddc\uac1c\ubc1c","full_name":"[Project].[(MOIM) IP470H-Basic IP Phone \uc2e0\uaddc\uac1c\ubc1c]","drillable":true,"key":"M1230001D"},{"depth":1,"name":"(MOIM) IP470W-WiFi\uc9c0\uc6d0 IP Phone \uc2e0\uaddc\uac1c\ubc1c","full_name":"[Project].[(MOIM) IP470W-WiFi\uc9c0\uc6d0 IP Phone \uc2e0\uaddc\uac1c\ubc1c]","drillable":true,"key":"M1240005"},{"depth":1,"name":"(MOIM) IP800E-IHD\uc9c0\uc6d0 AI Phone \uc2e0\uaddc\uac1c\ubc1c","full_name":"[Project].[(MOIM) IP800E-IHD\uc9c0\uc6d0 AI Phone \uc2e0\uaddc\uac1c\ubc1c]","drillable":true,"key":"M1240008"},{"depth":1,"name":"(MOIM) IP800S-Basic AI Phone \uc2e0\uaddc\uac1c\ubc1c","full_name":"[Project].[(MOIM) IP800S-Basic AI Phone \uc2e0\uaddc\uac1c\ubc1c]","drillable":true,"key":"M1240007"},{"depth":1,"name":"(MOIM) KT-\ud310\ub9e4\uc81c\ud488 \uae30\ub2a5\uac1c\uc120","full_name":"[Project].[(MOIM) KT-\ud310\ub9e4\uc81c\ud488 \uae30\ub2a5\uac1c\uc120]","drillable":true,"key":"M1240009B"},{"depth":1,"name":"(MOIM) LGU+-\ud310\ub9e4\uc81c\ud488 \uae30\ub2a5\uac1c\uc120","full_name":"[Project].[(MOIM) LGU+-\ud310\ub9e4\uc81c\ud488 \uae30\ub2a5\uac1c\uc120]","drillable":true,"key":"M1240009"},{"depth":1,"name":"(MOIM) SKBB-\ud310\ub9e4\uc81c\ud488 \uae30\ub2a5\uac1c\uc120","full_name":"[Project].[(MOIM) SKBB-\ud310\ub9e4\uc81c\ud488 \uae30\ub2a5\uac1c\uc120]","drillable":true,"key":"M1240009C"},{"depth":1,"name":"(MOIM) \ud310\ub9e4\uc81c\ud488 \uae30\ub2a5\uac1c\uc120","full_name":"[Project].[(MOIM) \ud310\ub9e4\uc81c\ud488 \uae30\ub2a5\uac1c\uc120]","drillable":true,"key":"M1240009"}],"bookmarked_members":[],"current_page_members":["[Project].[(MOIM) DS100-Smart Docking Station \uc2e0\uaddc\uac1c\ubc1c]","[Project].[(MOIM) IP450P-PoE\uc9c0\uc6d0 IP Phone \uc2e0\uaddc\uac1c\ubc1c]","[Project].[(MOIM) IP450S-Basic IP Phone \uc2e0\uaddc\uac1c\ubc1c]","[Project].[(MOIM) IP455G-Giga IP Phone \uc2e0\uaddc\uac1c\ubc1c]","[Project].[(MOIM) IP455S-Basic IP Phone \uc2e0\uaddc\uac1c\ubc1c]","[Project].[(MOIM) IP460P-POE\uc9c0\uc6d0 IP Phone \uc2e0\uaddc\uac1c\ubc1c]","[Project].[(MOIM) IP460S-Basic IP Phone \uc2e0\uaddc\uac1c\ubc1c]","[Project].[(MOIM) IP460T-BT\uc9c0\uc6d0 IP Phone \uc2e0\uaddc\uac1c\ubc1c]","[Project].[(MOIM) IP470G-Giga IP Phone \uc2e0\uaddc\uac1c\ubc1c]","[Project].[(MOIM) IP470H-Basic IP Phone \uc2e0\uaddc\uac1c\ubc1c]","[Project].[(MOIM) IP470W-WiFi\uc9c0\uc6d0 IP Phone \uc2e0\uaddc\uac1c\ubc1c]","[Project].[(MOIM) IP800E-IHD\uc9c0\uc6d0 AI Phone \uc2e0\uaddc\uac1c\ubc1c]","[Project].[(MOIM) IP800S-Basic AI Phone \uc2e0\uaddc\uac1c\ubc1c]","[Project].[(MOIM) KT-\ud310\ub9e4\uc81c\ud488 \uae30\ub2a5\uac1c\uc120]","[Project].[(MOIM) LGU+-\ud310\ub9e4\uc81c\ud488 \uae30\ub2a5\uac1c\uc120]","[Project].[(MOIM) SKBB-\ud310\ub9e4\uc81c\ud488 \uae30\ub2a5\uac1c\uc120]","[Project].[(MOIM) \ud310\ub9e4\uc81c\ud488 \uae30\ub2a5\uac1c\uc120]"]}]},"options":{},"view":{"current":"table","maximized":false,"table":{"cell_formatting":{"[Measures].[\uc9c0\uc5f0\uc728]":[{"min":"0","max":"0.1","background_color":"#89A54E"},{"min":"0.1","max":"0.3","background_color":"#DBC63D"},{"min":"0.3","max":"0.7","background_color":"#DB843D"},{"min":"0.7","max":"1","background_color":"#AA4643"}]}}}}
} ],
"calculated_members": [{"name":"Issue Baseline end date","dimension":"Measures","formula":"[Issue].CurrentHierarchyMember.get('Baseline end date')","format_string":"yyyy-mm-dd","annotations":{"group":"Issue properties"}},{"name":"Issue Baseline start date","dimension":"Measures","formula":"[Issue].CurrentHierarchyMember.get('Baseline start date')","format_string":"yyyy-mm-dd","annotations":{"group":"Issue properties"}},{"name":"Issue End date","dimension":"Measures","formula":"[Issue].CurrentHierarchyMember.get('End date')","format_string":"yyyy-mm-dd","annotations":{"group":"Issue properties"}},{"name":"Issue Progress","dimension":"Measures","formula":"[Issue].CurrentHierarchyMember.get('Progress')","format_string":"#,##0.00","annotations":{"group":"Issue properties"}},{"name":"Issue Start date","dimension":"Measures","formula":"[Issue].CurrentHierarchyMember.get('Start date')","format_string":"yyyy-mm-dd","annotations":{"group":"Issue properties"}},{"name":"\uc9c4\ud589 \uc77c\uc218","dimension":"Measures","formula":"Sum(\nFilter(\n Descendants([Issue].CurrentMember, [Issue].[Issue]),\n [Measures].[Issues created] > 0 \n), \n [Measures].[\uacc4\ud68d \uc77c\uc218] * [Measures].[Issue Progress] \n * 0.01\n\n)","format_string":"#,##0.00"},{"name":"\uacc4\ud68d \uc77c\uc218","dimension":"Measures","formula":"Sum(\nFilter(\n Descendants([Issue].CurrentMember, [Issue].[Issue]),\n [Measures].[Issues created] > 0 \n), \nDateDiffDays([Measures].[Issue Start date] ,\n[Measures].[Issue End date]\n) + 1\n)","format_string":"#,##0"},{"name":"\uc2e4\uc81c\uc9c4\ud589\ub960","dimension":"Measures","formula":"Avg(\nFilter(\n Descendants([Issue].CurrentMember, [Issue].[Issue]),\n [Measures].[Issues created] > 0\n), \n \nCASE WHEN [Measures].[\uc9c4\ud589 \uc77c\uc218] = 0\nTHEN\n0\nWHEN [Measures].[\uacc4\ud68d \uc77c\uc218] = 0 \nTHEN\n0\nWHEN [Measures].[\uacc4\ud68d \uc77c\uc218] > 0 AND \n[Measures].[\uc9c4\ud589 \uc77c\uc218] > 0\nTHEN\n [Measures].[\uc9c4\ud589 \uc77c\uc218]\n / [Measures].[\uacc4\ud68d \uc77c\uc218]\nEND\n)","format_string":"#0.00%"},{"name":"\uacc4\ud68d\uc9c4\ud589\uc77c\uc218 (baseline)","dimension":"Measures","formula":"Sum(\nFilter(\n Descendants([Issue].CurrentMember, [Issue].[Issue]),\n [Measures].[Issues created] > 0 \n),\n\nCASE WHEN DateBetween(now(), [Measures].[Issue Baseline Start date], [Measures].[Issue Baseline End date]) \nTHEN\nDateDiffDays([Measures].[Issue Baseline Start date], now()) + 1\nWHEN DateBetween([Measures].[Issue Baseline End date], [Measures].[Issue Baseline Start date], now()) \nTHEN\nDateDiffDays([Measures].[Issue Baseline Start date], [Measures].[Issue Baseline End date]) + 1\nEND\n)","format_string":"#,##0.00"},{"name":"\uacc4\ud68d\uc9c4\ud589\uc728 (baseline)","dimension":"Measures","formula":"Avg(\nFilter(\n Descendants([Issue].CurrentMember, [Issue].[Issue]),\n [Measures].[Issues created] > 0 \n), \n \nCASE WHEN [Measures].[\uacc4\ud68d\uc9c4\ud589\uc77c\uc218 (baseline)] = 0\nTHEN\n0\nWHEN [Measures].[\uacc4\ud68d\uc77c\uc218 (baseline)] = 0 \nTHEN\n0\nWHEN [Measures].[\uacc4\ud68d\uc77c\uc218 (baseline)] > 0 AND \n[Measures].[\uacc4\ud68d\uc9c4\ud589\uc77c\uc218 (baseline)] > 0\nTHEN\n [Measures].[\uacc4\ud68d\uc9c4\ud589\uc77c\uc218 (baseline)]\n / [Measures].[\uacc4\ud68d\uc77c\uc218 (baseline)]\nEND\n)","format_string":"#0.00%"},{"name":"\uacc4\ud68d\uc77c\uc218 (baseline)","dimension":"Measures","formula":"Sum(\nFilter(\n Descendants([Issue].CurrentMember, [Issue].[Issue]),\n [Measures].[Issues created] > 0 \n), \nDateDiffDays([Measures].[Issue Baseline Start date] ,\n[Measures].[Issue Baseline End date]\n) + 1\n)","format_string":""},{"name":"\uc9c0\uc5f0\uc728","dimension":"Measures","formula":"Avg(\nFilter(\n Descendants([Issue].CurrentMember, [Issue].[Issue]),\n [Measures].[Issues created] > 0 \n), \n\n([Measures].[\uacc4\ud68d\uc9c4\ud589\uc728 (baseline)] - [Measures].[\uc2e4\uc81c\uc9c4\ud589\ub960])\n)","format_string":"#0.00%"},{"dimension":"Measures","name":"Open issues","format_string":"#,##0","formula":"CASE WHEN [Issue].CurrentMember.Level.Name <> 'Issue' THEN\n Cache(\n NonZero(Sum(PreviousPeriods([Time].CurrentHierarchyMember),\n Cache([Measures].[Issues created]\n - [Measures].[Issues resolved])\n ))\n + [Measures].[Issues created]\n - [Measures].[Issues resolved]\n )\nWHEN [Time].CurrentHierarchyMember IS [Time].CurrentHierarchy.DefaultMember\nTHEN NonZero([Measures].[Issues due])\nELSE\n -- optimized formula for drill through Issue\n NonZero(IIF(\n DateBeforePeriodEnd(\n [Issue].CurrentMember.get('Created at'),\n [Time].CurrentHierarchyMember) AND\n NOT DateBeforePeriodEnd(\n [Issue].CurrentMember.get('Resolved at'),\n [Time].CurrentHierarchyMember),\n ([Time].CurrentHierarchy.DefaultMember,\n [Measures].[Issues created]),\n 0\n ))\nEND","annotations":{"group":"Default"}},{"dimension":"Measures","name":"Average resolution days","format_string":"#,##0.00","formula":"CASE WHEN [Measures].[Issues resolved] > 0 THEN\n [Measures].[Total resolution days] / [Measures].[Issues resolved]\nEND","annotations":{"group":"Default"}},{"name":"project-baseline-enddate-timestamp","dimension":"Measures","formula":"Max(\nFilter(\n Descendants([Issue].CurrentMember, [Issue].[Issue]),\n [Measures].[Issues created] > 0 \n), \nDateToTimestamp([Issue].CurrentHierarchyMember.get('Baseline end date'))\n)","format_string":""},{"name":"\uacc4\ud68d\uc644\ub8cc\uc77c","dimension":"Measures","formula":"TimestampToDate([Measures].[project-baseline-enddate-timestamp])","format_string":"yyyy-mm-dd"},{"name":"project-enddate-timestamp","dimension":"Measures","formula":"Max(\nFilter(\n Descendants([Issue].CurrentMember, [Issue].[Issue]),\n [Measures].[Issues created] > 0 \n), \nDateToTimestamp([Issue].CurrentHierarchyMember.get('End date'))\n)","format_string":""},{"name":"\uc2e4\uc81c\uc644\ub8cc\uc77c","dimension":"Measures","formula":"TimestampToDate([Measures].[project-enddate-timestamp])","format_string":"yyyy-mm-dd"},{"name":"project-baseline-startdate-timestamp","dimension":"Measures","formula":"Min(\nFilter(\n Descendants([Issue].CurrentMember, [Issue].[Issue]),\n [Measures].[Issues created] > 0 \n), \nDateToTimestamp([Issue].CurrentHierarchyMember.get('Baseline start date'))\n)","format_string":""},{"name":"\uc9c0\uc5f0\uc77c %","dimension":"Measures","formula":"CASE WHEN ([Measures].[project-baseline-enddate-timestamp]= \n[Measures].[project-baseline-startdate-timestamp])\nTHEN\n([Measures].[project-enddate-timestamp] - \n[Measures].[project-baseline-enddate-timestamp]) / 86400\nELSE\n([Measures].[project-enddate-timestamp] - \n[Measures].[project-baseline-enddate-timestamp]) / ([Measures].[project-baseline-enddate-timestamp]- \n[Measures].[project-baseline-startdate-timestamp])\nEND","format_string":"#0.00%"}]
}

Step 5)  대시보드 생성하기

EazyBI >> Account 이름 >> Dashboards

  • 대시보드 이름 정의

  • Add report >> 보고서 선택

  • 저장하기

Step 6) 대시보드 접근 권한 설정

EazyBI >> Account 이름 >> 메뉴 >> Account users

  • Add account user 항목에 접근 권한 부여

Step 7) 대시보드 열기

EazyBI >> Account 이름 >> Dashboards >> 대시보드 이름

Dashboard 소스 수정

EazyBI >> Account 이름 >> Source Data >> Edit

  • Jira 데이터 import를 수정한다.


Dashboard 데이터 분석 수정

EazyBI >> Account 이름 >> Report 이름

  • 레이블 없음