今回はプロジェクト管理ツールであるJIRAのデータをTableauに自動で連携させタスクにかけた時間を可視化した事例の紹介です
JIRAとは課題管理やプロジェクト管理に用いられるツールで
truestarでは細かいタスクをこれで管理し作業のステータスや作業ごとのやり取りをJIRAベースで管理しています
そのJIRAにはタスクごとにどの程度時間を使ったのかを記録できる「作業ログ」という機能で
各タスクにどの程度の時間をかけているかを記録できます
今回JIRAを使って記録した作業時間のログを自動で収集加工し
Tableauにそのデータを取り込む仕組みを作って日々データが自動更新されるフローを作りました。
データのETL処理には加工や分析に特化したETLツールの1つであるAlteryxというツールを使っています
大きな流れは以下です
- URLからJIRAデータを自動で取得
- Alteryxが自動でETL処理、Tableau Serverにパブリッシュ
- Tableau でJIRAのデータを可視化
1.URLからJIRAデータを自動で取得
細かなJIRAの機能は割愛しますが各タスクのデータはタスクの検索結果をCSV出力するという機能があり
これにはユニークなURLが振られています、特定のURLにアクセスすればタスクの検索結果をCSVファイルとしてダウンロードすることができます
今回は「時間管理ログ出力」フィルタを作りこのURLにアクセスしてCSVを拾います
URLにアクセスできればなんでもよいのですが今回はここから自動でURLを抜くのにPythonを使いました
簡単にですが以下のようなイメージです
流れは至極簡単でJIRAの認証を通してURLアクセス後
ファイルを特定のフォルダに吐き出しているだけです
このプログラムWindowsのスケジュール機能で定期的に動かしています
2.Alteryxが自動でETL処理、Tableau Serverにパブリッシュ
JIRAからひっぱってきたデータはタスクに関連するあらゆるデータを含んでいます
そのままではTableauに取り込みづらいためAlteryxで必要なデータに加工をしてあげます
加工の処理もそれほど複雑なことはしていませんが自動化のための肝は2つです
1つめはJIRAの作業ログデータの特徴として1つのタスクに複数の作業ログが記録されている場合
データは「作業ログ」という同名の列を複数持つことになります、その数はタスクの作業ログの数に比例するので何個あるかは不明です
CSVデータのイメージ(*あくまでイメージですので実際の中味とは異なります)
タスク名称,作業ログ,作業ログ,作業ログ…
tableau-idの記事を書く, ドラフト版作成:1時間, 第1項作成:2時間, 成果物チェック:2時間,…
このデータをAlteryxに読み込ませるとAlteryxが忖度してくれて
「作業ログ1,作業ログ2,作業ログ3…」と勝手に連番をつけて読み込まれます
Tableauで処理する都合上、この作業ログというデータはこのように横にくっつく形ではなく
縦に積み上げてデータを持つ形が理想です
(縦に持っていたほうが作業ログ時間の”集計処理”などが楽なので)
なので必要な列データを選択するタイミングで”作業ログ~”という名称を持つデータをまとめて取り込み
「REGEX_Match([Name],”作業ログ.*”)」
対象の列を絞り込んだら作業ログをまとめて縦持ちにしておきます
2つ目は単純にAlteryxで処理したデータを最後にAlteryxでTableau Serverにパブリッシュしてしまう
という点
Tableau Serverへのパブリッシュは「Publish to Tableau Server Tool」を使いました
このAlteryxの処理を自動で実行してくれるAlteryx ServerにあげることでETL処理を自動化します
3.Tableau でJIRAのデータを可視化
データの準備ができたら本題ですが
TableauでJIRAの作業ログデータを可視化するときの肝は2つです
先ほどパブリッシュしたTableauServerのデータソースとライブ接続すること(まぁ当然ですね)
もうひとつは、JIRAの作業ログデータは「;(セミコロン)」で区切られた値で
1つのカラムに複数の情報をまとめて持っているので、それを分解してやることです
今回はその分解をTableauでやらせています(事前に処理もできそうですが)
「作業記録時のコメントデータ;記録した日時(yyyy/mm/dd hh:mm;ユーザ名;記録した時間(ms)」
こんな感じで持っていますさらに「作業記録時のコメントデータ」には改行情報も入ってきます
なのでTableauでそのまま取り込むとこんな感じです
フィジビリティ調査
内容精査
完了連絡;2018/01/30 16:44;Toshihiro.Rokusya;1800
改行コードをどのように処理するかは画面でどう使うかにもよるきがしますが
今回は改行コードを空白に置換して1行にしました
改行コードを削ったら後は分解です、以下で処理できます
「REGEXP_EXTRACT_NTH([作業ログ(改行コード削除)],'(.);(.+);(.);(\d+)’,1)」
ようするに「;」を目印にしてどの位置(↑この場合は1つめ)にあるデータを抜き出すかを決めています
これだけです。
この場合は1つめなので一番頭の作業コメントを抜いています、
以降は後ろの番号をかえたそれぞれの計算フィールドをつくればOKです
「2:作業日時」
DATETIME(REGEXP_EXTRACT_NTH([作業ログ(改行コード削除)],'(.);(.+);(.);(\d+)’,2))
*データを時間に変換もしてます
「3:作業者」
REGEXP_EXTRACT_NTH([作業ログ(改行コード削除)],'(.);(.+);(.);(\d+)’,3)
「4:作業時間(時)」
INT(REGEXP_EXTRACT_NTH([作業ログ(改行コード削除)],'(.);(.+);(.);(\d+)’,4))/60/60
*データを”時”に直し数値に変換
データがそろったら後は煮るなり焼くなり、、、ダッシュボード化
今回はプロジェクトごとに月別のタスク時間を積み上げて
月に設定された上限内に収まっているかどうかを可視化しました
このデータを日時で自動更新されるようにCSVデータの取得、データ加工処理をスケジュールし
Tableau Serverからダッシュボードをサブスクリプションすることで
定期的にメール報告としてあがるようにしています
JIRAには作業ログ以外にもタスクに関連するいろいろな情報を持っているので
JIRAのデータと連携できると用途はいろいろと広がりますね
—
Toshihiro Rokusya
truestar inc.