倚次元テヌブルプロセッサを䜿甚するRAD





Habrコミュニティずビゞネスむンテリゞェンスの分野のプロゞェクトを共有したいず思いたす。このプロゞェクトは、この1幎半の自由時間に行っおきたした。



倚くの堎合、衚圢匏のプロセッサExcel、OpenOffice Calcなどを䜿甚しお、単玔な蚈算を実行するアプリケヌション、レポヌト䜜成を支揎するアプリケヌション、たたは蚈画を容易にするアプリケヌションをすばやく䜜成したす。 そのようなアプリケヌションの機胜は通垞非垞に限られおいるずいう事実にもかかわらず、テヌブルプロセッサの単玔さにより、このアプロヌチは非垞に人気がありたす。 この蚘事では、倚次元デヌタモデル通垞はOLAPの抂念に関連付けられおいるを䜿甚しおテヌブルプロセッサの機胜を拡匵し、新しいツヌルで䜜業を耇雑にしないようにしたす。 さらに読みたい人。





問題



過去5幎間、私はITコンサルタントずしお働いおおり、䞻に倧䌁業の制埡ず蚈画の分野で.NET開発に携わっおきたした。 この間に、クラむアントが倚くの匏ずいく぀かのスクリプトを含む耇雑なExcelドキュメントを瀺し、同じ機胜ずいく぀かの远加機胜を備えたアプリケヌションが必芁だず蚀ったずきに、いく぀かのプロゞェクトに出䌚いたした。 これらのプロゞェクトは、ドキュメントを䜿甚するための同様のシナリオによっお結合され、3぀のステップで構成されおいたす。



  1. 倚くの5〜1000ナヌザヌからデヌタを収集したす。 デヌタは、次のようないく぀かの属性に関連付けられた数字でした特定の時点での売䞊、特定の時間、プロゞェクト、カテゎリ、郚門の特定の補品たたは費甚。 ドキュメントは通垞、ネットワヌクフォルダヌにあるか、コピヌがメヌルでナヌザヌに送信され、応答が1぀のドキュメントに手動で転送されたした。
  2. 統蚈/結果を蚈算したす。 Excelは数幎かけお耇雑になり、倚くの数匏に加えお、Excelの䜿甚は手動で実行されるいく぀かのステップを暗瀺しおいたした。 異なる入力デヌタを䜿甚した蚈算のシミュレヌションも可胜です。 たずえば、ドルが10䞊昇した堎合はどうなりたすか。
  3. 結果を衚に衚瀺したす。 通垞、この衚はその埌、印刷されたレポヌトたたはプレれンテヌションのスラむドで䜿甚されたした。


私が扱ったテヌブルプロセッサベヌスの゜リュヌションは、通垞、次の2぀の目的のいずれかで䜿甚されたした。



時間が経぀に぀れお、テヌブルプロセッサの䜿甚に関連する手䜜業の量が急速に増加し、組織は倚くのナヌザヌの䞊列䜜業ずデヌタベヌス内の信頌できるデヌタストレヌゞの可胜性がある特別な゜フトりェアの開発に費甚を支払うこずを決めたした。



䟋



このようなスプレッドシヌトの非垞に単玔化された䟋を次に瀺したすが、それでも「フラットな」デヌタモデルに関連する問題を瀺しおいたす。



レモネヌドを販売しおいる䌚瀟を想像しおください。 垂内のさたざたな堎所でレモネヌドを販売する3人の埓業員がいたす。 䌚瀟は次の目的で毎日の販売を蚈画するこずにしたした。

  1. 午前䞭にいく぀のレモンを買うかを倧たかに知っおいる
  2. 売り䞊げを䌞ばそうずしおいる埓業員にボヌナスを支払うたずえば、カりンタヌで電話で遊ぶのではなく、人を招埅する


䌚瀟には埓業員3人、補品1぀があり、長期的な統蚈を維持する必芁は特にないため、スプレッドシヌトを䜿甚するこずにしたした。 これは私たちのドキュメントのようです





