カオナビ SMART REVIEW で コンピテンシーチェック の ワークフロー を作ってみた

#始めに
カオナビ は 1,200社 以上に導入実績がある 有償 の クラウド人材管理システム。

カオナビ では前提知識や説明が無くても、ブラウザで分かりやすい UI により開発出来る。

分かりやすい UI の為に、特に説明する必要も無い。

今回 カオナビ にて Webフォーム を作成した。

その際に気付いたことをメモしていきたい。

#作業端末ならびに動作環境
##Windows
Windows 7 Professional Service Pack 1
メモリー 8GB
64bit

##ブラウザ
Google Chrome 74.0.3729.131
Internet Explorer 11.0.9600.19326

Internet Explorer 11 でも、以降の一連の操作は可能だが
フォーム設計ならびに権限設計において、Google Chrome よりも明確に遅い為
Google Chrome の使用をお奨めする。

##Excel
Microsoft Office Home and Business 2010
Microsoft Excel version 14.0.7232.5000 (32ビット)

#1. やりたい事
会社でコンピテンシーチェックならびに個人目標を管理する仕組みを カオナビ を使って作りたい。

今回は カオナビ の SMART REVIEW で コンピテンシーチェック の ワークフロー を作ってみた。
![fig.1 workflow](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/271734/3b0a5523-8898-cf09-e060-668f2c1ef9ed.png "fig.1 workflow")

一般社員が年に1回、コンピテンシーチェックを行い課長に報告。
課長は取りまとめて部長に報告。

コンピテンシーは「業務遂行能力の高い人物（ハイパフォーマー）に共通する行動特性」の事。

良い行動 (推奨される行動) と悪い行動 (避けるべき行動) が有り。

入力フォームは、以下のイメージ。
![fig.2 input form](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/271734/e4f74aa9-b988-1acc-678e-65af725fb48d.png "fig.2 input form")

#2. カオナビ 事前作業
ワークフロー対象者ならびに参加者の登録が必要。
カオナビ管理者でログイン。

##2.1 基本情報の登録
 [SETUP] ボタン→「管理者機能トップ」画面→ [CSV入出力] リンク

「CSV入出力」画面の基本情報
 [ダウンロード] リンクで、既存の情報をダウンロード。
 [アップロード] リンクで、新規の情報をアップロード。

##2.2 ユーザーの登録
 [SETUP] ボタン→「管理者機能トップ」画面→ [ユーザー管理] リンク

「ユーザー管理」画面→ [新しいユーザーを作る] ボタン

「新しいユーザーを作る」画面
ログインID (メールアドレス) を入力。
先の基本情報 (氏名 (フリガナ) ) を [紐づけメンバー] プルダウンリストから選択。
アカウントの種類を [アカウントの種類] プルダウンリストから選択。

##2.3 アカウントの種類
「管理者ユーザー」と「一般ユーザー」有り。

開発と運用の分離の観点から、入力するだけならば「一般ユーザー」を選択。
開発をするならば「管理者ユーザー」を選択。

fig.1 workflow の 一般社員1～3、課長1～2、部長1は「一般ユーザー」。

開発者 (これからのWebフォームを作成する人は開発者) は「管理者ユーザー」。

以下の作業は「管理者ユーザー」で実施。

#3. SMART REVIEW 対象者設定
対象者とはワークフロー上、最初にフォームに記入をする人。
対象者はフォーム記入前に、上司を選択。
フォーム記入後に [確定する] ボタン。

後述の SMART REVIEW ワークフロー設計にて、対象者の上司を「課長」と設定。

「SMART REVIEW」画面→追加したイベントの右上の [メニュー] ボタン→ [対象者設定] リンク。

画面下部にユーザー顔写真。

画面中央部にユーザー顔写真をドラッグ＆ドロップ。

画面左上部、[対象者の設定を終了する] リンク。

対象者設定が完了。

#4. SMART REVIEW 参加者候補設定
参加者候補とはワークフロー上の上司。
対象者記入を受けて、上司の記入ならびに [確定する] あるいは [差し戻す] 人。

後述の SMART REVIEW ワークフロー設計にて、参加者候補を [課長]、[部長] と設定。

「SMART REVIEW」画面→追加したイベントの右上の [メニュー] ボタン→ [参加者候補設定] リンク

画面下部にユーザー顔写真。

画面中央部にユーザー顔写真をドラッグ＆ドロップ。

画面左上部、[参加者候補の設定を終了する] リンク。

対象者設定が完了。

#5. SMART REVIEW イベント編集
「SMART REVIEW」画面→追加したイベントの右上の [メニュー] ボタン→ [イベント編集] リンク

「イベントを編集」画面
[保存] ボタン

イベント編集が完了。

#6. SMART REVIEW ワークフロー設計
ワークフローには、フェーズ、アクション(以下で作成)、対象者、参加者(以下で作成)がある。

「SMART REVIEW」画面→追加したイベントの右上の [メニュー] ボタン→ [ワークフロー設計] リンク

「ワークフロー設計」画面
既に「開始前」フェーズ、「実施中」フェーズ、「終了」フェーズ有り。
「実施中」フェーズがアクティブ。

##6-1. アクション作成
「実施中」フェーズ、以下の順にアクションを作成。

・[対象者記入]
・[課長記入]
・[部長記入]

「実施中」フェーズ→ [アクション追加] ボタン
「アクション追加」画面
「対象者記入」と入力して [保存] ボタン。

同様に順に [課長記入] 、[部長記入] を作成する。

##6-2. 参加者を追加
画面右部、[対象者] 欄には、既に [対象者] オブジェクトがある。

ここで [対象者] オブジェクトは、実体ではなく概念。
先述の SMART REVIEW 対象者設定にて、指定したユーザーが実体。

 [参加者] 欄に以下の参加者を追加。

・[課長]
・[部長]

 [参加者] 欄→ [参加者を追加] ボタン

「参加者追加」画面
「課長」と入力して[保存]ボタン

同様に「部長」を作成。

 [課長] オブジェクト、[部長] オブジェクトが完成。

ここで [課長] 、[部長] の各オブジェクトは、実体ではなく概念。
先のSMART REVIEW、参加者候補設定にて、指定したユーザーが実体。

##6-3. アクションに対象者、参加者を割り当てる
 [対象者記入] アクションに、[対象者] 欄、[対象者] オブジェクトをドラッグ＆ドロップ。
 [課長記入] アクションに、[参加者] 欄、[課長] オブジェクトをドラッグ＆ドロップ。
 [部長記入] アクションに、[参加者] 欄、[部長] オブジェクトをドラッグ＆ドロップ。

「ワークフロー設計」画面→画面右上部、[保存] ボタン

ワークフロー設計が完成。

#7. SMART REVIEW 権限設計
権限設計では、誰がどのアクションの時に、どうなるかを設計。

誰が (3パターン)
・一般社員 (= [対象者] )
・\[課長] (参加者候補)
・\[部長] (参加者候補)

どのアクションの時 (3パターン)
・[対象者記入]
・[課長記入]
・[部長記入]

