ビジネスアプリケーションを開発するためのツールとしてのスプレッドシート

Excelは、ビジネスアプリケーションを開発するための用途の広いツールとしてよく使用されます。この記事では、30年以上変更なしで存在していたスプレッドシートを、ソフトウェアアーキテクトの観点から見た現代の古典的な必須プログラミングパラダイムと比較したいと思います。次に、比較中に特定された多くの弱点を修正する新しいスプレッドシートプロセッサでの私の作業について説明します。これにより、より信頼性が高く、スケーラブルで、ビジネスアプリケーションの保守と開発が容易になります。







スプレッドシートとその機能



最新のスプレッドシート(​​Microsoft Excel、LibreOffice Calc、またはGoogle Sheets)が機能する原理は、70年代後半から80年代半ばに登場しました。データモデルとしてのセルの2次元配列と、式を使用して自動的に計算する機能は、1979年にVisiCalcに登場しました。セルの3次元配列(複数のシートを使用する機能)は、1985年にBoeingCalcで最初に登場しました。



理論的には、スプレッドシートは他のプログラミング言語と同じくらい優れています。 Excelの式(リンク)に基づくTuringマシンがあります。これは、コンピューターを使用して実装できるすべてのアルゴリズムをExcelで実装できることを意味します。唯一の問題は、そのような実装の利便性と効率性です。



実際、私はExcelに実装された非常に複雑なシステムに出くわしました。たとえば、さまざまな種類のオブジェクト(駐車場、倉庫、車線など)を提供し、さまざまなモデルを考慮して、キャッシュフローで平方メートルと駐車スペースを再計算する機能(建設年数と運用年数の利益)を備えた国際空港開発の財務モデルインフレーション。リレーショナルデータベースを使用してJavaでこのような「卓越性」を「書き換える」には、数人月から数人年かかる場合があります。この特定のケースでは、データベースのリレーショナルモデルは50を超えるテーブルで構成されていました。最も興味深いことに、スプレッドシートがソフトウェアの作成を可能にするだけでなく、メンテナンスとスケーラビリティを可能にした場合、この「書き換え」は回避できたはずです。エンドユーザー(エコノミスト)にとって、Javaシステムは一歩後退しています。これは、中間結果が表示されなくなり、モデルを自分で変更または補足できないためです。



同じ問題は、スプレッドシートとユニバーサルプログラミング言語の両方で解決できることがわかりました。これは、ビジネスアプリケーションを作成する手段として、これら2つのツールの長所と短所を比較できることを意味します。ここでは、アーキテクトプログラマーの目を通してExcelを見て、古典的なソフトウェア開発ですでに確立されているソフトウェアアーキテクチャのルールを適用しようとします。



スプレッドシートの利点



  1. 直感的なコンセプト:学校の私たち一人一人が箱の中の紙にサインを見て記入し、海の戦いをしました。Excelを使用するほとんどの人は、特別なトレーニングを受けたことがありません(せいぜい、同僚が30分でどのボタンを押すかを示しました)。これは、「21日でC ++」が楽観的すぎるように聞こえるプログラミング言語よりも大きな利点です。
  2. : , , - . breakpoints . . , .
  3. : , . , UI, .




  1. : . Notepad, Java . . . , E5 . VLOOKUP . -, .
  2. : DRY (Don’t repeat yourself — ). , (, /) . . , , , . . .
  3. インターフェイスのインタラクティブ性の欠如:スプレッドシートでは、データの表示方法を動的に変更することはできません。また、ボタンを押すなどしてプログラムされた操作を作成することもできません。


スプレッドシートをより良くする方法は?



私の名前はヴァディムです。私はCubeWeaverのCTOであり、かなり長い間新しいスプレッドシートを開発してきました。数年前、私はすでにシステムの初期バージョンについて書いています(リンク)が、それ以来、多くの変更があり、今年、プロジェクトは商業段階に達しました。



これは、スプレッドシートの利点を維持しようとしながら、上記の欠点に対処する私のプロジェクトの革新のリストです。



多次元データモデル



多次元データモデルは、データ分析のためにビジネスインテリジェンスおよびOLAPシステムで広く使用されています。モデルの本質は、多次元キューブのセルにデータを格納することです。このキューブのエッジは、ビジネスオブジェクトのヘッダーによって署名されています。





プログラムインターフェイスには、多次元キューブ全体ではなく、選択したフィルターの組み合わせに対応する2次元スライスが表示されます。





このようなモデルをリレーショナルBIシステムに実装する場合、スノーフレークスキーマがよく使用されます。キューブはファクトテーブルによって実装され、面ヘッダーはディメンションテーブルに格納されます。



私のシステムでは、キューブはワークシートと呼ばれ、キューブの端のタイトルはリストアイテムと呼ばれます。



このような多次元ワークシートの各セルには、エッジのラベルで構成される一意のアドレスがあります。たとえば、画像の値935のアドレスは、Bikes、2020、Parisです。

リストの各項目には名前とIDがあります。セル参照は識別子を使用し、式内の上記のアドレスは次のようになります(参照は角括弧で囲まれています)。



[PROD:23, YEAR:2020, CITY:24]ここで、PRODは「製品」リストの識別子であり、23は「バイク」アイテムの識別子です。