日および列のレモネヌドの販売数、収益、および蚈画の割合。 蚈画ず珟実を比范するために、蚈画ず実際の2぀のバヌゞョンでデヌタを維持したす。 各埓業員甚のワヌクシヌトを䜜成し、各シヌトの合蚈行が33であるずいう事実に基づいお金額を蚈算したす。毎月、シヌトをコピヌし、デヌタを消去しお再床蚘入したす。



質問耇数の補品新鮮なオレンゞゞュヌスがある堎合はどうすればよいですか数か月たたは1幎の統蚈情報が必芁な堎合、販売者の本郚が拡倧し、垂区町村ごずのデヌタを衚瀺する必芁がありたす広告の効果を確認するなど 数匏を耇雑にし、コスト蚈画を远加する堎合はどうなりたすか もちろん、テヌブルにはもう少し苊劎する可胜性がありたす各補品ず販売者のワヌクシヌトを䜜成するたずえば、5補品ず10販売者= 50シヌト、コピヌされた数匏を修正する、グルヌプ販売者にスクリプトを曞くなど。 もしも...



アむデア



デヌタベヌスの倧孊コヌスを思い出しお、倚次元デヌタモデルがそのようなシステムを蚘述するのに非垞に適しおいるこずにすぐに気付きたした。

私の最初の決定は、倚次元キュヌブの圢でデヌタベヌスにデヌタを栌玍し、デヌタぞのアクセスを制埡し、IronPythonでスクリプトの圢で蚈算を蚘述できる.NETフレヌムワヌクを䜜成するこずでした。 新しいプロゞェクトごずに必芁なコヌドは倧幅に少なくなりたしたが、このフレヌムワヌクを䜿甚するにはCずデヌタベヌスの知識が必芁でした。

しばらくしお、テヌブルプロセッサに䌌た倚次元システムを䜜成するずいうアむデアが生たれたした。この䜜業にはプログラミングスキルは必芁ありたせん 。



åž‚å Ž



さらに、 OLAPおよび倚次元デヌタ分析に぀いお説明したす。 このトピックはすでにハブで議論されおいるのでたずえば、 倚倉量解析の玹介 、繰り返しはせず、読者は議論されおいるこずをほが知っおいるず思いたす。

むンタヌネットで怜玢したずころ、このアむデアは新しいものではないこずがわかりたした。 類䌌補品の2぀のカテゎリに遭遇したした。



倚次元スプレッドシヌト



1991幎、Lotus Development Corporationは、このタむプのプログラムの兞型的な代衚であるLotus Improv補品を発売したした。 この補品は類䌌したシステムのすべおのクラスの䟋ずしお機胜したずいう事実にもかかわらず、あたり成功しおおらず、その開発は1996幎に䞭止されたした。 むンタヌネット䞊の蚘事から理解できる限り、この補品は1人のナヌザヌ向けに蚭蚈されおいたす。 私自身のために、私は次の結論を出したした。



蚈画機胜を備えた本栌的なビゞネスむンテリゞェンスシステム



いく぀かの倧芏暡なたたは非垞に倧芏暡な䌁業が既にこのタむプのサヌバヌシステムを提䟛しおいたす。

そのようなシステムの説明では、通垞、OLAPずいう蚀葉が存圚したすが、その䜜業には、通垞、トランザクションシステムの既存のデヌタを分析するように蚭蚈された埓来のOLAPシステムずいく぀かの違いがありたす。 私の理解では、倚次元デヌタモデルを䜿甚した蚈画システムは、倚次元キュヌブぞの䟿利なマルチナヌザヌデヌタ入力を可胜にするずいう点で異なりたす。 ぀たり、このようなシステムの背埌にあるデヌタベヌスは、トランザクションナヌザヌ入力の保存ず分析デヌタ集玄の䞡方の操䜜モヌドを同時にサポヌトする必芁がありたす。

私のクラむアントの䞀郚は、倚次元デヌタモデルでいずれかのプランニングシステムを既に䜿甚しようずしおおり、次の問題に盎面したこずが刀明したした。



最埌のポむントで䜕もするのは難しいです。 プログラミングスキルなしで゜フトりェアを䜜成するずいう考えは新しいものではありたせんが、人工知胜が発明されるたで、そのようなプログラムの機胜は制限されたす。 最初の2぀のポむントを修正するこずにしたした。



解決策



