ピボット
ピボットは、行を列に変換することでデータを変換します。これにより、値を並べて比較し、傾向を効率的に特定し、月やチャネルなどのカテゴリ間で明確なインサイトを得ることができます。
SALES_Fを作成できます。IMPORT SOURCE SALES
DEFINE VERSIONED DATASET SALES_F
ROWSOURCE SALES;
THIS = SALES[PROD_ID, CHANNEL_ID];
THIS[TIME_ID] = DATE_FORMAT(SALES.TIME_ID,'MMM');
THIS[AMOUNT_SOLD] = SUM(SALES.AMOUNT_SOLD);
GROUPBY [PROD_ID, CHANNEL_ID,TIME_ID];
PRIMARYKEY[PROD_ID, CHANNEL_ID,TIME_ID];
ENDSALES_Fの出力は次のとおりです。
| PROD_ID | CHANNEL_ID | TIME_ID | AMOUNT_SOLD |
|---|---|---|---|
| 1 | オンライン | Jan | 500 |
| 1 | InStore | Jan | 150 |
| 1 | InStore | Mar | 700 |
| 2 | オンライン | Jan | 200 |
| 2 | InStore | Feb | 120 |
| 2 | InStore | Mar | 300 |
単一列パーティション・ピボット
ピボット操作でパーティション化を使用して、特定の属性別にデータをグループ化し、変換されたデータセット内で各カテゴリ(製品やチャネルなど)を区別できます。
パーティションを指定しない場合、移行で使用する列を除き、ROWSOURCEのすべての列がパーティション化に含まれます。
DEFINE VERSIONED DATASET PRODUCT_MONTHLY_REVENUE
ROWSOURCE SALES_F;
PIVOT
(
/* ------------------- SPECIFY PARTITION -------------------------- */
WITHIN SALES_F[PROD_ID];
/* --------------------SPECIFY TRANSPOSITIONS ---------------------- */
// Either provide target column names on LHS for each of the month values
or if unspecified, it will auto-generate and map columns Jan,Feb,Mar
THIS[Jan_Sales,Feb_Sales,Mar_Sales]= SUM(SALES_F.AMOUNT_SOLD) FOR
SALES_F.TIME_ID IN('Jan','Feb','Mar');
);
// Optional. If not specified, PK will be assigned.
PRIMARYKEY [PROD_ID];
ENDこの例では、セグメントWITHIN SALES_F[PROD_ID,CHANNEL_ID]は、データをProduct IDおよびChannel IDでパーティション化しています。 列マッピングTHIS[Jan_Sales, Feb_Sales, Mar_Sales]は、1月、2月および3月のターゲット列を作成します。 出力では、1月、2月および3月の売上に対して個別の列が作成されます。
PRODUCT_MONTHLY_REVENUEデータセットのピボットによる出力を次に示します。
図dasrg-pivot-partition-single.pngの説明
複数列パーティション・ピボット
ピボット操作で複数列のパーティション化を使用して、複数の属性でデータをグループ化し、ユーザーがデータセットの詳細ビューを表示できます。 この方法により、アナリスト・ユーザーは製品やチャネルなどの次元間で比較できるため、より深いインサイトやパターンを発見できます。
ProductとChannelの両方でパーティション化することで、アナリストが各組合せに対して一意の収益貢献を追跡できるようにします。
DEFINE VERSIONED DATASET PRODUCT_BY_CHANNEL_MONTHLY_REVENUE
ROWSOURCE SALES_F;
PIVOT
(
/* ------------------------- SPECIFY PARTITION -------------------------- */
WITHIN SALES_F[PROD_ID, CHANNEL_ID];
/* ------------------------SPECIFY TRANSPOSITIONS ----------------------- */
THIS[Jan_Sales, Feb_Sales, Mar_Sales] = SUM(SALES_F.AMOUNT_SOLD) FOR
SALES_F.TIME_ID IN ('Jan', 'Feb', 'Mar');
);
PRIMARYKEY [PROD_ID,CHANNEL_ID];
ENDこの例では、セグメントWITHIN SALES_F[PROD_ID,CHANNEL_ID] によって、データが複数の列(製品IDおよびチャネルID)でコンポジット・キーとしてパーティション化されます。 列マッピングTHIS[Jan_Sales,Feb_Sales,Mar_Sales]は、リストされた変換された値ごとにターゲット列を作成します。 出力では、PROD_IDおよびCHANNEL_IDによって、1月、2月および3月の売上に対して個別の列が生成されます。
マルチディメンション・パーティション・ピボット
ピボット操作でマルチディメンション・パーティション化を使用すると、特定の値を集計しながら、複数の属性に基づいて列を生成できます。 このピボット操作では、TimeやChannelなど、各カテゴリの組合せの集計売上額が表示されるようにデータが再編成されます。
DEFINE VERSIONED DATASET PRODUCT_BY_CHANNEL_MONTHLY_REVENUE_2
ROWSOURCE SALES_F;
PIVOT
(
/* ------------------ SPECIFY PARTITION -------------------------- */
WITHIN SALES_F[PROD_ID];
/* --------------------SPECIFY TRANSPOSITIONS ------------------- */
//Sales per month
THIS[Jan_Sales, Feb_Sales, Mar_Sales] = SUM(SALES_F.AMOUNT_SOLD) FOR
SALES_F.TIME_ID IN ('Jan', 'Feb', 'Mar');
// Sales per month + channel (multi dimensions)
THIS = [SUM(SALES_F.AMOUNT_SOLD) -COLPREFIX 'Amt'] FOR (SALES_F.CHANNEL_ID,
SALES_F.TIME_ID )IN (('Online','Jan'),
('Online','Feb'),('Online','Mar'),('InStore','Jan'),('InStore','Feb'),
('InStore','Mar));
);
// Other transformations allowed after PIVOT section and only using the
columns generated in PIVOT section
THIS[Jan_Inst_Online_Diff] = THIS.Amt_InStore_Jan - THIS.Amt_Online_Jan;
THIS[Feb_Inst_Online_Diff] = THIS.Amt_InStore_Feb - THIS.Amt_Online_Feb;
THIS[Feb_Inst_Online_Diff] = THIS.Amt_InStore_Mar - THIS.Amt_Online_Mar;
PRIMARYKEY [PROD_ID];
ENDこの例では、データセットPRODUCT_BY_CHANNEL_MONTHLY_REVENUE_2の出力は次のようになります。
図dasrg-pivot-multidimension.pngの説明
