2023年 春期 応用情報技術者試験 問6
KPI達成状況集計システムの開発
G社は、創立20年を迎えた従業員500人規模のソフトウェア開発会社である。G社では、顧客企業や業種業界の変化に応じた組織変更を行ってきた。また、スキルや業務知識に応じた柔軟な人事異動によって、人材の流動性を高めてきた。
G社の組織は、表1の例に示すように最大三つの階層から構成されている。
従業員の職務区分には管理職、一般職の二つがあり、1階層から3階層のそれぞれの組織には1名以上の従業員が所属している。なお、複数階層、複数組織の兼務は行わない規定であり、従業員は一つの組織だけに所属する。
1階層 | 2階層 | 3階層 | 組織の説明 |
---|---|---|---|
監査室 | — | — | 単独階層の組織 |
経営部 | 人事課 | — | 全社共通のスタッフ組織 |
技術開発部 | オープンソース推進課 | — | 全社共通の開発組織 |
金融システム本部 | 証券システム部 | 証券開発課 | 業種業界ごとの開発組織 |
【KPIの追加】
G社では、仕事にメリハリを付け、仕事の質を向上させることが、G社の業績向上につながるものと考え、従来のKPIに加え、働き方改革、従業員満足度向上に関するKPIの項目を今年度から追加することにした。追加したKPIの項目を表2に示す。
KPI項目名 | 定量的成果目標 | 評価方法 |
---|---|---|
年間総労働時間 | 1,980時間以内/人 | ・一般職従業員の個人実績を組織単位で集計し、平均値の達成状況を評価する。 ・年度途中入社、年度途中退職した従業員は、評価対象外とする。 ・個人実績の集計は、集計日時点で従業員の所属している直属の組織に対して行う。所属組織の上位階層、又は下位階層の組織の集計には含めない。 |
年次有給休暇取得日数 | 16日以上/人 | |
年間研修受講日数 | 6日以上/人 |
追加したKPIの達成状況を把握し、計画的な目標達成を補助するためにKPI達成状況集計システム(以下、Kシステムという)を開発することになり、H主任が担当となった。
Kシステムでは、次に示す仕組みと情報を提供する。
・従業員各人が、月ごとの目標を設定する仕組み ・日々の実績を月次で集計し、各組織がKPI達成状況を評価するための情報
【データベースの設計】
G社では、組織変更と人事異動を管理するためのシステムを以前から運用している。
H主任は、このシステムのためのE-R図を基に、KPIとその達成状況を把握するために、KPI、月別個人目標、及び日別個人実績の三つのエンティティを追加して、Kシステムのための E-R図を作成することにした。
作成したE-R図(抜粋)を図1に示す。Kシステムでは、このE-R図のエンティティ名を表名に、属性名を列名にして、適切なデータ型で表定義した関係データベースによってデータを管理する。