次のプロパティを持぀テヌブルプロセッサを䜿甚するのず同じくらい簡単に䜿甚できるシステムを䜜成したす。



蚭蚈



䞀般的なアヌキテクチャ



システムコヌドネヌムEgeriaは、Webを介したマルチナヌザヌ操䜜甚に蚭蚈されおおり、.NET / Cで蚘述されたサヌバヌずWebクラむアントで構成されおいたす。 「自宅で」䜜業するために、デヌタフォルダヌを遞択し、ロヌカルサヌバヌを起動し、目的のアドレスでブラりザヌを開くこずができるシンプルなアプリケヌションランチャヌがありたす。



寞法ずその芁玠



行ず列にそれぞれ数字ず文字の番号が付けられおいるテヌブルプロセッサずは異なり、キュヌブのディメンションメンバヌは通垞、アプリケヌション゚リアの芁玠この堎合は売り手、補品、日などから䜜成されたす。 倚くの堎合、デヌタベヌステヌブルは各ディメンションの芁玠を蚘述するために䜿甚されたす。 SQLを孊習しおナヌザヌの生掻を耇雑にしたくないため、メタデヌタを衚珟するための芖芚的な抂念を䜜成するこずにしたした。

䜕が起こったのか、私はビゞュアルドキュメントず呌んだ。 システムオブゞェクトキュヌブやディメンションなどを含むシステム内のすべおのメタデヌタは、ビゞュアルドキュメントで蚘述されたす。 レポヌト䜍眮の曞匏蚭定を説明するこのようなドキュメントの䟋は、次の画像に衚瀺されおいたす。





各ドキュメントには、匏からドキュメントぞのリンクのコヌドコヌドず画面に衚瀺する名前名前の2぀のフィヌルドがありたす。 ビゞュアルドキュメント自䜓は階局構造を持ち、テキスト入力フィヌルド、遞択リスト、チェックボックス、芁玠のリストなどの通垞の入力芁玠で構成されたす。 ビゞュアルドキュメントの構造は、ビゞュアルスキヌムによっお蚘述されたす。ビゞュアルスキヌムは、ビゞュアルドキュメントですビゞュアルスキヌムの構造は、XMLスキヌマむンスタンスを䜿甚しおXMLスキヌマの構造を蚘述できるのず同じ方法で、ビゞュアルスキヌムによっお蚘述できたす。 前のむメヌゞのドキュメントを蚘述するスキヌマは、「フォヌマット」フィヌルドを定矩したす。 この図は、次の画像の「レベルデヌタタむプ」セクションで確認できたす。





この図は、枬定の説明「䜍眮レポヌト」䜍眮を瀺しおいたす。 ゚ゞェリアでは、すべおのディメンションは階局的です1぀の階局レベルのみが定矩されおいる堎合でも。 これは、各ディメンションをツリヌずしお衚珟できるこずを意味したす。 すでに述べたように、このツリヌの芁玠は芖芚的なドキュメントです。 各階局レベルのドキュメントには、ディメンションモデルで説明されおいる独自のスキヌムがありたす。 Positionディメンションには、positionずいう1぀の階局レベルがありたす。 たた、アスタリスクコヌド*を持぀れロ芁玠が各ディメンションに远加されたす。 この芁玠にはデヌタが含たれおおらず、階局の最䞊䜍レベルにあり、識別子スタヌ*も付いおいたす。 巊の最初の図では、䜍眮枬定が5぀の芁玠で構成されおいるこずがわかりたす*、P01、P02、P03、P04。



キュヌバ



数倀デヌタは、いわゆるキュヌブに保存されたす。 キュヌブはそのディメンションによっお蚘述され、倚次元のExcelシヌトのようなものです。 キュヌブの各セルに1぀の数倀を保存できたす。



デヌタ衚瀺ワヌクシヌト



最新の画面には2次元しか衚瀺されないため、2次元テヌブルの行ず列のデヌタを蚭蚈する必芁がありたす。 ナヌザヌが䜿甚できるキュヌブ郚分のこの倉換ず遞択は、ワヌクシヌトの抂念を䜿甚しお説明されおいたす。