どうなるか (3パターンから1つを選択)
・[閲覧不可]
・[閲覧可能]
・[編集可能]

誰が (3パターン) * どのアクションの時 (3パターン) の 9パターン に対して
どうなるか (3パターンから1つを選択) を設計。

基本として以下の図に従う。
![fig3.authority design](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/271734/67e85a19-3b10-2c78-5b42-0b298d64482c.png "fig3.authority design")

「SMART REVIEW」画面→追加したイベントの右上の [メニュー] ボタン→ [権限設計] リンク

「権限設計」画面

画面下部、参加者欄
・[対象者] ボタン
・[課長] ボタン
・[部長] ボタン

画面下部、アクション欄、
・[対象者記入] ボタン
・[課長記入] ボタン
・[部長記入] ボタン

デフォルトでは、[対象者] と [対象者記入] ボタンが押されている (以下表記、対象者-対象者記入) 。

画面上部、ワークフローの [インジケータ] は、現在ワークフローがどこまで進んでいるかを表示。
・[対象者] オブジェクト
・[課長] オブジェクト
・[部長] オブジェクト

デフォルトでは、上記3つ共に [未設定] と表示されている状態。

ここから、9パターンすべてに対して、どうなるかを設定。

まず、対象者-対象者記入。

実際のワークフローにおける入力を考察。
[対象者] は [対象者記入] する時に、[課長] オブジェクトを選択 (= 編集) して「確定する」。

従って、ここで [課長] オブジェクトは [編集可能] 。

 [課長] オブジェクトにマウスオーバー→ [歯車] ボタン
 [編集可能] を選択。

 [編集可能] を選択すると [課長] オブジェクト の 背景色が アクアマリン (Aquamarine) 色。

 [編集可能] は 背景色が アクアマリン (Aquamarine) 色。

[対象者] は [対象者記入] する時に、[対象者] オブジェクトは自分自身で閲覧可能、選択不可。

従って、ここで [対象者] オブジェクトは [閲覧可能] 。

 [閲覧可能] には背景色が付かない。

 [閲覧可能] は見えるだけで、選択などの入力不可。

同様に [部長] オブジェクトは [閲覧可能] とする。

以上により、対象者-対象者記入の権限設定が完了。

対象者-課長記入は、[対象者] 、[課長] 、[部長] の各オブジェクトを[閲覧可能]とする。
対象者-部長記入は、[対象者] 、[課長] 、[部長] の各オブジェクトを[閲覧可能]とする。

以上により、対象者の権限設定が完了。

同様に課長については、課長-課長記入の権限設定にて、[部長] オブジェクトを [編集可能] 。
それ以外は [閲覧可能] 。

部長ですが、ワークフロー上の最終記入者となり、次はありませんから、すべて [閲覧可能] 。

最後に画面右上部の [保存] ボタン。

以上により権限設定が完了。

権限設定は大変なようですが、オブジェクトをクリックすると選択状態。
ひきつづき他のオブジェクトをクリックすることで複数選択状態。

その状態で選択したオブジェクトにマウスオーバーすると [歯車] ボタン。
 [歯車] ボタンをクリックすることで複数の設定をまとめて実施可能。

選択状態の解除は画面右上部、[解除する] リンク。

#8. SMART REVIEW ワークフローを実行
肝心のフォーム設計はまだですが、以上の設定でワークフロー実施可能。
ゼロオブジェクトワークフロー。

「SMART REVIEW」画面
追加したイベントのアイコンの中の旗マーク (= ステータス)「開始前」にマウスオーバー。
 [▼] ボタン→「実施中」。

##8-1. 一般社員1→課長1
開発者ユーザーをログアウトして、一般社員1でログイン。

画面右上、TODOに赤丸が表示されているのでクリック。
今回作成されたイベントに赤丸が表示されているのでクリック。

ゼロオブジェクトの入力フォーム、課長がアクアマリン色の為、リストから課長1を選択。

 [確定する] ボタン。

よろしいですか [はい] ボタン。

対象となる参加者にメールを送信しますか?
\[はい] (= 課長1 にメールが送信されます) 、\[いいえ] (= 課長1 にメールが送信されません)
いずれか選択。

一般社員1をログアウト。

##8-2. 課長1→部長1
課長1でログイン。

画面右上、TODOに赤丸が表示されているのでクリック。
今回作成されたイベントに赤丸が表示されているのでクリック。

一般社員の時には、ゼロオブジェクトの入力フォームが直接表示されますが、課長の場合は一覧表示。

課長記入待ちの対象者に赤丸がついているので、対象者のリンク。

ゼロオブジェクトの入力フォーム、部長がアクアマリン色の為、リストから部長1を選択。

 [確定する] ボタン。

よろしいですか [はい] ボタン。

対象となる参加者にメールを送信しますか?
\[はい] (= 部長1 にメールが送信されます) 、\[いいえ] (= 部長1 にメールが送信されません)
いずれか選択。

課長1をログアウト。

##8-3. 部長1→完了
部長1でログイン。

画面右上、TODOに赤丸が表示されているのでクリック。
今回作成されたイベントに赤丸が表示されているのでクリック。

一覧表示、部長記入待ちの対象者に赤丸が付いているので、対象者のリンク。

部長1は、ワークフロー上、次は無いので、そのまま [確定する] ボタンを押す。(メール送信無し。)

完了。