キーの実線が付いている属性名には、外部キーの破線を付けない。
追加した三つのエンティティを基に新規に作成された表の管理内容と運用方法を表3に示す。
表 | 管理内容 | 運用方法 |
---|---|---|
KPI | KPI項目と定量的成果目標を管理する。 | ・参照だけ(更新は行わない)。 |
月別個人目標 | 個人ごとの月別目標値を管理する。 | ・年度開始時点で在籍している全従業員に対して、当該年度分のレコードを、目標値を0として初期作成する。 ・初期作成したレコードに対して、各人で定量的成果目標を意識した月別目標値を入力し、定期的に見直し、更新する。 ・年度途中入社の従業員については、初期作成レコードが存在しない。月別目標値の入力も行わない。 ・管理職従業員はKPI評価対象外であるが、月別目標値の入力は一般職従業員と同様に行う。 |
日別個人実績 | 個人ごとの日別実績値を管理する。 | ・勤怠管理システム、研修管理システムで管理している追加したKPI項目に関する全従業員の実績値を基に、日次バッチ処理によってレコードを作成する。 ・日別実績のない従業員のレコードは作成しない。 |
組織,所属,従業員,及び役職の各表は,以前から運用しているシステムから継承したものである。組織表と所属表では,組織や所属に関する開始年月日と終了年月日を保持し,現在を含む,過去から未来に至るまでの情報を管理している。
組織表の"組織終了年月日"と所属表の"所属終了年月日"には,過去の実績値,又は予定を設定する。終了予定のない場合は9999年12月31日を設定する。
なお,組織表の"上位組織コード","上位組織開始年月日"には,1階層組織ではNULLを,2階層組織と3階層組織では一つ上位階層の組織の組織コード,組織開始年月日を設定する。また,役職表の"職務区分"の値は,管理職の場合に'01',一般職の場合に'02'とする。
【達成状況集計リストの作成】
H主任は、各組織がKPI達成状況を評価するための情報として、毎月末に達成状況集計リスト(以下、集計リストという)を作成し、提示することにした。
集計リスト作成は、オンライン停止時間帯の日次バッチ処理終了後の月次バッチ処理によって、処理結果を一時表に出力して後続処理に連携する方式で行うことにした。
集計リスト作成処理の概要を表4に示す。
項番 | 入力表 | 出力表 | 集計日における処理内容 |
---|---|---|---|
1 | 所属,役職 | 従業員_所属_一時 | 一般職従業員と所属組織の対応表を作成する。 |
2 | 月別個人目標 | 従業員ごと_目標集計_一時 | 年度開始年月から集計月までの従業員,KPI項目ごとの目標個人集計値を求める。 |
3 | 日別個人実績 | 従業員ごと_実績集計_一時 | 年度開始年月日から集計日までの従業員,KPI項目ごとの実績個人集計値を求める。 |
4 | 項番1~3の出力表 | 組織ごと_目標実績集計_一時 | 組織,KPI項目ごとの目標集計値,実績集計値,従業員数を求める。 |
5 | 項番4の出力表 | — | 組織,KPI項目ごとの目標集計値,実績集計値,従業員数,目標平均値,実績平均値を一覧化した集計リストを作成する。 |
集計リスト作成処理のSQL文を図2に示す。ここで、TO_DATE関数は、指定された年月日をDATE型に変換するユーザー定義関数である。関数COALESCE(A,B)は、AがNULLでないときはAを、AがNULLのときはBを返す。また、"・年度開始年月日","・年度開始年月","・集計年月日","・集計年月"は、該当の値を格納する埋込み変数である。
H主任は、図2の項番4のSQL文の設計の際に、次に示す考慮を行った。
・表2の評価方法に従い、管理職の従業員データは対象に含めず、年度途中入社と、年度途中退職の従業員データについては出力しないように、抽出日に退職している従業員データを出力しない"従業員_所属_一時表"と、年度開始時点で入社していない従業員データを出力しない"従業員ごと_目標集計_一時表"をcによって結合しておく。
・cによる結合結果と、実績がある場合だけレコードの存在する"従業員ごと_実績集計_一時表"をdによって結合しておく。また、①実績個人集計がNULLの際は、0を設定しておく。
項番 | SQL文 |
1 |
INSERT INTO 従業員_所属_一時(従業員コード,組織コード) SELECT A.従業員コード,A.所属組織コード FROM 所属 A,役職 B WHERE TO_DATE(:集計年月日) e A.所属開始年月日 AND A.所属終了年月日 AND A.役職コード = B.役職コード AND f |
2 |
INSERT INTO 従業員ごと_目標集計_一時(従業員コード,KPIコード,目標個人集計) SELECT 従業員コード,KPIコード,SUM(月別目標値) FROM 月別個人目標 WHERE 年月日 e :年度開始年月 AND :集計年月 g |
3 |
INSERT INTO 従業員ごと_実績集計_一時(従業員コード,KPIコード,実績個人集計) SELECT 従業員コード,KPIコード,SUM(日別実績値) FROM 日別個人実績 WHERE 年月日 e TO_DATE(:年度開始年月日) AND TO_DATE(:集計年月日) g |
4 |
INSERT INTO h (組織コード,KPIコード,目標組織集計,実績組織集計,対象従業員数) SELECT A.組織コード,B.KPIコード,SUM(B.目標個人集計), SUM(COALESCE(C.実績個人集計,0)),i FROM 従業員_所属_一時 A c 従業員ごと_目標集計_一時 B ON A.従業員コード = B.従業員コード d 従業員ごと_実績集計_一時 C ON B.従業員コード = C.従業員コード AND B.KPIコード = C.KPIコード GROUP BY A.組織コード,B.KPIコード |
5 |
SELECT A.*,A.目標組織集計/A.対象従業員数,A.実績組織集計/A.対象従業員数
FROM h A ORDER BY A.組織コード,A.KPIコード
|