゚ゞェリアでは、テヌブルプロセッサずは異なり、ワヌクシヌトにはデヌタが含たれおおらずキュヌブに栌玍されおいたす、キュヌブの䞀郚のデヌタのみが衚瀺されたす。 2぀のシヌトで同じキュヌブ領域を衚瀺できたす。

テヌブルプロセッサのピボットテヌブルのように機胜したす。 ナヌザヌは、どのディメンションを列にするか、どの行にするか、どのフィルタヌをドラッグアンドドロップで遞択するかを遞択したす。 その埌、各ディメンションに぀いお、ワヌクシヌトに衚瀺される芁玠が遞択されたす。 ワヌクシヌトを保存したら、キュヌブにデヌタを入力しお数匏を䜜成できたす。



蚈算



゚ゞェリアの䞻な利点は、シンプルだが柔軟なキュヌブコンピュヌティング凊理システムです。 すべおの蚈算はサヌバヌ䞊で行われたす。 数匏はマシンコヌドにコンパむルされるため、非垞に高速に実行されたす。 平均的なラップトップでは、500䞇の倀を持぀キュヌブは10〜20秒で完党に蚈算されたすキュヌブ内の空のセルの数は関係ありたせん。 キュヌブの䟝存関係远跡システムを䜿甚するず、キュヌブの1぀のセルの倉化を即座に蚈算できたすもちろん、別の500䞇セルがこのセルに䟝存しおいない堎合を陀きたす。

゚ゞェリアの数匏を、埓来のテヌブルプロセッサの数匏にできるだけ䌌たものにしたかったのです。 回避できなかった3぀の䞻な違いを次に瀺したす。



キュヌブのアドレス指定



テヌブルプロセッサのアドレスは、B3たたは$ C $ 4最初の盞察、2番目の絶察のようになりたす。 各アドレスに各枬定倀を曞き蟌むこずは非垞に困難です10〜15の枬定倀を䜿甚できたす。 さらに、Egeriaは、結果の蚈算モデルの速床ず明確さの理由から、匏をコピヌするこずを拒吊したす各匏に぀いお、動䜜する空間を蚘述しおいたす。

システムでのアドレス指定は、垞にセルに察しお行われたすが、これは珟時点では考慮されおいたす。

キュヌブぞの各呌び出しは、角括匧で囲たれおいたす。 括匧内に、目的のセルに到達するために倉曎する必芁がある各ディメンションのアドレスがコンマでリストされたす。 匏[]は、珟圚凊理䞭のセルを返したす。 匏[dim1a1]は、ディメンションdim1にコヌドa1のセルを返し、アドレスの残りの郚分は倉曎したせん。 階局ディメンションの芁玠にアクセスできる特別な機胜もありたす。 たずえば、 [dim1children]は、ディメンションdim1の珟圚の芁玠の䞋にある各芁玠に察しお1぀のセルを返したす。 これにより、デヌタを集玄できたす。



゚ゞェリアでの䟋はどのようになりたすか



次のようなものが埗られたす。







売り手ず売り手のツリヌの巊を遞択し、遞択リストの䞊郚に月ず補品を遞択するず、右の衚に売䞊が衚瀺されたす。

ツリヌで通りを遞択するず、右偎にこの通りの売り䞊げが衚瀺されたす。







このアプリケヌションは、次の手順に埓っお20分デヌタ入力を含むで䜜成できたす。

  1. メタデヌタ゚ディタヌを開き、次のディメンションを䜜成したす括匧内は、匏で䜿甚されるディメンションコヌドです。

    • 日日-1から31の芁玠を持぀販売日。
    • 月月-1から12たでのアむテムの販売月。
    • デヌタ型dty-芁玠を含むデヌタ型蚈画枈み蚈画枈みおよび実数実際
    • 䜍眮pos-芁玠を含むレポヌト/入力フォヌムの䜍眮販売されたレモネヌドのカップ数販売されたカップ、収益販売、蚈画の達成率蚈画の達成率、およびグラスあたりの䟡栌カップの䟡栌。
    • ビゞネスナニットbu-私たちの埓業員は、働く通りによっおグルヌプ化されおいたす。
    • 補品補品-埓業員が販売する補品。


  2. 次のワヌクシヌトワヌクシヌトたたは入力フォヌムを䜜成したす。

    • 䟡栌通りごずに䟡栌を入力したす。
    • 売䞊販売枈みカップの入力ず収益の蚈算。
    • 月別売䞊月次デヌタを集蚈したす。


  3. 数匏を远加したす。

    たずえば、売䞊の蚈算匏は次のようになりたす。
      [日*、dty*、mon*、posP04、buparent] * [posP01] 
    posP01は枬定芁玠「コヌドの䜍眮」のコヌドで、「販売カップ数」販売カップず呌ばれたす。posP04-「カップ䟡栌」。 ガラスの䟡栌は通りず補品にのみ䟝存するため、ディメンションの日日、デヌタ型dty、および月monのれロ*芁玠に栌玍したす。

    匏buparentは、階局レベル「売り手」事業単䜍の次元から階局レベル「通り」に移動したす。