#9. ここで仕様変更
![fig.4 manager's voice](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/271734/ff5e35f3-54e3-f977-cbb4-70ba29164b18.png "fig.4 manager's voice")

#10. SMART REVIEW フォーム設計
##10-1. フォーム設計の基本事項
フォーム設計では、オブジェクトを画面に配置。
カオナビには以下の12種類のオブジェクト有り。

・テキストエリア
・ナンバーボックス
・プルダウンリスト
・ラジオボタン
・チェックボックス
・メッセージ
・ファイルアップロード
・カレンダー
・スペースエリア
・計算式
・参照タグ
・判定式

計算式はフォームの入力を終えたとき、自動保存が実行され、自動保存後に計算結果を表示。
上記、正確には入力の無い状態が3～5秒継続で自動保存。

オブジェクトの最小幅は下記の通り。
![fig.5 minimum width](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/271734/9fa0d438-6e6d-9403-daca-450cbea502fc.png "fig.5 minimum width")

オブジェクトの最小幅は、フォーム幅の13分の1。
オブジェクトの幅は、この最小幅の整数倍で設定可能。

オブジェクトの最大幅は最小幅の13倍(フォームの幅一杯)。

配置の基本は、左から右、上から下。
知っておきたい下記のルール有り。
![fig.6 vertically line up](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/271734/04bf2f20-2dba-37b8-48be-1b67e28a4819.png "fig.6 vertically line up")

このような場合、スペースエリアを使用。
![fig.7 vertically line up solution](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/271734/00f6ff3c-aee5-54c8-48b3-74bf3b1f6966.png "fig.7 vertically line up solution")

空行を入れたい場合。
![fig.8 empty line line up](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/271734/a05f46e6-ed64-ea98-588b-13a43136888a.png "fig.8 empty line line up")

このような場合も、スペースエリアを使用。
![fig.9 empty line line up solution](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/271734/7b1395a9-f097-342d-2b51-bbbfd6d12b19.png "fig.9 empty line line up solution")

別の表現をすれば、1行におさまらなくなったオブジェクトから、次の行の先頭。

スペースエリアは、その役割からも明らかなように、権限設計は不要 (いつでも[閲覧可能])。

後はオブジェクトを配置して、マウスオーバー→ [歯車] ボタン →オブジェクトの設定の子画面。

オブジェクトの設定の子画面でオブジェクトの設定。

##10-2. チェックボックスについて
一般的にはチェックボックスは、いくつかあるオプションから複数項目を選択するのに使用。

個人的に分かりづらかった為、チェックボックスの単一選択、複数選択を説明。

###10-2-1. チェックボックス、単一選択
![fig.10 checkbox single selection](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/271734/83a7b63d-6200-1aa2-56d9-1baabdf0bef1.png "fig.10 checkbox single selection")

単一選択は分かりやすい。

チェックボックスの値は、パーツに設定する選択肢の値そのもの。

fig.10 checkbox single selection では「選択肢1」となる。

###10-2-2. チェックボックス、複数選択
![fig.11 checkbox multiple selection](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/271734/b6a8ca33-84d2-1cff-8370-f756e8a7ab57.png "fig.11 checkbox multiple selection")

複数選択は分かりづらい。

fig.11 checkbox multiple selection では「選択肢1」「選択肢2」が改行される。

計算式において、段を指定。

段はデフォルトで1であるが、これを2に変更。

もし段が1ならば、「選択肢1」のみしか表示されない。

「選択肢1」のみ表示されている状態で、「選択肢1」あたりにマウスオーバーすると、
ツールチップ内で「選択肢1」「選択肢2」が改行され表示される。

###10-2-3. チェックボックス、個人的な結論
計算式における チェックボックス の チェック有無の判定が難しい為、
一つの選択肢ごとに一つのチェックボックスオブジェクト。

つまり単一選択のみ。

###10-2-4. 計算式における チェックボックス の チェック有無の判定
計算式における チェックボックス の チェック有無の判定には、やり方が2つ有り。

1つめ、if([チェックボックス],"チェック有り","チェック無し")

2つめ、if([チェックボックス]="","チェック無し","チェック有り")

1つめのやり方の場合、パーツに設定する選択肢が "0" の場合、正しく判定されない。

そのような選択肢が設定されないのであれば、1つめのやり方が一番シンプル。

そのような選択肢が設定される可能性があるのであれば、2つめのやり方が良。

プルダウンリストの [指定なし] についても同じような判定をすることができる。

##10-3. 計算式と判定式にて使用可能な要素
演算を行う為、計算式と判定式オブジェクトを使用。

計算式と判定式にて使用可能な要素について解説。

###10-3-1. 数値
0123456789 、および小数を表すピリオド(.)

###10-3-2. 文字(列)
文字(列)は半角ダブルクォーテーション(")で囲う。

###10-3-3. 四則演算記号
( ) + ? / *

###10-3-4. 等号、不等号
<, >, =, <=, >=, <>

###10-3-5. 計算式(定数)
計算式として定数を持たせる事も可能。
設定項目「パーツに設定する計算式」に、数値や文字(列)を直接指定。

###10-3-6. 計算式(定数)、数値
数値の例：123

###10-3-7. 計算式(定数)、文字(列)
文字(列)は半角ダブルクォーテーション(")で囲む(シングルクォーテーション不可)。

空文字の例：""
文字の例："あ"
文字列の例："文字列"

注意事項、うっかり全角ダブルクォーテーション(”)で囲うと結果が表示されない。

オブジェクトの設定の子画面では、半角ダブルクォーテーション(")と
全角ダブルクォーテーション(”)の違いに気づきにくい。

###10-3-8. 関数
・average
・countif
・datedif
・if
・max
・round
・rounddown
・roundup
・sum
・today

###10-3-9. オブジェクトの値
[ラベル]の形式で、フォーム内のオブジェクトの値を計算式で使用可能。

##10-4. 関数について
この記事の中で使用する関数を解説。

###10-4-1. average
average は 平均を返す。
注意事項、average では文字(列)は無効。

ラジオボタンの 選択無し や プルダウンリスト の \[指定なし] は
計算対象外として計算。

構文：average([ラベル],～中略～,[ラベル])

###10-4-2. countif
countif は 条件に合致する項目数を返す。
検索条件には等号、不等号を使用。

構文：countif(条件,[ラベル],～中略～,[ラベル])

注意事項、countifでは[ラベル],～中略～,[ラベル]部分で改行すると結果が表示されない。

【NG】結果が表示されない例1：
countif(条件,
[ラベル]
,[ラベル]
,[ラベル])

【NG】結果が表示されない例2：
countif(条件,[ラベル]
,[ラベル]
,[ラベル])

【NG】結果が表示されない例3：
countif(条件,[ラベル],
[ラベル],
[ラベル])

【NG】結果が表示されない例4：
countif(条件,[ラベル],[ラベル],[ラベル]
)

###10-4-3. if
if は条件の結果値が真の場合と偽の場合で、値を設定。
値の他に更なる条件を指定可能。
更なる条件を指定した場合、ネストになる。

構文：if(条件,真の場合,偽の場合)

###10-4-4. rounddown
rounddown は 指定した桁数より下位を切り捨て。
表示させる小数点以下桁数がゼロならば、小数点1桁を切り捨て。

構文：rounddown([ラベル],表示させる小数点以下桁数)

##10-5. 判定式
判定式では、条件 を if 無しで書くことが出来る。

判定順番は上から下。

判定式に合致したものを表示。

判定式は、計算式と違い以下の設定項目が無い。

・段
・単位
・表示する小数点以下の桁数

###10-5-1. 判定式 rounddown average の例
条件、カンマ、値。

```text:判定式　rounddown　average　の例
rounddown(average([項目1],[項目2],[項目3]),0)=0,"C"
rounddown(average([項目1],[項目2],[項目3]),0)=1,"B"
rounddown(average([項目1],[項目2],[項目3]),0)=2,"A"
rounddown(average([項目1],[項目2],[項目3]),0)=3,"S"
rounddown(average([項目1],[項目2],[項目3]),0)=4,"SS"
```

###10-5-2. 計算式と判定式の使い分け
判定式は if の 入れ子(以降、ネスト) の代用となり得るが、最後の else が無い。
その為、最後の else がある計算式の if の方が融通が利く。

##10-6. 計算式

###10-6-1. 計算式の設定項目、表示する小数点以下の桁数について
計算式の設定項目、表示する小数点以下の桁数のデフォルト値は 1、
特に意識する必要がなければ、デフォルト値を使用。

表示する小数点以下の桁数より下位の桁については四捨五入となる。

場合によっては、計算の途中結果の保持でデフォルト値よりも大きく取る必要有り。

後述の [全体の平均] 計算式 において、表示する小数点以下の桁数を3としている。

###10-6-2. 計算式 if rounddown average の例
全てを1行で書くことが一般的かもしれない。
個人的な結論として、if の ネスト については、後で見直したり、手を入れる時の為、
半角スペース 2個 ずつ の インデントで表現。

```text:計算式　if　rounddown　average　の例
if(rounddown(average([項目1],[項目2],[項目3]),0)=0,
  "C",
  if(rounddown(average([項目1],[項目2],[項目3]),0)=1,
    "B",
    if(rounddown(average([項目1],[項目2],[項目3]),0)=2,
      "A",
      if(rounddown(average([項目1],[項目2],[項目3]),0)=3,
        "S",
        if(rounddown((average([項目1],[項目2],[項目3]),0)=4,
          "SS",
          ""
        )
      )
    )
  )
)
```

###10-6-3. 計算式 countif 不等号 の例
等号、不等号の左辺に数値を記述するが、数値を右辺に持ってきても同様。
但し、数値を左辺から右辺に持っていく時、不等号ならばその向きに注意。

```text:計算式　countif　不等号　の例
countif(1<=,[項目1],[項目2],[項目3])
```

###10-6-4. 計算式 countif 等号 の例
一致する文字(列)の項目数を数えたい場合。

```text:計算式　countif　等号　の例
countif(文字(列)=,[項目1],[項目2],[項目3])
```

文字(列)の部分に数値を指定すれば、数値の場合も同様。

等号は省略不可。

注意事項、文字(列)の場合、文字(列)を半角ダブルクォーテーションで囲うと結果が表示されない。
文字(列)を半角ダブルクォーテーションで囲わずに指定。

後述の [全体の面談] では、計算式(定数)を使用して、一致する文字(列)の項目数を数えている。

##10-7. 深い if ネスト の解消
[項目1] から [項目10] のいずれかに 値が有るか判定し
値が有れば "有り"、値が無ければ "無し" と 出力したいとする。

![fig.12 「nesting level 10」 vs 「nesting level 1」](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/271734/8bb77c9e-1067-441c-935f-11d5c08993ea.png "fig.12 「nesting level 10」 vs 「nesting level 1」")

fig.12 「nesting level 10」 vs 「nesting level 1」にて
左の 深い if ネスト は、集合関数 を使って 右のように書ける。

個人的な結論として、if ネストは 10未満 にしたい。

目安として、if ネストが 10未満 の段階で集合関数の使用を検討する。
常に有効とはいえないが、上記の例のようにネストが解消できる場合有り。

#11. 仕様変更に基づいた入力フォーム
![fig.13 input form improvement](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/271734/ce6020fe-a5d3-b176-602a-2bb18fafebaa.png "fig.13 input form improvement")

#12. 実際のフォーム設計
初めに注意しておきたい事、フォーム設計はこまめに保存。
セッションが切れると、それまでのフォーム設計が失われる為。
画面右上部に保存ボタン有り。

以下、fig.13 input form improvement の画像に基づいて各項目を説明。

##12-1. 項目① [インジケータ]
ワークフローの [インジケータ] は、現在ワークフローがどこまで進んでいるかを表示。
既に以下のオブジェクト有り。

・[対象者] オブジェクト
・[課長] オブジェクト
・[部長] オブジェクト

インジケータはワークフロー設計にて自動作成。
SMART REVIEW 権限設計を忘れないように注意 (前述で設定済) 。

ワークフローでは上司を選択、対象者の場合は課長。

##12-2. メッセージ
メッセージは固定文言。

|設定項目|設定内容|
|:---|:---|
|オブジェクトの種類|メッセージ|
|メッセージ|(各メッセージの値)|
|文字サイズ|(各メッセージの文字サイズ)|
|文字色|(各メッセージの文字色)|
|文字横位置|(各メッセージの文字横位置)|
|文字縦位置|(各メッセージの文字縦位置)|

以下のメッセージについて設定。

「～態度（意欲）」
「推奨される行動」
「避けるべき行動」
「入力お疲れさまでした。総合評価は」
「でした。」

##12-3. 項目② [推奨される行動n] チェックボックス
1つのコンピテンシーに対して、推奨される行動が3つ有り。

推奨される行動1つに対して、1つのチェックボックスを設定。

|設定項目|設定内容|
|:---|:---|
|オブジェクトの種類|チェックボックス|
|ラベル|推奨される行動n|
|パーツに設定する選択肢|(推奨される行動nの選択肢)|
|このパーツを入力必須にする|はい|
|ラベルを非表示にする|はい|

但し、Cはコンピテンシーの数、n は 1 <= n <= 3 * C。

1番目 (n = 1) のコンピテンシーでは、[推奨される行動1] から [推奨される行動3] まで設定。
C番目 (n = C) のコンピテンシーでは、[推奨される行動3 * C - 2] から [推奨される行動3 * C] まで設定。

ラベルは、フォーム内で一意となるように命名。(命名省略は不可)
ラベルは表示しても良いが、非表示にした方が見た目が良。
ここで入力必須は、この文章を読みましたの意味でチェックしてもらう意図。

##12-4. 項目③ [対象者の評価n] プルダウンリスト
1つの推奨される行動に対して、対象者の評価が1つ有り。

評価には点数が有り。

SS：とても良い は 4
S：良い は 3
A：ふつう は 2
B：悪い は 1
C：かなり悪い は 0

|設定項目|設定内容|
|:---|:---|
|オブジェクトの種類|プルダウンリスト|
|ラベル|対象者の評価n|
|パーツに設定する選択肢|SS：とても良い,4 <br> S：良い,3 <br> A：ふつう,2 <br> B：悪い,1 <br> C：かなり悪い,0|
|このパーツを入力必須にする|はい|
|選択肢の最初に [指定なし] を入れる|はい|
|ラベルを非表示にする|はい|

但し、Cはコンピテンシーの数、n は 1 <= n <= 3 * C。

1番目 (n = 1) のコンピテンシーでは、[対象者の評価1] から [対象者の評価3] まで設定。
C番目 (n = C) のコンピテンシーでは、[対象者の評価3 * C - 2] から [対象者の評価3 * C] まで設定。

評価のプルダウンリストの選択肢の内容は、課長の評価も同一。
同様に 項目④ [課長の評価n] プルダウンリストも設定。
課長の評価も入力必須で設定。

##12-5. 項目⑤ [まとめの評価n] 計算式
1つのコンピテンシーに対して、まとめの評価が1つ有り。
対象者と課長の評価を集約した結果表示。

集約方法、対象者と課長の指定されている評価の平均を算出 (小数点1桁を切捨て) 。
0 なら "C"、1 なら "B"、2 なら "A"、3なら "S"、4なら "SS"、それ以外は空文字 ("") 。

|設定項目|設定内容|
|:---|:---|
|オブジェクトの種類|計算式|
|ラベル|まとめの評価n|
|ラベルを非表示にする|はい|
|段|1 (デフォルト値)|
|単位|未入力 (デフォルト値)|
|表示する小数点以下の桁数|1 (デフォルト値)|
|文字サイズ|中|
|文字色|黒色|
|文字横位置|中央|
|文字縦位置|中央|

```text:項目⑤　[まとめの評価n]　パーツに設定する計算式
if(rounddown(average([対象者の評価3n-2],[課長の評価3n-2],[対象者の評価3n-1],[課長の評価3n-1],[対象者の評価3n],[課長の評価3n]),0)=0,
  "C",
  if(rounddown(average([対象者の評価3n-2],[課長の評価3n-2],[対象者の評価3n-1],[課長の評価3n-1],[対象者の評価3n],[課長の評価3n]),0)=1,
    "B",
    if(rounddown(average([対象者の評価3n-2],[課長の評価3n-2],[対象者の評価3n-1],[課長の評価3n-1],[対象者の評価3n],[課長の評価3n]),0)=2,
      "A",
      if(rounddown(average([対象者の評価3n-2],[課長の評価3n-2],[対象者の評価3n-1],[課長の評価3n-1],[対象者の評価3n],[課長の評価3n]),0)=3,
        "S",
        if(rounddown(average([対象者の評価3n-2],[課長の評価3n-2],[対象者の評価3n-1],[課長の評価3n-1],[対象者の評価3n],[課長の評価3n]),0)=4,
          "SS",
          ""
        )
      )
    )
  )
)
```

但し、Cはコンピテンシーの数、n は 1 <= n <= C。

1番目 (n = 1) のコンピテンシーでは、[まとめの評価1] を設定。
 [対象者の評価1] から [対象者の評価3] ならびに
 [課長の評価1] から [課長の評価3] を使用。

```text:1番目　(n=1)　のコンピテンシーの場合
if(rounddown(average([対象者の評価1],[課長の評価1],[対象者の評価2],[課長の評価2],[対象者の評価3],[課長の評価3]),0)=0,
  "C",
  if(rounddown(average([対象者の評価1],[課長の評価1],[対象者の評価2],[課長の評価2],[対象者の評価3],[課長の評価3]),0)=1,
    "B",
    if(rounddown(average([対象者の評価1],[課長の評価1],[対象者の評価2],[課長の評価2],[対象者の評価3],[課長の評価3]),0)=2,
      "A",
      if(rounddown(average([対象者の評価1],[課長の評価1],[対象者の評価2],[課長の評価2],[対象者の評価3],[課長の評価3]),0)=3,
        "S",
        if(rounddown(average([対象者の評価1],[課長の評価1],[対象者の評価2],[課長の評価2],[対象者の評価3],[課長の評価3]),0)=4,
          "SS",
          ""
        )
      )
    )
  )
)
```

C番目 (n = C) のコンピテンシーでは、[まとめの評価C] を設定。
 [対象者の評価3 * C - 2] から [対象者の評価3 * C] ならびに
 [課長の評価3 * C - 2] から [課長の評価3 * C] を使用。

```text:C番目　(n=C)　のコンピテンシーの場合
if(rounddown(average([対象者の評価3*C-2],[課長の評価3*C-2],[対象者の評価3*C-1],[課長の評価3*C-1],[対象者の評価3*C],[課長の評価3*C]),0)=0,
  "C",
  if(rounddown(average([対象者の評価3*C-2],[課長の評価3*C-2],[対象者の評価3*C-1],[課長の評価3*C-1],[対象者の評価3*C],[課長の評価3*C]),0)=1,
    "B",
    if(rounddown(average([対象者の評価3*C-2],[課長の評価3*C-2],[対象者の評価3*C-1],[課長の評価3*C-1],[対象者の評価3*C],[課長の評価3*C]),0)=2,
      "A",
      if(rounddown(average([対象者の評価3*C-2],[課長の評価3*C-2],[対象者の評価3*C-1],[課長の評価3*C-1],[対象者の評価3*C],[課長の評価3*C]),0)=3,
        "S",
        if(rounddown(average([対象者の評価3*C-2],[課長の評価3*C-2],[対象者の評価3*C-1],[課長の評価3*C-1],[対象者の評価3*C],[課長の評価3*C]),0)=4,
          "SS",
          ""
        )
      )
    )
  )
)
```

##12-6. 項目⑥ [まとめの面談n] 計算式
1つのコンピテンシーに対して、推奨される行動が3つ有り、それぞれに評価有り。

対象者と課長の両方の評価を行った1つ以上の推奨される行動で
対象者の評価より課長の評価が悪い方に乖離 (2点以上) した場合
後述の [要面談メッセージ] 計算式(定数) に設定した文字(列)を 赤文字 で表示。

もっとあっさりした仕様でも良いかもと思いながら、今回はこの仕様でトライ。

|設定項目|設定内容|
|:---|:---|
|オブジェクトの種類|計算式|
|ラベル|まとめの面談n|
|ラベルを非表示にする|はい|
|段|1 (デフォルト値)|
|単位|未入力 (デフォルト値)|
|表示する小数点以下の桁数|1 (デフォルト値)|
|文字サイズ|中|
|文字色|赤色|
|文字横位置|中央|
|文字縦位置|中央|

この実装 if の ネスト の 規則性が分かりずらい為
半角スペース 2個 ずつ の インデントで表現。

```text:項目⑥　[まとめの面談n]　パーツに設定する計算式
if([課長の評価3*n-2]>=0,
  if([対象者の評価3*n-2]-[課長の評価3*n-2]>=2,
    [要面談メッセージ],
    if([課長の評価3*n-1]>=0,
      if([対象者の評価3*n-1]-[課長の評価3*n-1]>=2,
        [要面談メッセージ],
        if([課長の評価3*n]>=0,
          if([対象者の評価3*n]-[課長の評価3*n]>=2,
            [要面談メッセージ],
            ""
          ),
          ""
        )
      ),
      if([課長の評価3*n]>=0,
        if([対象者の評価3*n]-[課長の評価3*n]>=2,
          [要面談メッセージ],
          ""
        ),
        ""
      )
    )
  ),
  if([課長の評価3*n-1]>=0,
    if([対象者の評価3*n-1]-[課長の評価3*n-1]>=2,
      [要面談メッセージ],
      if([課長の評価3*n]>=0,
        if([対象者の評価3*n]-[課長の評価3*n]>=2,
          [要面談メッセージ],
          ""
        ),
        ""
      )
    ),
    if([課長の評価3*n]>=0,
      if([対象者の評価3*n]-[課長の評価3*n]>=2,
        [要面談メッセージ],
        ""
      ),
      ""
    )
  )
)
```

但し、Cはコンピテンシーの数、n は 1 <= n <= C。

1番目 (n = 1) のコンピテンシーでは、[まとめの面談1] を設定。
 [対象者の評価1] から [対象者の評価3] ならびに
 [課長の評価1] から [課長の評価3] を使用。

```text:1番目　(n=1)　のコンピテンシーの場合
if([課長の評価1]>=0,
  if([対象者の評価1]-[課長の評価1]>=2,
    [要面談メッセージ],
    if([課長の評価2]>=0,
      if([対象者の評価2]-[課長の評価2]>=2,
        [要面談メッセージ],
        if([課長の評価3]>=0,
          if([対象者の評価3]-[課長の評価3]>=2,
            [要面談メッセージ],
            ""
          ),
          ""
        )
      ),
      if([課長の評価3]>=0,
        if([対象者の評価3]-[課長の評価3]>=2,
          [要面談メッセージ],
          ""
        ),
        ""
      )
    )
  ),
  if([課長の評価2]>=0,
    if([対象者の評価2]-[課長の評価2]>=2,
      [要面談メッセージ],
      if([課長の評価3]>=0,
        if([対象者の評価3]-[課長の評価3]>=2,
          [要面談メッセージ],
          ""
        ),
        ""
      )
    ),
    if([課長の評価3]>=0,
      if([対象者の評価3]-[課長の評価3]>=2,
        [要面談メッセージ],
        ""
      ),
      ""
    )
  )
)
```

C番目 (n = C) のコンピテンシーでは、[まとめの面談C] を設定。
 [対象者の評価3 * C - 2] から [対象者の評価3 * C] ならびに
 [課長の評価3 * C - 2] から [課長の評価3 * C] を使用。

```text:C番目　(n=C)　のコンピテンシーの場合
if([課長の評価3*C-2]>=0,
  if([対象者の評価3*C-2]-[課長の評価3*C-2]>=2,
    [要面談メッセージ],
    if([課長の評価3*C-1]>=0,
      if([対象者の評価3*C-1]-[課長の評価3*C-1]>=2,
        [要面談メッセージ],
        if([課長の評価3*C]>=0,
          if([対象者の評価3*C]-[課長の評価3*C]>=2,
            [要面談メッセージ],
            ""
          ),
          ""
        )
      ),
      if([課長の評価3*C]>=0,
        if([対象者の評価3*C]-[課長の評価3*C]>=2,
          [要面談メッセージ],
          ""
        ),
        ""
      )
    )
  ),
  if([課長の評価3*C-1]>=0,
    if([対象者の評価3*C-1]-[課長の評価3*C-1]>=2,
      [要面談メッセージ],
      if([課長の評価3*C]>=0,
        if([対象者の評価3*C]-[課長の評価3*C]>=2,
          [要面談メッセージ],
          ""
        ),
        ""
      )
    ),
    if([課長の評価3*C]>=0,
      if([対象者の評価3*C]-[課長の評価3*C]>=2,
        [要面談メッセージ],
        ""
      ),
      ""
    )
  )
)
```

ここで 課長の評価の下限値はゼロ。
課長の評価 >= 0 で判定する事で、\[指定なし] を回避。
\[指定なし] 回避だけなら、課長の評価 <> "" でも可。

このくらいの計算式の長さとなると、計算式の保存時に以下の警告が発生。
「一定文字数以上の式を設定するとパフォーマンスが低下する恐れがあります」

しかしながら、実際に体感できるほどパフォーマンスが低下した事が無い。

当計算式を複数の計算式オブジェクトに分解して
計算式の文字数を減らす、複雑さを減らすことも判断としてありうるが
オブジェクトが増えるのもそれはそれで避けたい。

##12-7. 項目⑦ [避けるべき行動n] チェックボックス
1つのコンピテンシーに対して、避けるべき行動が3つ有り。

避けるべき行動1つに対して、1つのチェックボックスを設定。

避けるべき行動は任意項目で、対象者本人に思い当たることがあればチェック。
査定には影響しないものとし、避けるべき行動に点数は無し。

|設定項目|設定内容|
|:---|:---|
|オブジェクトの種類|チェックボックス|
|ラベル|避けるべき行動n|
|パーツに設定する選択肢|(避けるべき行動nの選択肢)|
|このパーツを入力必須にする|いいえ|
|ラベルを非表示にする|はい|

1番目 (n = 1) のコンピテンシーでは、[避けるべき行動1] から [避けるべき行動3] まで設定。
C番目 (n = C) のコンピテンシーでは、[避けるべき行動3 * C - 2] から [避けるべき行動3 * C] まで設定。

##12-8. 項目⑧ [全体の評価] 計算式
集約方法、後述の [全体の平均] 計算式 の結果を 小数点1桁 を切り捨て。
0 なら "C"、1 なら "B"、2 なら "A"、3なら "S"、4なら "SS"、それ以外は空文字 ("") 。

|設定項目|設定内容|
|:---|:---|
|オブジェクトの種類|計算式|
|ラベル|全体の評価|
|ラベルを非表示にする|はい|
|段|1 (デフォルト値)|
|単位|未入力 (デフォルト値)|
|表示する小数点以下の桁数|1 (デフォルト値)|
|文字サイズ|大|
|文字色|黒色|
|文字横位置|中央|
|文字縦位置|中央|

```text:項目⑧　[全体の評価]　パーツに設定する計算式
if(rounddown([全体の平均],0)=0,
  "C",
  if(rounddown([全体の平均],0)=1,
    "B",
    if(rounddown([全体の平均],0)=2,
      "A",
      if(rounddown([全体の平均],0)=3,
        "S",
        if(rounddown([全体の平均],0)=4,
          "SS",
          ""
        )
      )
    )
  )
)
```

##12-9. 項目⑨ [全体の面談の依頼] 計算式
後述の [全体の面談] 計算式 の 出力 が
後述の [要面談メッセージ] 計算式(定数) に保持した値 と一致する場合
「対象者との面談をお願い致します。」という文言を赤文字表示。
それ以外は空文字 ("") 。

|設定項目|設定内容|
|:---|:---|
|オブジェクトの種類|計算式|
|ラベル|全体の面談の依頼|
|ラベルを非表示にする|はい|
|段|1 (デフォルト値)|
|単位|未入力 (デフォルト値)|
|表示する小数点以下の桁数|1 (デフォルト値)|
|文字サイズ|大|
|文字色|赤色|
|文字横位置|左寄せ|
|文字縦位置|中央|

権限設計は下記の通り。
以下の課長以上で[閲覧可能]、それ以外は[閲覧不可]
・課長-課長記入
・課長-部長記入
・部長-課長記入
・部長-部長記入

```text:項目⑨　[全体の面談の依頼]　パーツに設定する計算式
if([全体の面談]=[要面談メッセージ],
  "対象者との面談をお願い致します。",
  ""
)
```

##12-10. 項目⑩ [要面談メッセージ] 計算式(定数)
1つの推奨される行動に対して、対象者の評価より課長の評価が悪い方に乖離 (2点以上) した場合
表示する文言を保持。

前述の [まとめの面談n] の表示、[全体の面談の依頼] の判定
後述の [全体の面談] の出力、判定に使用。

当項目は hidden項目、権限設計で閲覧不可を設定。

|設定項目|設定内容|
|:---|:---|
|オブジェクトの種類|計算式|
|ラベル|要面談メッセージ|
|ラベルを非表示にする|はい|
|段|1 (デフォルト値)|
|単位|未入力 (デフォルト値)|
|表示する小数点以下の桁数|1 (デフォルト値)|
|文字サイズ|小|
|文字色|黒|
|文字横位置|中央|
|文字縦位置|中央|

パーツに設定する計算式：定数 (文字列、"要面談")

##12-11. 項目⑪ [全体の平均] 計算式
すべての推奨される行動に対する [対象者の評価n] ならびに [課長の評価n] の平均。

当項目は hidden項目、権限設計で閲覧不可を設定。

表示する小数点以下の桁数について考える。

100 の 推奨される行動 があり、対象者がそのすべての設問で評価を 4 としたとする。
課長は1つだけ評価を 3 とし、その他を対象者と同じ 4 とした場合

評価の平均は
(4*100+4*99+3) / 200 = 3.995
となる。

表示する小数点以下の桁数を2桁とした場合、小数点3桁の四捨五入により評価の平均が 4.00
小数点1桁の切り捨てにより、評価が4となる。

表示する小数点以下の桁数を3桁とした場合、小数点4桁の四捨五入により評価の平均が 3.995
小数点1桁の切り捨てにより、評価が3となる。

小数点3桁は、上記の精度で対象者と上司の評価の乖離を検知できる桁であるといえる。

|設定項目|設定内容|
|:---|:---|
|オブジェクトの種類|計算式|
|ラベル|全体の平均|
|ラベルを非表示にする|はい|
|段|1 (デフォルト値)|
|単位|未入力 (デフォルト値)|
|表示する小数点以下の桁数|3 (デフォルト値)|
|文字サイズ|小|
|文字色|黒|
|文字横位置|中央|
|文字縦位置|中央|

```text:項目⑪　[全体の平均]　パーツに設定する計算式
average(
[対象者の評価1]
～中略～
,[対象者の評価n]
,[課長の評価1]
～中略～
,[課長の評価n]
)
```
但し、Cはコンピテンシーの数、n は 2 <= n <= 3 * C とする。

```text:コンピテンシー数が　1　の場合　(C=1)
average(
[対象者の評価1]
,[対象者の評価2]
,[対象者の評価3]
,[課長の評価1]
,[課長の評価2]
,[課長の評価3]
)
```

```text:コンピテンシー数が　2　の場合　(C=2)
average(
[対象者の評価1]
,[対象者の評価2]
,[対象者の評価3]
,[対象者の評価4]
,[対象者の評価5]
,[対象者の評価6]
,[課長の評価1]
,[課長の評価2]
,[課長の評価3]
,[課長の評価4]
,[課長の評価5]
,[課長の評価6]
)
```

```text:コンピテンシー数が　3　の場合　(C=3)
average(
[対象者の評価1]
,[対象者の評価2]
,[対象者の評価3]
,[対象者の評価4]
,[対象者の評価5]
,[対象者の評価6]
,[対象者の評価7]
,[対象者の評価8]
,[対象者の評価9]
,[課長の評価1]
,[課長の評価2]
,[課長の評価3]
,[課長の評価4]
,[課長の評価5]
,[課長の評価6]
,[課長の評価7]
,[課長の評価8]
,[課長の評価9]
)
```

##12-12. 項目⑫ [全体の面談] 計算式
すべてのコンピテンシーの [まとめの面談n] にて
1つでも 前述の [要面談メッセージ] 計算式(定数) に保持した値 と一致する場合
[要面談メッセージ]、それ以外は空文字 ("") 。

当項目は hidden項目、権限設計で閲覧不可を設定。

|設定項目|設定内容|
|:---|:---|
|オブジェクトの種類|計算式|
|ラベル|全体の面談|
|ラベルを非表示にする|はい|
|段|1 (デフォルト値)|
|単位|未入力 (デフォルト値)|
|表示する小数点以下の桁数|1 (デフォルト値)|
|文字サイズ|小|
|文字色|黒|
|文字横位置|中央|
|文字縦位置|中央|

```text:項目⑮　[全体の面談]　パーツに設定する計算式
if(countif([要面談メッセージ]=,[まとめの面談1],～中略～,[まとめの面談n])>=1,
  [要面談メッセージ],
  ""
)
```

但し、Cはコンピテンシーの数、n は 2 <= n <= C とする。

```text:コンピテンシー数が　1　の場合　(C=1)
if(countif([要面談メッセージ]=,[まとめの面談1])>=1,
  [要面談メッセージ],
  ""
)
```

```text:コンピテンシー数が　2　の場合　(C=2)
if(countif([要面談メッセージ]=,[まとめの面談1],[まとめの面談2])>=1,
  [要面談メッセージ],
  ""
)
```

```text:コンピテンシー数が　3　の場合　(C=3)
if(countif([要面談メッセージ]=,[まとめの面談1],[まとめの面談2],[まとめの面談3])>=1,
  [要面談メッセージ],
  ""
)
```

##12-13. 項目⑬ [避けるべき行動有りn] 計算式
すべてのコンピテンシーの避けるべき行動を集約せず、1つ1つチェックボックスがONならば "○"。
それ以外は空文字 ("") 。
避けるべき行動有り の 数 n は避けるべき行動の数と同じ。

当項目は hidden項目、権限設計で閲覧不可を設定。

|設定項目|設定内容|
|:---|:---|
|オブジェクトの種類|計算式|
|ラベル|避けるべき行動有りn|
|ラベルを非表示にする|はい|
|段|1 (デフォルト値)|
|単位|未入力 (デフォルト値)|
|表示する小数点以下の桁数|1 (デフォルト値)|
|文字サイズ|小|
|文字色|黒|
|文字横位置|中央|
|文字縦位置|中央|

```text:項目⑬　[避けるべき行動有りn]　パーツに設定する計算式
if([避けるべき行動n]<>"",
  "○",
  ""
)
```

但し、Cはコンピテンシーの数、n は 1 <= n <= 3 * C とする。

#13. 実際の権限設定
先に配置したオブジェクトの権限を設定。

##13-1. 対象者-対象者入力
以下の項目に [編集可能] を設定。
・[推奨される行動1] から [推奨される行動3C]
・[対象者の評価1] から [対象者の評価3C]
・[避けるべき行動1] から [避けるべき行動3C]

但し、Cはコンピテンシーの数。

##13-2. 課長-課長入力
以下の項目に [編集可能] を設定。
・[課長の評価1] から [課長の評価3C]

但し、Cはコンピテンシーの数。

##13-3. 部長-部長入力
 [編集可能] を設定する項目無し。

##13-4. その他の 対象者-アクション
「12. 実際のフォーム設計」 の説明にての指定通り設定。
「12. 実際のフォーム設計」 の説明にて指定無く、上記 [編集可能] 指定無ければ、[閲覧可能] を設定。

#14. SMART REVIEW 帳票登録・作成・出力
以下の SMART REVIEW 帳票登録・作成・出力 の実行は、「管理者ユーザー」で行う。

その為、部長が帳票作成・出力を実行する場合は、部長が「管理者ユーザー」である必要有り。

「SMART REVIEW」画面→追加したイベントの右上の [メニュー] ボタン→ [帳票登録] リンク

「帳票登録」画面
以下のようなエクセルファイル (.xlsxファイル) を ドラッグ＆ドロップ→ [保存] ボタン
![fig.14 report](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/271734/bf971719-795e-2f5c-857b-aa7d7b9cff44.png "fig.14 report")

帳票登録するエクセルには、セルの値として SMART REVIEW 帳票 のタグを入力。

|セル|繰り返し <BR> 項目|タグ|タグ説明|
|:---|:---|:---|:---|
|A1||#<基本情報>#<氏名>|基本情報の氏名 = ワークフロー対象者 <BR> <>タグは基本情報を参照する場合に使用 <BR> 先頭に#を付ける|
|B1||#[全体の評価]|フォーム設計定義 [全体の評価] 項目値 <BR> []タグはフォームを参照する場合に使用 <BR> 先頭に#を付ける|
|C1||#[全体の面談]|フォーム設計定義 [全体の面談] 項目値|
|D1|繰り返し <BR> 項目|#[まとめの評価n]|フォーム設計定義 [まとめの評価n] 項目値 <BR> 但し、Cはコンピテンシーの数 <BR> n は 1 <= n <= C とする。|
|E1|繰り返し <BR> 項目|#[まとめの面談n]|フォーム設計定義 [まとめの面談n] 項目値 <BR> 但し、Cはコンピテンシーの数 <BR> n は 1 <= n <= C とする。|
|F1|繰り返し <BR> 項目|#[避けるべき行動有り3*(n-1)+1]|フォーム設計定義 <BR> [避けるべき行動有り3*(n-1)+1] 項目値 <BR> 但し、Cはコンピテンシーの数 <BR> n は 1 <= n <= C とする。|
|G1|繰り返し <BR> 項目|#[避けるべき行動有り3*(n-1)+2]|フォーム設計定義 <BR> [避けるべき行動有り3*(n-1)+2] 項目値 <BR> 但し、Cはコンピテンシーの数 <BR> n は 1 <= n <= C とする。|
|H1|繰り返し <BR> 項目|#[避けるべき行動有り3*(n-1)+3]|フォーム設計定義 <BR> [避けるべき行動有り3*(n-1)+3] 項目値 <BR> 但し、Cはコンピテンシーの数 <BR> n は 1 <= n <= C とする。|

コンピテンシー数が繰り返し項目の繰り返し回数。

コンピテンシー数が 1 の場合 (C = 1)
繰り返し項目の部分を下記として設定。
・#[まとめの評価1]
・#[まとめの面談1]
・#[避けるべき行動有り1]
・#[避けるべき行動有り2]
・#[避けるべき行動有り3]

コンピテンシー数が 2 の場合 (C = 2)
繰り返し項目の部分を下記として設定。
・#[まとめの評価1]
・#[まとめの面談1]
・#[避けるべき行動有り1]
・#[避けるべき行動有り2]
・#[避けるべき行動有り3]
・#[まとめの評価2]
・#[まとめの面談2]
・#[避けるべき行動有り4]
・#[避けるべき行動有り5]
・#[避けるべき行動有り6]

 登録後、「SMART REVIEW」画面→追加したイベントの右上の [メニュー] ボタン→ [帳票作成] リンク

「帳票作成」画面
 [ファイル名形式、社員番号だけ] ラジオボタンを選択→ [作成する] ボタン

 [帳票出力] リンクが赤色で選択可能となる→ [帳票出力] リンク
各対象者の社員番号のエクセルファイルをZIP形式でまとめてダウンロード

![fig.15 zip](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/271734/540f3fb0-b90c-b362-80de-143a5286537c.png "fig.15 zip")

#15. Excelの条件付き書式や関数を使用し整形、完成
「14. SMART REVIEW 帳票登録・作成・出力」 にて出力した各対象者のエクセルを
ひな形のエクセルに張り付け。
![fig.16 paste](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/271734/62383ec7-b026-1118-d4b2-8bd0b8d83365.png "fig.16 paste")

「一覧」シートに条件付き書式と関数を既に埋め込み済み。
![fig.17 complete](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/271734/d101bd05-a096-65ab-8940-c3dc1f65f124.png "fig.17 complete")

「一覧」シート 条件付き書式。
A列は固定文言として、エクセルに直接記載。

|ルール|適用先|
|:---|:---|:---|
|次の数式を満たす場合に値を書式設定 <BR> =INDEX(INDIRECT("data!"&COLUMN()-1&":"&COLUMN()-1),1,ROW()+1+CEILING((ROW()-4)/4,1))="要面談"|=\$4:\$1048576|
|次のセルのみを書式設定 セルの値 次の値に等しい ="要"|=\$1:\$1048576|

「一覧」シート 関数。

|セル|関数|内容|
|:---|:---|:---|
|B1 <BR> ～ <BR> B2|=INDEX(INDIRECT("data!"&COLUMN()-1&":"&COLUMN()-1),1,ROW())&""|ワークフロー対象者 <BR> [全体の評価] 項目値|
|B3|=IF(INDEX(INDIRECT("data!"&COLUMN()-1&":"&COLUMN()-1),1,ROW())="","","要")|[全体の面談] 項目値 <BR> "要面談" → "要"|
|B4 <BR> ～ <BR> B7|=INDEX(INDIRECT("data!"&COLUMN()-1&":"&COLUMN()-1),1,ROW()+CEILING((ROW()-4)/4,1))&""|[まとめの評価n] <BR> [避けるべき行動有り3*(n-1)+1] <BR> [避けるべき行動有り3*(n-1)+2] <BR> [避けるべき行動有り3*(n-1)+3]|

参加者が増えた場合は、B列をコピーするだけで良。

コンピテンシーが増えた場合は、4行から7行をコピーするだけで良。

#終わりに
![fig.18 workflow improvement](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/271734/c48df3b2-449e-608b-7295-12beff95771c.png "fig.18 workflow improvement")

カオナビ SMART REVIEW で コンピテンシーチェック の ワークフロー を作ってみた。

会社の上の立場になると、評価しなければならない人が多いので、評価これはSSとかをひとりひとりやっている訳にはいかないのが道理なので、対象者とそれを点検する人がいて、後は集約する流れとなり、形に出来て良かった。

心残りなのは、対象者ごとのエクセルをまとめるのは、人手になってしまう事。
ただ、それも人間が対象者ひとりひとりを評価するよりも、エクセルを開いて貼り付ける方が、消費時間は少なくて良いと思う。

あとワークフロー完了時に、完了メールは1本で良いのだけれども、実際は対象者の数だけ届いてしまうこと。これも管理者とかに全部飛ばして、全部そろったら、管理者が部長に連絡するとかでも出来るかもしれない。それをしたくない、自動化したいと思うのが人の心というものだろう。

カオナビ自体、私は大変良いツールだと思う。

ほぼ最近の Web 開発経験の無い (バッチ処理の開発が多かった) 私でも
ワークフロー Webフォーム が作れた。

クラウドというのも大きい。
エクセルをメールでやり取りするよりは、サイトにアクセスする方がラクだろう。

個人目標を管理する仕組みを作る時、カオナビにはまたお世話になるだろう。

また新たな知見を得たら、別の記事で書きたいと思います。