この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

cogroup

cogroup を使用して、複数のデータストリームのデータを組み合わせて 1 つのデータストリームにまとめることができます。データストリームには、1 つ以上の共通項目が必要です。
cogroup はリレーショナルデータベースの結合と似ていますが、いくつかの重要な違いがあります。リレーショナルデータベースの結合とは異なり、cogroup では、まずデータセットがグループ化され、次にグループが結合されます。cogroup は、次の方法で使用できます。
  • 内部 cogroup
  • 左外部 cogroup
  • 右外部 cogroup
  • 完全外部 cogroup

ステートメント cogroup および group は、代替可能です。明確化のため、ステートメント内のデータストリームが 1 つの場合は group、2 つ以上の場合は cogroup を使用します。

メモ

内部 cogroup

内部 cogroup では、複数のデータストリームのデータを組み合わせて 1 つのデータストリームを作成できます。作成されたデータストリームには、両方のデータストリームに存在する値のみが入っています。つまり、一致しないレコードは削除されます。
構文
1result = cogroup data_stream_1 by field1, data_stream_2 by field2;

field1field2 は、型は同じでなければなりませんが、名前は違うものにすることができます。たとえば、q=group ops by 'Owner', quota by 'Name'; のようになります。

例 - 内部 cogroup

たとえば、営業担当が各取引先とのミーティングにどれだけ時間をかけているかを把握したいとします。かける時間の多さと商談成立との間に関係があるのでしょうか? 営業担当によっては、かける時間が平均とは大きく異なるのでしょうか? これらの質問に答えるには、最初に cogroup を使用して、ミーティングデータを取引先データと組み合わせます。

Salesforce の行動オブジェクトから取得したミーティング情報のデータセットがあるとします。この例では、営業担当は 4 つの異なる会社と 6 回のミーティングを実施しました。「Meetings (ミーティング)」データセットには [MeetingDuration (ミーティング時間)] 列があり、この列にはミーティング時間 (時単位) が含まれます。

ミーティングデータセットを表示している図。

取引先データは Salesforce の商談オブジェクトに存在します。「Ops (運用)」データセットには、[Account (取引先)]、[Won (成立)]、[Amount (金額)] 列があります。[Amount (金額)] 列には、100 万ドル単位の商談金額が含まれます。

「Ops (運用)」データセットを表示している図。

ミーティング時間が商談に及ぼす影響を確認するには、まず cogroup を使用してこの 2 つのデータセットを組み合わせて 1 つのデータストリームにまとめます。

1q = cogroup ops by 'Account', meetings by 'Company';

内部的に (この結果をまだ参照できません)、共通グループ化されたデータストリームには次のデータが含まれます。データストリームが 1 つ以上のディメンションに基づいてどのように積み上げ集計されるかを確認してください。

1(1,{(Shoes2Go,2),(Shoes2Go,5)},{(Shoes2Go,1,1.5),(Shoes2Go,0,3})
2
3(2,{(FreshMeals,3),(FreshMeals, 1)},{(FreshMeals,1,2) (FreshMeals,1,1.4)})
4
5(3,{(ZipBikeShare,4)},{(ZipBikeShare,1,1.1)})
6
7(4,{(ZenRetreats,6)},{(ZenRetreats,0,2)})

データセットを組み合わせました。データを参照するには、次のように foreach を使用して射影を作成します。

1ops = load "Ops";
2meetings = load "Meetings";
3q = cogroup ops by 'Account', meetings by 'Company';
4q = foreach q generate ops.'Account' as 'Account', sum(ops.'Amount') as 'sum_Amount', sum(meetings.'MeetingDuration') as 'TimeSpent';

結果のデータストリームには、会社ごとの総額と総ミーティング時間が含まれます。総額は、会社の各商談金額の合計です。

組み合わせたデータセットを表示している図。

データを組み合わせて 1 つのデータストリームにまとめました。これで、総ミーティング時間が商談に及ぼす影響を分析できます。

左外部 cogroup

左外部 cogroup は、右データストリームのデータを左データストリームのデータと結合します。作成されたデータストリームには、左データストリームに存在する値のみが入っています。左データストリーム内のある値が右データストリーム内にない場合、この欠落している値は、作成されたデータストリーム内で null になります。

選択した値で null 値を置換するには、coalesce を使用してください。

ヒント

構文
1result = cogroup data_stream_1 by field1 left, data_stream_2 by field2;

field1field2 は、型は同じでなければなりませんが、名前は違うものにすることができます。たとえば、q=group ops by 'Owner' left, quota by 'Name'; のようになります。

例 - coalesce を使用した左外部 cogroup

営業担当が目標の何パーセントを達成したかを確認するとします。目標データセットには、各従業員の目標が示されています (Farah には目標がありません)。

目標データセット。

商談データには、各従業員が成立させた商談金額が示されています (Jonathan には、成立した商談がありません)。

商談データセット。

左外部 cogroup を使用して、目標がある従業員のみを表示します。また、目標達成率も表示します。

1quota = load "Quota";
2opp = load "Opportunity";
3q = group quota by 'Employee' left, opp by 'Employee';
4q = foreach q generate quota.'Employee' as 'Employee', trunc(sum(opp.'Amount')/sum(quota.'Quota')*100, 2) as 'Percent Attained';

Jonathan は、まだ商談を成立させていないため、達成率は null です。

商談データセット。

coalesce を使用して、null の商談をゼロに置換します。

1quota = load "Quota";
2opp = load "Opportunity";
3q = group quota by 'Employee' left, opp by 'Employee';
4q = foreach q generate quota.'Employee' as 'Employee', trunc(coalesce(sum(opp.'Amount'),0)/sum(quota.'Quota')*100, 2) as 'Percent Attained';

これで Jonathan の達成率がゼロと表示されます。

商談データセット。

右外部 cogroup

右外部 cogroup は、左データストリームのデータを右データストリームのデータと結合します。作成されたデータストリームには、右データストリームに存在する値のみが入っています。右データストリーム内のある値が左データストリーム内にない場合、この欠落している値は、作成されたデータストリーム内で null になります。

選択した値で null 値を置換するには、coalesce を使用してください。

ヒント

構文
1result = cogroup data_stream_1 by field1 right, data_stream_2 by field2;

field1field2 は、型は同じでなければなりませんが、名前は違うものにすることができます。たとえば、q=group ops by 'Owner' right, quota by 'Name'; のようになります。

完全外部 cogroup

完全外部 cogroup は、左データストリームのデータと右データストリームのデータを結合します。作成されたデータストリームには、すべての値が入っています。一方のデータストリーム内のある値が他方のデータストリーム内にない場合、この欠落している値は、作成されたデータストリーム内で null になります。

選択した値で null 値を置換するには、coalesce を使用してください。

ヒント

構文
1result = cogroup data_stream_1 by field1 full, data_stream_2 by field2;

field1field2 は、型は同じでなければなりませんが、名前は違うものにすることができます。たとえば、q=group ops by 'Owner' full, quota by 'Name'; のようになります。