多次元モデルを使用すると、不利な点が1になる状況を大幅に改善できます。まず、ヘッダーは数値データとは別に保存されるようになりました。第2に、追加のディメンション「メトリック」(または「レポート位置」)の導入により、セルを通常の番号ではなく意味的な意味でアドレス指定できるため、列または行の追加または削除によるエラーが排除されます。



もちろん、このアプローチはアドバンテージナンバー1で状況をわずかに台無しにすることを言わなければなりません。誰もが海の戦いをしました、そして少数の数学の学生だけが四次元のチェスをしました。しかし、経験によれば、キューブの2次元表現のおかげで、ほとんどのユーザーは新しいデータモデルにすぐに慣れます。



JOIN関数とメタデータ



多次元モデルを使用すると、メタデータを使用してセルを記述することができます。上記のアドレス指定方法は、ワークシートの各セルが特定のリスト項目のセット(たとえば、年、製品、販売時点)に対応することを意味します。次に、リストは属性(列)を持つことができ、通常のリレーショナルテーブルのように見えます。たとえば、販売時点リストに通貨列を追加して、販売時点リストと通貨リストを多対1のカーディナリティ関係にリンクできます。



JOIN関数を使用すると、このような関係を使用してセルを動的に参照できます。この関数はVLOOKUPに置き換わるため、インデックスを操作する必要がなくなります。



例:世界の売上高を計算するには、まず各国の売上高を単一の通貨に変換する必要があります(「売上高」の位置に為替レートを掛けます)。 Excelでは、2つのテーブルを格納します。各国の通貨を含む国のリストと、為替レートを含む通貨のリストです。正しいレートを見つけるには、VLOOKUP関数を2回使用します。国名で通貨コードを検索し、通貨コードで為替レートを検索します。



為替レートのあるセルへの参照は次のようになります。

EX_RATES.[COUNTRY.join(CURRENCY)]ここで、

EX_RATESは為替レートのあるワークシートの名前

COUNTRY-国の

CURRENCYディメンション-通貨のディメンション



リンクチェーンは任意の長さにすることができます。次に例を示します。STORE.join(COUNTRY).join(CURRENCY)



実際、モデルを作成するときに、スノーフレークのアウトラインを作成します。JOIN関数を使用すると、式は、そのスキーマのテーブル(リスト)間のリンクを使用して、ワークシート内のセルを動的に参照できます。この場合、セル間の依存関係は、JOIN関数の引数で明示的に指定されます。



式の有効領域



効果の領域を指定する機能により、式をコピーする必要がなくなります。



キューブの各ディメンションについて、式が作用する要素のセットを定義します。たとえば、すべての年、タイプ「自転車」の製品、レポート「収益」の項目などです。実際には、次のようになります(式の目標は青でマークされ、引数は赤とオレンジです。各ディメンションで選択された要素のリストは画面の下部にあります):





このアプローチにより、欠陥番号2が修正され、式を変更せずにアイテムやディメンションを追加および削除できます。また、式を変更するたびに、式がコピーされたすべてのセルを検索する必要がなくなります。



細胞の相互作用



この革新により、数式を使用してインタラクティブなインターフェイスを作成できます。数式は、セルの値を計算するだけでなく、セルのフォーマット(セルのフォーマット)、セルの色の変更(セルの色)、セルのグループまたは列または行全体の非表示または表示(セルの可視性)にも使用できます。セルは、数値、日付、テキストとしてだけでなく、ボタン、チェックボックス、およびドロップダウンとしてもフォーマットできます。



したがって、たとえば、セルの色はセルの値に応じて変化する可能性があります。あるシートのチェックボックスまたは選択リストは、別のシートのセルを表示、非表示、またはロックできます。



セル内のボタンを使用すると、セル値に対してかなり複雑な操作を作成できます。ボタンを作成することにより、操作のターゲット(セル範囲)と、ターゲットセルごとに1回実行される式を設定します。1つのボタンで複数の操作を行うことができます。したがって、ボタンを押すと、たとえば、前年から次の年にデータをコピーしたり、セルの内容をある値に比例して他のいくつかのセルに配布したりできます(スプラッシュ)。



ボタンをユーザーアクセス制限と組み合わせると、元に戻せない機能が可能になります。したがって、たとえば、ボタンにアクセスできるが、ターゲットセルにアクセスできないユーザーは、ボタンの式で許可されているものだけをセルに書き込むことができます。



結論



新しいスプレッドシートプロセッサにより、他のシステムよりもはるかに複雑なモデルが可能になります。同時に、モデルは明確で保守が容易なままです。式のエラーの可能性も大幅に減少します。



これらのメリットを支払う代償は、システムの複雑さが増すことです。作業を開始する前に、ユーザーはリストとキューブの形式でデータモデルを作成する必要があります。



一般に、このシステムは、Excelよりも技術的に知識のあるユーザー向けに設計されています(たとえば、基本的なプログラミング知識を持つエコノミストや経済モデルに取り組んでいるプログラマー)。



コメントやプライベートメッセージでご質問にお答えさせていただきます。また、インターネットでは、システムのドキュメントといくつかのトレーニングビデオを見つけることができます。



All Articles