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

ウィンドウ関数

総合計のパーセント、移動平均、年間成長率および四半期成長率、順位などの一般的なビジネスケースを計算するには、SAQL ウィンドウ関数を使用します。

ウィンドウ関数では、隣接したグループから集計されたデータを使用して 1 つのグループのデータを計算できます。ウィンドウを使用しても、クエリから返される行数に変更はありません。ウィンドウでは、グループ内ではなく複数グループにわたる集計を行い、集計基準として有効な数値射影を受け入れます。

集計関数を使用するウィンドウでは次の構文を使用します。

順位付け関数を使用している場合は次の構文を使用します。

この場合、次のようになります。

windowfunction
ウィンドウをサポートする集計関数。現在サポートされている関数は、avgsumminmaxcountmedianpercentile_discpercentile_cont です。
rankfunction
パーティション内の各行の順位値を返します。サポートされている順位付け関数は rank()dense_rank()cume_dist()、および row_number() です。例については、「順位付け関数」セクションを参照してください。
projection expression

指定した列の値から射影を生成するために使用される式。

row range

次の構文を使用して行の範囲を指定します。

範囲 意味
[.. 0] リセットグループの開始行から現在の行まで。
[0 ..] リセットグループの現在の行から最後の行まで。
[-2 .. 0] 現在の行の 2 行前から。ウィンドウの対象は 3 行です。
[0 .. 2] 現在の行から現在の行の 2 行後まで。ウィンドウの対象は 3 行です。
[-1 .. -1] 現在の行の 1 行前。ウィンドウには 1 行が含まれます。
[.. -2] リセットグループの開始行から現在の行の 2 行前まで。
[..] リセットグループ全体を集計します。
reset groups
値が変更されたときにウィンドウ集計をリセットする列。all のリセットグループは、ウィンドウ集計ですべての列をリセットすることを示します。
order clause
並び替えに使用する列を指定します。このアクションにより、ウィンドウ関数が評価される前に、行が並び替えられます。

order 句は、行の範囲が [..] でウィンドウ関数が sumavgmin、または max の式には使用できません。たとえば、sum(sum(Sales)) over([..] partition by Year order by Quarter) は無効です。

メモ

label
出力列の名前。

メモ

グループ化されたクエリ

ウィンドウ関数はグループ化されたクエリでのみ有効です。次の例は無効です。

複数のリセットと複数の並び替え

複数のリセットと複数の並び替えは有効です。次に例を示します。

共通グループ

ウィンドウ関数は共通グループクエリで使用できます。次に例を示します。

sum(sum(a[Sales])) over([-2 .. 0] partition by (a[Year], a[Quarter]) order by (a[Year] asc, sum(a[Sales]) desc))

各ウィンドウ関数は 1 つの共通グループストリームでのみ使用できます。次の例は無効です。

メモ

関数の使用についての詳細は、「集計関数」を参照してください。

例 - 上位 5 人の営業担当を動的に表示する

ウィンドウを使用して、国ごとに上位 5 人の営業担当を動的に表示するグラフを作成します。このグラフは商談の成立に応じて継続的に更新されます。例では、ウィンドウを使用して次の計算が実行されます。
  • 総額に対する各営業担当の貢献の割合 (国別)
  • 営業担当の貢献ランキング (国別)
これらの計算を使用して、各国の上位 5 人の営業担当を表示できます。

作成されたグラフには、各国の上位 5 人の営業担当と、各営業担当のランキングが表示されます。

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

累計値 (リセットなし)

次のクエリは、四半期ごとの売上合計の累計値を計算します。「partition by all」は、合計がどの列でもリセットされないことを示します。

Year Quarter sum_amt r_sum
2013 1 1000 1000
2013 2 2000 3000
2013 3 3000 6000
2013 4 2000 8000
2014 1 1000 9000
2014 2 500 9500
2014 3 9000 18500
2014 4 3000 21500
2015 1 500 22000
2015 2 500 22500
2015 3 200 22700
2015 4 400 23100

年ごとの累計値

累計値は毎年リセットされます。

Year Quarter sum_amt r_sum
2013 1 1000 1000
2013 2 2000 3000
2013 3 3000 6000
2013 4 2000 8000
2014 1 1000 1000
2014 2 500 1500
2014 3 9000 10500
2014 4 3000 13500
2015 1 500 500
2015 2 500 100
2015 3 200 1200
2015 4 400 1600

移動 3 四半期の最小売上 (移動最小)

最後の 2 行から現在の行までの範囲の移動最小値を調べます。

Year Quarter sumSales m_min
2013 1 1000 1000
2013 2 2000 1000
2013 3 3000 1000
2013 4 2000 2000
2014 1 1000 1000
2014 2 500 500
2014 3 9000 500
2014 4 3000 500
2015 1 4000 4000
2015 2 500 500
2015 3 200 200
2015 4 400 200

パーセント合計

次のクエリは、その年の四半期売上のパーセントを計算します。行の範囲 [..] は、パーセントを計算する数式で使用される、各年の小計を計算します。

Year Quarter sumSales p_tot
2013 1 1000 12.5%
2013 2 2000 25%
2013 3 3000 37.5%
2013 4 2000 25%
2014 1 1000 7.41%
2014 2 500 3.70%
2014 3 9000 66.67%
2014 4 3000 22.22%
2015 1 500 31.25%
2015 2 500 31.25%
2015 3 200 12.50%
2015 4 400 25%

年間の差異

次のクエリは、前四半期と比較した売上の成長を計算します。[-1 .. -1] は、その行の四半期の前の四半期を示します。結果表の空白スペースは null 値を表します。

Year Quarter sumSales diff
2013 1 1000
2013 2 2000 1000
2013 3 3000 1000
2013 4 2000 -1000
2014 1 1000
2014 2 500 -500
2014 3 9000 8500
2014 4 3000 -6000
2015 1 500
2015 2 500 0
2015 3 200 -300
2015 4 400 200

順位付け関数

rank()
並び替えに基づいて順位を割り当てます。値が同じ場合は同じ順位を繰り返し、次の一致しない値で繰り返した数だけ順位をスキップします。
dense_rank()
rank() と同じですが、前の繰り返し数に基づいて値をスキップしません。
cume_dist()
リセットグループ内のデータの累積分布 (相対位置) を計算します。
row_number()
リセットグループ内のすべての行に 1 ずつ増分する番号を割り当てます。

次の表には、上記のコードで rank()dense_rank()cume_dist()、および row_number() 関数に置き換えた場合の結果列も示されています。

Year Quarter sum_amt rank dense_rank cume_dist row_number
2013 1 1000 1 1 0.25 1
2013 2 2000 2 2 0.75 2
2013 4 2000 2 2 0.75 3
2013 3 3000 4 3 1 4
2014 2 500 1 1 0.25 1
2014 1 1000 2 2 0.5 2
2014 4 3000 3 3 0.75 3
2014 3 9000 4 4 1 4
2015 1 500 1 1 0.5 1
2015 2 500 1 1 0.5 2
2015 4 600 3 2 0.75 3
2015 3 700 4 3 1 4

次のクエリは、年内で実績の高い上位 3 四半期を表示します。

Year Quarter sumSales rank
2013 1 1000 1
2013 2 2000 2
2013 4 2000 2
2014 2 500 1
2014 1 1000 2
2014 4 3000 3
2015 1 500 1
2015 2 600 1
2015 4 600 3

次のクエリは、95 パーセントを表示します。

95 パーセントを表示しているグラフ

関数の使用についての詳細は、「集計関数」を参照してください。