レポート結果上のレコードが異なる『上の行』や『下の行』の値を参照したい
項目同士の計算を行う際に、どうしても同じ行にある、同一レコードではなくて、上方や下方にある別のレコードの値を利用したいという時があります。
そのような時は、PARTITION_REF関数を利用することで課題を解消できるかもしれません。
PARTITION_REF関数を利用すると、異なるレコードの値を取得することができます。
PARTITION_REF関数の構文
PARTITION_REF([prefix.]field, {sortfield|TABLE|PRESET}, offset)
prefix – AVE.、MAX.、MIN.、CNT.、SUM. のいずれか (オプション)。
field – 取得する集計項目。
sortfield – 値を再取得を始めるタイミングとなる項目。ソート区切り。
TABLE – ソート区切りを使用せずに値を取得する場合に使用。
offset – 値を取得するレコードの前後する数 (整数値)。
PARTITION_REF関数の動きについて
TABLE FILE CAR
SUM
SALES
COMPUTE COL_P2/I6=PARTITION_REF(SALES,TABLE,2);
COMPUTE COL_P1/I6=PARTITION_REF(SALES,TABLE,1);
COMPUTE COL_M1/I6=PARTITION_REF(SALES,TABLE,-1);
COMPUTE COL_M2/I6=PARTITION_REF(SALES,TABLE,-2);
BY COUNTRY
END
SALES項目の値を参照する指定
COL_P2 | 2つ後の値 |
COL_P1 | 1つ後の値 |
COL_M1 | 1つ前の値 |
COL_M2 | 2つ前の値 |
TABLE FILE CAR
SUM SALES
COMPUTE COL_P2/I6=PARTITION_REF(SALES,COUNTRY,2);
COMPUTE COL_P1/I6=PARTITION_REF(SALES,COUNTRY,1);
COMPUTE COL_M1/I6=PARTITION_REF(SALES,COUNTRY,-1);
COMPUTE COL_M2/I6=PARTITION_REF(SALES,COUNTRY,-2);
BY COUNTRY
BY MODEL
WHERE COUNTRY EQ 'ENGLAND' OR 'W GERMANY'
END
SALES項目の値を参照します。
COUNTRY項目の値が変わったタイミングで取得し直します
COL_P2 | 2つ後の値 |
COL_P1 | 1つ後の値 |
COL_M1 | 1つ前の値 |
COL_M2 | 2つ前の値 |
PARTITION_REF関数では参照したい行数を指定すると値を取得できるので、昨年の年月比較をしたい場合は?
2018 年のデータをWHEREで無くしてしまうと昨年データの取得ができない
集計後のフィルタ「WHERE TOTAL」を利用して「WHERE TOTAL 年 EQ 2019」とすることで、表示上 2019年のレコードのみが表示されます
クロス集計の場合は?
PARTITION_REF関数の参照は横展開時の右列を参照する形となり、右端まで参照を終えたら次の行を参照します