none
クエリで実績データから予測データを取得したい RRS feed

  • 質問

  • あるテーブルに、下記のような実績売上データを持っています。(例では2014/1/1 - 2014/1/5まで)

    ------
    日付     |  売上

    2014/1/1  |  1000
    2014/1/2  |  2000
    2014/1/3  |  1500
    2014/1/4  |  1800
    2014/1/5  |  2300
    -----

    これをもとに、下記のような予測売上データをビューもしくはテーブルに持ちたいと思っています。
    (例では2014/1/6 - 2014/1/10まで)

    -----
    日付     |  売上

    2014/1/6  |  2440
    2014/1/7  |  2680
    2014/1/8  |  2920
    2014/1/9  |  3160
    2014/1/10  |  3400
    -----

    仮にExcelであれば、TrendあるいはForecast関数を使用することで取得できるような予測データです。
    これをクエリで実現したいと思っています。
    しかし方法について検討がついていません。
    ストアドプロシージャを使う?Analysis Servicesを使う?
    Analysis Servicesを使ったならその計算結果をビューもしくはテーブルに持てるのか?

    SQL SERVER のバージョンは2008です。
    予測の結果は必ずビューもしくはテーブルに持つ必要があります。
    自分であればこんな方法で実現する、というサンプルを教えていただければ有難いです。

    ご回答にあたり不足している情報があればお知らせください。

    何卒よろしくお願いします。

    2014年7月25日 17:07

すべての返信

  • Excelは魔法のような、無責任な予測しているわけではありません。論理的な計算結果に基づく予測値です。TREND関数であれば回帰直線 y = mx + b による予測、FORECAST関数についても数式が記載されています。

    SQL Serverで同じ値をテーブルに持ちたいのであれば同じ数式で計算するまでですし、別の予測関数を使いたいのであればそうするまでです。数式から目を背けないでください。

    • 回答の候補に設定 星 睦美 2014年7月30日 8:03
    2014年7月25日 21:14
  • 1.テーブルで保持する場合。
     1-1.予測売上テーブルを作成する。
     1-2.日次の夜間バッチ等で予測売上を算出して上記のテーブルに登録する。

    2.ビューで保持する場合。
     2-1.カレンダーのテーブルを作成する。
     2-2.上記のカレンダーのテーブルをメインとし、SELECT句のサブクエリやFunctionを使用して予測売上を算出するビューを作成する。

    1.の優位点は取得時のレスポンスで、2.の優位点はリアルタイム性とかが思いつきます。
    計算方法等については仕様をどうするかなのでここでは触れないでおきます。

    • 回答の候補に設定 星 睦美 2014年7月30日 8:04
    2014年7月26日 0:09
  • すみません、仰る通り最終的には数式を考える必要があるのですが、
    今回はその手前の、

    実績データ → "処理" → 予測ビュー (orテーブル)

    の"処理"の部分の大まかな方向性についてご意見を伺えればと思っています。

    2014年7月26日 5:28
  • どれぐらいのデータ量を元にどのような計算を行うかによっても変わってくると思います。ある程度計算に時間がかかるのであれば、Viewでは実用に耐えないかもしれません。また、計算にそれほど時間がかからないのであれば、Viewや、もしくはその時にテーブルを作成してしまっても良いかもしれません。テーブルの作成も1日に最初にアクセスがあった際に一度だけという運用もあるかもしれません。
    なので、なんとも言えないのですが、一番一般的という点では、aviator__さんも書かれていますが、夜間バッチでテーブルを作成する方法だと思います。夜間バッチと書きましたが、例えば一日に何度も動かすということも考えられます。ただ、テーブル作成に時間がかかるのであれば、ロックされる時間も考慮しなければなりません。
    さて夜間バッチですが、具体的にはテーブル作成のストアドプロシージャを作成し、それをエージェントで毎日定時に起動すれば良いでしょう。T-SQLのストアドプロシージャは関数が少なく計算がつらいということであれば、SQL CLRのストアドプロシージャを作成すれば良いでしょう。このような方法ですと、独自に予測計算を自由に行えますから、より実情に近い予測を行うことができるでしょう。例えば、単純には休日を考慮するなどです。がんばればちょっとしたSFAになりそうで、面白そうですね。

    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    • 回答の候補に設定 星 睦美 2014年7月30日 8:01
    2014年7月26日 7:17
  • その"処理"こそが数式であり、それについては「数式から目を背けないでください。」と回答済みです。
    2014年7月27日 22:53
  • 皆様ご回答ありがとうございます。

    テーブル、ビュー、それぞれ一長一短があることが分かりました。できればビューでリアルタイムの予測算出を実現したいと考えていますが、パフォーマンスの問題や、そもそもクエリだけで予測の計算が可能なのかということをを考えると、少し難しいかもしれないですね。。。

    また佐祐理さんからもご回答を頂いていますが、ExcelのFORECAST(に等しい予測計算)をスクラッチで実現するということ自体が、そもそも簡単には済まないということも分かってきましたので、場合によっては一度Excelで計算した結果をデータベースに連携するような方法も考えなければいけないかもしれません。

    2014年7月28日 12:10