基本情報技術者 2014年 秋期 午前(科目A) 問24
問題文
ある企業では、顧客マスタファイル、商品マスタファイル、担当者マスタファイル及び当月受注ファイルを基にして、月次で受注実績を把握している。各ファイルの項目が表のとおりであるとき、これら四つのファイルを使用して当月分と直前の3か月分の出力が可能な受注実績はどれか。

選択肢
ア:顧客別の商品別受注実績
イ:商品別の顧客別受注実績
ウ:商品別の担当者別受注実績
エ:担当者別の顧客別受注実績(正解)
月次受注実績の出力可否判定【午前2 解説】
要点まとめ
- 結論:顧客マスタに顧客ごとの直前3か月分の受注額と担当者コードがあり、当月は当月受注から合計できるため担当者別の顧客別集計のみ可能です。
- 根拠:商品マスタは商品単位の過去3か月を持ち、顧客マスタは顧客単位の過去3か月を持つが、顧客×商品の過去分割は存在しないため多次元分析ができません。
- 差がつくポイント:求める出力の「粒度(顧客×商品、商品×担当者等)」と各ファイルの「時系列粒度(当月は取引、過去は集計)」を照合する力が合否を分けます。
正解の理由
正解は エ(担当者別の顧客別受注実績)です。理由は次の通りです。
- 顧客マスタに「担当者コード」と各顧客ごとの「前月・2か月前・3か月前受注額」が保持されているため、過去3か月分は顧客単位で参照可能です。
- 当月受注ファイルは顧客コード/商品コードごとの当月受注額(当月の合計)を持っているため、顧客単位に集約すれば当月の顧客別受注額が得られます。
- したがって、当月(当月受注を顧客で集約)+過去3か月(顧客マスタの各月列)を担当者コードでグルーピングすれば「担当者別の顧客別」出力が構築できます。
他の選択肢は過去3か月分のデータが必要な粒度(顧客×商品や商品×担当者)で存在しないため、全期間での出力は不可能です。
よくある誤解
- 「商品マスタに過去3か月があるから商品別で担当者別もできる」:商品マスタは商品単位の過去値であり、担当者(顧客に紐づく情報)ごとの内訳は不明です。
- 「当月データが商品×顧客であるから過去も同じ粒度で遡れる」:当月は取引粒度があるが、過去はマスタに集計列しか無く、粒度が違うためそのまま比較できません。
- 「過去の合計を商品や担当者に按分すれば良い」:按分は推測であり設問の要件(出力可能か)では「既存データだけで正確に出力できるか」が問われます。
解法ステップ
- 出力要求(当月+直前3か月)と出力の粒度(顧客×商品、商品×顧客、商品×担当者、担当者×顧客)を明確化する。
- 各ファイルのカラムを確認し、どの粒度で時系列データ(当月・前月・2か月前・3か月前)が存在するかを整理する。
- 「当月」は当月受注ファイルから顧客単位や商品単位に集約可能かを見極める。
- 「過去3か月」は顧客マスタか商品マスタのどちらが該当粒度の値を持つかを判定する。
- 全期間(当月+過去3か月)を同一粒度で出力できる選択肢を選ぶ。
選択肢別の誤答解説
- ア: 顧客別の商品別受注実績
- 誤り。理由:当月は顧客×商品粒度のデータがあるが、過去3か月は顧客マスタが「顧客単位の合計」、商品マスタが「商品単位の合計」であり、顧客×商品という粒度での過去データが存在しません。従って過去3か月分を顧客×商品で出力できません。
- イ: 商品別の顧客別受注実績
- 誤り(上と同様の理由)。商品→顧客という表示順の違いはあれど、必要なのは「過去3か月が商品×顧客粒度で存在するか」であり存在しません。
- ウ: 商品別の担当者別受注実績
- 誤り。理由:当月は当月受注から商品×担当者(当月:当月受注を顧客→担当者へマッピング)を作れるが、過去3か月は商品マスタが商品単位、顧客マスタが顧客単位であり「商品ごとの担当者別内訳」という過去の粒度は保持していません。
- エ: 担当者別の顧客別受注実績
- 正解。理由:顧客マスタが顧客ごとの過去3か月値と担当者コードを持ち、当月は当月受注を顧客で集約できるため、全期間で担当者→顧客→月次金額の出力が可能です。
補足コラム
- データ設計の観点:過去を様々な切り口で分析したいなら、合計値(前月など)をマスタに持つよりトランザクション履歴(顧客×商品×年月ごとのレコード)を蓄積する方が柔軟性が高いです。
- 実務的対策:将来の分析対応力を上げるためには「月次の取引テーブル(月, 顧客, 商品, 受注額)」を保持し、集計はクエリで行うのが望ましいです。
- SQLサンプル(担当者別の顧客別受注実績を作るイメージ):
-- 当月の顧客別受注(当月受注を顧客で集約) WITH 当月顧客 AS ( SELECT t.顧客コード, SUM(t.受注額) AS 当月受注額 FROM 当月受注 t GROUP BY t.顧客コード ), -- 顧客マスタの過去3か月を行展開(unpivotの簡易版) 顧客過去 AS ( SELECT 顧客コード, '前月' AS 月指標, 前月受注額 AS 受注額 FROM 顧客マスタ UNION ALL SELECT 顧客コード, '2か月前', 2か月前受注額 FROM 顧客マスタ UNION ALL SELECT 顧客コード, '3か月前', 3か月前受注額 FROM 顧客マスタ ) -- 担当者別→顧客別に結合して出力 SELECT c.担当者コード, k.顧客コード, '当月' AS 月指標, COALESCE(a.当月受注額, 0) AS 受注額 FROM 顧客マスタ k LEFT JOIN 当月顧客 a ON k.顧客コード = a.顧客コード JOIN 顧客マスタ c ON k.顧客コード = c.顧客コード UNION ALL SELECT c.担当者コード, p.顧客コード, p.月指標, p.受注額 FROM 顧客過去 p JOIN 顧客マスタ c ON p.顧客コード = c.顧客コード;
(実運用では当月と過去列のタイムスタンプ整合やNULL処理、集約ルールを明確にすること)
FAQ
Q1. 「当月は商品×顧客粒度、過去は商品単位だけど商品別の顧客別は無理ですか?」
A1. 無理です。過去が商品単位なら顧客別内訳は存在しないため、正確に再現できません。推測での按分は要件を満たしません。
A1. 無理です。過去が商品単位なら顧客別内訳は存在しないため、正確に再現できません。推測での按分は要件を満たしません。
Q2. 「当月だけなら全選択肢作れますか?」
A2. 多くは作れます。例えば商品別の担当者別は当月データと顧客→担当者マッピングで作成可能ですが、設問は「当月分と直前3か月分の出力が可能か」を問うため過去分の粒度が足りないと不可です。
A2. 多くは作れます。例えば商品別の担当者別は当月データと顧客→担当者マッピングで作成可能ですが、設問は「当月分と直前3か月分の出力が可能か」を問うため過去分の粒度が足りないと不可です。
Q3. 「データを変えずに可能にする現実的手段は?」
A3. 既存の過去集計を顧客×商品などの詳細に戻すことはできないため、将来は取引履歴を保存する運用へ切り替えることが現実的な解決策です。
A3. 既存の過去集計を顧客×商品などの詳細に戻すことはできないため、将来は取引履歴を保存する運用へ切り替えることが現実的な解決策です。
関連キーワード: 月次集計、マスタ設計、受注実績、粒度、集約、JOIN、UNPIVOT、SQL、担当者別分析、顧客別分析、データモデリング

\ せっかくなら /
基本情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