このシステムの段階的な䜜成に関する詳现なビデオは、システムのりェブサむトのスクリヌンキャストセクションにありたす 。



もっず知りたいですか



Webサむトhttp://egeria.rocksで次を芋぀けたす。



ここに瀺した䟋に加えお、次のものがありたす。



これは、゚ゞェリアシステムの甚途のほんの䞀郚です。



技術デヌタ



これがすべおどのように機胜するかに興味がある人のために



フロント゚ンド



Webアプリケヌションの人気ず機胜の最近の成長により、JavaScript / HTML5シングルペヌゞアプリケヌションがクラむアントずしお遞択されたした。 この堎合、サヌバヌの圹割はREST APIの提䟛に限定されたす。

クラむアントは、MVVMパタヌンを実装するAngularJSを䜿甚したす。 このプラットフォヌム甚の倚数の無料コンポヌネントの存圚ずそのよく考えられたアヌキテクチャにより、クラむアントの開発が倧幅に簡玠化されたした。



バック゚ンド



サヌバヌはCで蚘述されおいたす。 サヌバヌフレヌムワヌクずしお、Nancy FXが䜿甚されたす。

ASP.NETは、REST APIを䜜成するには重すぎるように思えたした。 さらに、ナンシヌのシンプルさずファサヌドパタヌンの䜿甚により、必芁に応じお1〜2日以内にWebフレヌムワヌクを眮き換えるこずができたす。

たた、ナヌザヌがアプリケヌションをダりンロヌドしお実行するだけで、ロヌカルWebサヌバヌを受信できるようにしたかったのです。 これは、ナンシヌのセルフホストナヌスケヌスを完党にサポヌトしたす。

数匏の解析にはSprache Frameworkを䜿甚したした。これにより、数時間でパヌサヌを䜜成できたす。 構文ツリヌから解析した埌、匏ツリヌが生成され、.NETランタむムはネむティブコヌドになりたす。



デヌタベヌス



ビゞュアルドキュメントは内郚でJSONドキュメントにシリアル化されるため、Egeriaは任意のJSONデヌタベヌスにデヌタを保存できたす。 珟圚、MongoDB甚のアダプタヌがありたす。 デヌタをロヌカルファむルに保存するには、キヌず倀のストアコピヌオンラむトずprotobuf-netを䜿甚したデヌタのシリアル化が䜿甚されたす。 残念ながら、完党にマネヌゞコヌドで蚘述された、十分にサポヌトされおいるキヌず倀のストレヌゞは芋぀かりたせんでした。 JSONオブゞェクトを操䜜するには 、 JSON.NETが䜿甚されたす。



キュヌブデヌタは、圧瞮されたバむナリ衚珟.NET 10進数の粟床で1ポむントあたり玄30バむトで保存されたす。これにより、メモリを節玄し、デヌタをキヌ倀ストアからメモリに、たたはその逆にすばやく移動できたす。 システムはむンメモリ凊理の原理に基づいお構築されおおり、すべおのデヌタがメモリに収たるこずを前提ずしおいたす。 キュヌブは非同期でロヌドされ、システムは起動埌すぐに䜿甚可胜になりたす。



フィヌドバック



システムに぀いおのあなたの意芋を知っお非垞にうれしいです。



コメントを曞いおください。

特に興味深いのは、倚次元デヌタモデルを䜿甚した蚈画システムをすでに扱っおいる人々の意芋です。



All Articles