レポート結果上のレコードが異なる『上の行』や『下の行』の値を参照したい

2024年3月23日テクニカルメモ

項目同士の計算を行う際に、どうしても同じ行にある、同一レコードではなくて、上方や下方にある別のレコードの値を利用したいという時があります。
そのような時は、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_P22つ後の値
COL_P11つ後の値
COL_M11つ前の値
COL_M22つ前の値
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_P22つ後の値
COL_P11つ後の値
COL_M11つ前の値
COL_M22つ前の値

PARTITION_REF関数では参照したい行数を指定すると値を取得できるので、昨年の年月比較をしたい場合は?

2018 年のデータをWHEREで無くしてしまうと昨年データの取得ができない

集計後のフィルタ「WHERE TOTAL」を利用して「WHERE TOTAL 年 EQ 2019」とすることで、表示上 2019年のレコードのみが表示されます

クロス集計の場合は?

PARTITION_REF関数の参照は横展開時の右列を参照する形となり、右端まで参照を終えたら次の行を参照します