2

企業のマーケティング キャンペーンのコンバージョンを追跡する Analytics アプリケーションを構築しています。コンバージョンとは、スーパーマーケットに行って商品を購入することです。会社が Heinz の場合、さまざまな製品のキャンペーンを実行する可能性があるため、キャンペーンは次のようになります。

  • ベイクドビーンズ
  • トマトスープ
  • ケチャップ

これらはオンライン キャンペーンであるため、次のようなさまざまなメディアを使用できます。

  • Webサイト
  • Facebookのページ
  • Flash バナー広告
  • モバイルアプリ広告

また、誰かが製品を購入する場合、次のようなスーパーマーケットを介して購入されます。

  • ウォルマート
  • アズダ
  • 安全な方法
  • クローガー

そして、これらすべてのコンバージョンを追跡しています。分析アプリケーションは、上記の任意の組み合わせのコンバージョン データを表示する必要があります。たとえば、コンバージョンを表示する必要があるかもしれません...

  • ベイクドビーンズ用。
  • ベイクドビーンズはFacebookページから。
  • スーパーマーケットのウォルマート向けですが、すべてのキャンペーンとメディア向けです。
  • Facebook ページから作成された Walmart 用ですが、すべてのキャンペーン用です。
  • Flash バナー広告を介して作成されたケチャップと Safeway の場合。

分析を高速化するために、生データ (数百万のレコード) を処理することを避けていますが、1 日ごとに保存されたデータの集計バージョンを保存しています。9 月 12 日の例では、ベークド ビーンズで 12 回のコンバージョンがあり、ウェブサイト経由で 6 回 (すべての製品で)、ウォルマートで 8 回のコンバージョンがあり、これらは 3 つの個別のテーブル (キャンペーン、媒体、およびスーパーマーケット)。しかし、Facebook ページ経由で作成された Ketchup と Walmart のコンバージョンを知る必要がある場合、別々のテーブルに保存することは明らかに機能しません。

上記をサポートできるデータモデルを考え出すのに苦労しています。標準のリレーショナル データベース (MySQL) を使用しています。おそらく、これを処理するためのより良い戦略があります。

4

2 に答える 2

3

はい、より良い戦略があります。これは、ディメンション モデリング、またはスター スキーマと呼ばれます。

ファクトテーブル と呼ばれる 1 つのテーブルを保存します。このテーブルには、Campaign、Medium、および Supermarket の列があります。

これらの属性のそれぞれについて、ファクト テーブルの列はディメンション テーブルへの外部キーです。キャンペーン、メディア、スーパーマーケットごとに 1 つのディメンション テーブル。

あなたの場合、何百万もの行を避けるために、ファクト テーブルに 4 番目の列を追加できますconversions。コンバージョンが発生したら、カウントを増やします (別の行を追加するのではなく)。

テーブルの例を次に示します。

CREATE TABLE FactTable (
  campaign_id INT,
  medium_id INT,
  supermarket_id INT,
  conversions INT,
  PRIMARY KEY (campaign_id, medium_id, supermarket_id),
  FOREIGN KEY (campaign_id) REFERENCES Campaigns(campaign_id),
  FOREIGN KEY (medium_id) REFERENCES Mediums(medium_id),
  FOREIGN KEY (supermarket_id) REFERENCES Supermarkets(supermarket_id)
);

次に、すべての変換を照会できます。

  • ベイクドビーンズ用。

    SELECT SUM(conversions) FROM FactTable
    JOIN Campaigns USING (campaign_id) 
    WHERE campaign = 'Baked Beans';
    
  • ベイクドビーンズはFacebookページから。

    SELECT SUM(conversions) FROM FactTable
    JOIN Campaigns USING (campaign_id) 
    JOIN Mediums USING (medium_id)
    WHERE campaign = 'Baked Beans' AND medium = 'Facebook';
    
  • スーパーマーケットのウォルマート向けですが、すべてのキャンペーンとメディア向けです。

    SELECT SUM(conversions) FROM FactTable
    JOIN Supermarkets USING (supermarket_id)
    WHERE supermarket = 'Walmart';
    
  • Facebook ページから作成された Walmart 用ですが、すべてのキャンペーン用です。

    SELECT SUM(conversions) FROM FactTable
    JOIN Mediums USING (medium_id)
    JOIN Supermarkets USING (supermarket_id)
    WHERE medium = 'Facebook' AND supermarket = 'Walmart';
    
  • Flash バナー広告を介して作成されたケチャップと Safeway の場合。

    SELECT SUM(conversions) FROM FactTable
    JOIN Campaigns USING (campaign_id)
    JOIN Mediums USING (medium_id)
    JOIN Supermarkets USING (supermarket_id)
    WHERE campaign = 'Ketchup' AND medium = 'Flash Banner Ad' AND supermarket = 'Safeway';
    

次元モデリングの詳細については、Ralph Kimball の書籍を参照してください。

于 2014-09-04T16:44:44.570 に答える