This page is in Japanese version. The English version is in preparation.

伸縮する軸

Patterns

状況 Context

経営管理システムでは、部門別や商品群別、科目別などに数値内訳を表示するフォームが頻出する。部門や商品群などは縦軸に並ぶこともあれば横軸に並ぶこともある。fusion_placeにおいて、部門・商品群・科目などは「ディメンション」で表現されている。

ディメンション上で部門・商品群・科目などが追加・廃止される場合、あるいは集計の括りが変更される場合がある(例えば、三重支店を管轄する本部が関西地区本部から中部地区本部に変わる)。フォームは種類が多くなりがちなので、このような変更に際して、多数あるフォームをいちいち修正するのは手間がかかる。

問題 Problem

個々の部門・商品群などを表す「メンバー」がディメンションに追加される場合、メンバーツリーから削除される場合、あるいはメンバーツリー上で移動される場合、要するに メンバーツリーがなんらかの形で変更される場合、フォームで表示される画面にその変更が自動的に反映されるようにしたい。

配慮すべきことがら Forces

  • 即時波及:メンバーツリーの変更は、意図されるすべてのフォームでの軸表示に即時に反映されることが望ましい。

  • 設定のしやすさ:メンバーツリーの変更を個々のフォームの表示に反映するための設定はシンプルでかつ設定記述の量が少ないことが望ましい。

  • 共通化:同一の条件でメンバーツリーを表示したいフォームは多数存在することも想定される。そうした場合、設定の手間を削減するだけでなく、フォームの仕様に関するコミュニケーションを容易にするためにも、設定を共通化する手段が提供されるべきである。

  • 1階層及び複数階層の表示:組織などの階層をフォームで表示する際には、1階層だけ表示する場合もあれば、複数階層にわたってブレークダウンされるように表示する場合もある。いずれの場合も、メンバーツリーの変更は自動反映されるべきである。

解決策 Solution

フォームにおける軸の設定でメンバーリストを用いて、列・行を可変回数繰り返す。

簡易版フォームにおいては、縦軸・横軸に配したディメンションにはメンバーリストを割り当てることが要求されるので、これは当然に達成される。 フル機能版フォームにおいては、フォーム中で可変的にしたい軸にループ仕様を配置する。ループ仕様では、繰り返し条件としてメンバーリストを指定できる。

いずれの場合でも、繰り返しで生成される各項目(行・列またはその集まり)は、実行時に作成されるメンバーリストに含まれるメンバーと1対1対応する。それゆえ、メンバーリストの各メンバーに対応するよう、行または列が生成され表示される。

例 Examples

本パターンは極めて基本的であり、ほとんどあらゆるフォームで用いられる。いくつかの例を挙げる。

  • P/Lレポートなど科目が縦軸方向に並んでいるレポートで、科目追廃が縦軸の行ならびに自動反映されるようにする。

  • 商品群別売上一覧表で、縦軸に商品群を、横軸に月別売上高を並べる。商品群の追廃が縦軸のならびに自動反映されるようにする。

  • 第1列に集約部門の合計値が表示され、第2列以降に配下の各部門の内訳が並べられるレポートで、配下の部門の追廃が横軸のならびに自動反映されるようにする。

適用の帰結 Consequences

利点 Benefits

  • 即時波及:メンバーリストは、フォーム画面を再表示するたびに各ディメンションの最新の内容を反映して再作成されるので、列・行はディメンションの最新内容にもとづいて表示される。

  • 設定のしやすさ:メンバーリスト定義の設定項目はわずかである。

  • 共通化:メンバーリストは、個々のフォームに含めて定義することもできるが、ディメンションに含めて定義することもできる。フォームでは、ディメンションのメンバーリスト定義を参照して適用することで、設定の手間は削減され、仕様に関するコミュニケーションも容易になる。

  • 1階層及び複数階層の表示:メンバーリストでは「展開方法」の指定によって、直下の子メンバーのみでなく、子孫メンバーなども含めることができる。

制約 Liabilities

  • 設定のしやすさ:メンバーとメンバーの間に、集計メンバーでは表現できない算出項目を表示したい場合は、設定が複雑になる。メンバーリストを分割せざるを得ないからである。例えば、以下のようなP/L勘定科目並びを想定する:

    売上高
    売上原価
    売上総利益
    (売上総利益率)    ←算出項目
    販管費
    …

    この例で、売上総利益率はフォームでの算出項目であり、それに相当する勘定科目メンバーは存在しない。したがって、売上高から売上総利益までをひとつのループ定義とメンバーリストで表示し、算出項目として売上総利益率を表示した後に、販売費以下を別のループ定義とメンバーリストで表示する必要がある。すなわち、ループ定義を2つ設ける必要が生じる。このように、算出項目が増えるにつれてループ定義が増え、フォームの設定は複雑になる。

    回避策として、算出項目は中途ではなく末尾に並べるようレイアウトを修正することが考えられる。このケースでは、すべてのP/L勘定科目を並べた後に指標欄を設けて算出項目を表示する。

    売上高
    売上原価
    売上総利益
    販管費
    …
    (売上総利益率)   ←算出項目
    (営業利益率)    ←算出項目
    …

    このようにすれば、算出項目以外を表示するためのループ定義はひとつで済む。

先行パターン Preceding patterns

後続パターン Succeeding patterns

  • 本パターンを行方向に適用し、かつ、複数階層のメンバーに対する行を表示する場合、行タイトルを字下げ(インデント)させたいというニーズが生じる。これについては、「メンバー階層に応じた行タイトルの字下げ」が可能である。

  • メンバーツリーを複数のうちから選択することも可能である。これは「年度別メンバーツリー」や「任意集計用メンバーツリー」を設けた場合に必要となる。詳細は各パターンを参照せよ。

  • 本パターンはフォームを対象としている。Excel-Linkでは、テンプレート処理を用いれば、縦軸方向を可変的にすることができる(横軸方向は可変的にできない)。「伸縮する縦軸(Excel)」を参照せよ。