変換表定義
「Transposition Table Definition」を使用して、行を列(PIVOT)に、または列を行(UNPIVOT)にローテーションすることで、データセットを再構築できます。
構文
transposition_table_definition ::= DEFINE [export_specification] [transposition_table_type] DATASET table_name
{ transposition_code_block | pivot_code_block_load | unpivot_code_block_load }
END
transposition_table_type ::= VERSIONED
詳細は、「エクスポート仕様」を参照してください。
共通要素
transposition_rowsource_specification ::= ROWSOURCE { transposition_table_source | inline_source };
transposition_table_source ::= table_reference [ row_filtering_conditional ]
segment ::= WITHIN table_name [EXCLUDE] column_list;
変換コード・ブロック
トランスポジション・コード・ブロックには、データの変換方法を決定するPIVOTまたはUNPIVOTブロックが含まれています。
transposition_code_block ::= pivot_code_block | unpivot_code_block
ピボット定義
pivot_code_block ::=
transposition_rowsource_specification
pivot_section
[ column_mapping_assignment ]...
[ primary_key_specification ]
ノート:
PIVOTセクションから生成された列の列のみをマップできます。pivot_section ::= PIVOT
'('
[ segment ]
pivot_transposition...
')'
pivot_transposition ::= THIS [ column_list ] '=' { pivot_function_list | pivot_scalar_list }
FOR { table_name.column_name IN constant_value_expression | table_column_tuple IN constant_value_tuple_expression }
pivot_function_list ::= '[' aggregate_function [ column_prefix ] [, aggregate_function [ column_prefix ] ] ... ']'
pivot_scalar_list ::= '[' column_name [ column_prefix ] [, column_name [ column_prefix ] ] ... ']'
column_prefix ::= '-' COLPREFIX string
table_column_tuple ::= '(' table_name.column_name [, table_name.column_name] ... ')'
constant_value_expression ::= '(' constant_value [, constant_value] ... ')'
constant_value_tuple_expression ::= '(' constant_value_tuple [, constant_value_tuple] ... ')'
constant_value_tuple ::= '(' constant_value, constant_value [, constant_value] ... ')'
ノート:
WITHIN文をスキップすると、遷移で使用されないすべての列がデータのパーティション化(グループ化)に使用されます。PIVOTコール内では、遷移を集計またはスカラーにできます。 集計を使用する場合は、すべての変換文に集計が必要です。- 左側の列名が明示的に指定されていない場合、
-COLPREFIXプロパティは集計ベースの遷移に必須で、スカラー遷移にはオプションです。 ROWSOURCEには結合または結合を含めることはできませんが、フィルタを含めることができます。- その他の変換(集計を除く)は、
PIVOTブロックの後で、PIVOTセクションの列を使用してのみ許可されます。 - データセットでは
GROUP BYは許可されません。 - 主キーはオプションです。 オプションの場合、句内の列は主キーとみなされます。 主キーは、特に機能に依存する列を除外するために指定できます。
例
国および市区町村を使用して各月の平均収入を計算します。
DEFINE VERSIONED DATASET DW_CITY_PIVOT
ROWSOURCE CITIES;
PIVOT
(
/* ------------------------- SPECIFY PARTITION -------------------------- */
WITHIN CITIES[COUNTRY, CITY, CITY_CODE];
/* ------------------------SPECIFY TRANSPOSITIONS ----------------------- */
// Provide target column names on LHS for each of the month values
THIS[AV_INC_JAN, AV_INC_FEB, AV_INC_MAR] = AVG(CITIES.INCOME) FOR CITIES.MONTH IN ('Jan', 'Feb', 'Mar');
);
PRIMARYKEY [COUNTRY, CITY];
END
国と都市を使用して、各年の総人口と平均人口を計算します。
DEFINE VERSIONED DATASET DW_CITY_PIVOT
ROWSOURCE CITIES;
PIVOT
(
WITHIN CITIES[COUNTRY, CITY, CITY_CODE];
// Target column names are generated using -COLPREFIX property. The YEAR values are suffixed to -COLPREFIX using underscore(_).
THIS = [ SUM(CITIES.POPULATION) -COLPREFIX 'SUM_POP', AVG(CITIES.POPULATION) -COLPREFIX 'AVG_POP' ]
FOR CITIES.YEAR IN (2000, 2010, 2020);
// E.g. Generated columns SUM_POP_2000, AVG_POP_2000, SUM_POP_2010 , ...
);
THIS[SUM_CHANGE_2010_2020] = THIS.SUM_POP_2000/THIS.SUM_POP_2010;
PRIMARYKEY [COUNTRY, CITY];
END
国と市区町村を使用して、各(年、月)の組合せの総人口を計算します。
DEFINE VERSIONED DATASET DW_CITY_PIVOT
ROWSOURCE CITIES;
PIVOT
(
WITHIN CITIES[COUNTRY, CITY, CITY_CODE];
// Multiple column combinations.
THIS = SUM(CITIES.POPULATION) -COLPREFIX 'SUM_POP'
FOR (CITIES.YEAR, CITIES.MONTH) IN (
(2000,'Jan'), (2000,'Feb'), (2000,'Mar'),
(2010,'Feb'), (2010,'Mar'),
(2020,'Jan'), (2020,'Feb'), (2020,'Mar')
);
// Column name examples: SUM_POP_2000_JAN, SUM_POP_2000_FEB
);
PRIMARYKEY [COUNTRY, CITY];
END
非集計ピボット
DEFINE VERSIONED DATASET DW_CUSTOMERS_PIVOT
ROWSOURCE CUSTOMERS;
PIVOT
(
WITHIN CUSTOMERS[ID];
// For non-aggregation pivot, -COLPREFIX is optional.
// In this case, use the values from IN clause as column names.
THIS = CUSTOMERS.AttributeValue FOR CUSTOMERS.Attribute IN ('FirstName', 'LastName', 'DOB');
);
PRIMARYKEY [ID];
ENDデータセット内のすべてのPIVOTを結合する
DEFINE VERSIONED DATASET DW_CITY_PIVOT
ROWSOURCE CITIES;
PIVOT
(
/* ------------------------- SPECIFY PARTITION -------------------------- */
WITHIN CITIES[COUNTRY, CITY, CITY_CODE];
// or WITHIN ALL;
/* ------------------------SPECIFY TRANSPOSITIONS ----------------------- */
// Provide target column names on LHS for each of the month values
THIS[AV_INC_JAN, AV_INC_FEB, AV_INC_MAR] = AVG(CITIES.INCOME) FOR CITIES.MONTH IN ('Jan', 'Feb', 'Mar');
THIS = [ SUM(CITIES.POPULATION) -COLPREFIX 'SUM_POP', AVG(CITIES.POPULATION) -COLPREFIX 'AVG_POP' ] FOR CITIES.YEAR IN (2000, 2010, 2020);
// Multiple column combinations
THIS = [SUM(CITIES.POPULATION) -COLPREFIX 'SUM_POP']
FOR (CITIES.YEAR, CITIES.MONTH) IN (
(2000,'Jan'), (2000,'Feb'), (2000,'Mar'),
(2010,'Feb'), (2010,'Mar'),
(2020,'Jan'), (2020,'Feb'), (2020,'Mar')
);
);
THIS[SUM_CHANGE_2010_2020] = THIS.SUM_POP_2000/THIS.SUM_POP_2010;
PRIMARYKEY [COUNTRY, CITY];
END
アンピボット定義
unpivot_code_block ::= transposition_rowsource_specification
unpivot_section
[ column_mapping_assignment ] ...
primary_key_specification
ノート:
「UNPIVOT」セクションから生成された列に対してのみ列を割り当てることができます。
unpivot_section ::= UNPIVOT [ INCLUDE NULLS ]
'('
[ segment ]
unpivot_transposition ...
')';
unpivot_transposition ::= THIS column_tuple_list '=' table_name column_list ;
column_tuple_list ::= '[' column_tuple [, column_tuple ]... ']'
column_tuple ::= '(' column_key_value [, column_key_value ]... , identifier ')'
column_key_value ::= identifier ':' constant_value
ノート:
WITHIN文はオプションです。 スキップする場合は、トランジションで使用されない残りの列をすべてパーティションで使用する必要があります。NULL値はデフォルトで除外されます。INCLUDE NULLSを使用して明示的に含めることができます。UNPIVOTブロックでは集計は許可されません。ROWSOURCEには結合または結合を含めることはできませんが、フィルタを含めることができます。 その他の変換(集計を除く)は、UNPIVOTセクションの後に、UNPIVOTセクションの列を使用してのみ許可されます。- データセットでは
GROUP BYは許可されません。 - 主キーは必須であり、
WITHIN文の列(機能的に依存する列を除外可能)およびUNPIVOT割当てのキー列を含める必要があります。
例
IDおよび会計年度を使用して、製品および販売額を(名前、値)ペアとして表示します。
DEFINE VERSIONED DATASET DW_SALES_UNPIVOT
ROWSOURCE SALES;
UNPIVOT INCLUDE NULLS // Nulls can be included/excluded. Exclude, by default
(
WITHIN SALES[ID, FISCAL_YEAR];
// Target Columns SALES_AMT and PRODUCT are specified on LHS
// The corresponding display values for PRODUCT column are specified in the LHS as well
// Pairs on LHS map to columns on RHS, in sequence
THIS[(PRODUCT: 'A', SALES_AMT), (PRODUCT : 'B', SALES_AMT)] = SALES[PROD_A_AMT, PROD_B_AMT];
);
PRIMARYKEY [ID, FISCAL_YEAR, PRODUCT];
END
IDおよび会計年度を使用して、製品、販売額、販売数量を表示します。
DEFINE VERSIONED DATASET DW_SALES_UNPIVOT
ROWSOURCE SALES;
UNPIVOT INCLUDE NULLS
(
WITHIN SALES[ID, FISCAL_YEAR];
THIS[(PRODUCT : 'A', SALES_AMT), (PRODUCT :'B', SALES_AMT), (PRODUCT : 'A', SALES_QTY), (PRODUCT : 'B', SALES_QTY)]
= SALES[PROD_A_AMT, PROD_B_AMT, PROD_A_QTY, PROD_B_QTY];
);
THIS[SALES_RATIO] = THIS.SALES_AMT/THIS.SALES_QTY;
PRIMARYKEY [ID, FISCAL_YEAR,PRODUCT];
END
国と都市を使用して年、月、人口を表示します。
DEFINE VERSIONED DATASET DW_SALES_UNPIVOT
ROWSOURCE SALES;
UNPIVOT
(
WITHIN SALES[COUNTRY, CITY, CITY_CODE];
THIS[(YEAR : 2000, MONTH : 'Jan', POPULATION), (YEAR : 2000, MONTH : 'Feb', POPULATION), (YEAR : 2000, MONTH : 'Mar', POPULATION)] = SALES[SUM_POP_2000_JAN, SUM_POP_2000_FEB, SUM_POP_2000_MAR];
);
PRIMARYKEY [COUNTRY, CITY, YEAR, MONTH];
END
ブロック・ロード定義
完全および増分に対して様々なロード・ロジックにブロック・ロードを使用します。
ピボット・ロード
pivot_code_block_load ::= 'ON FULL LOAD'
transposition_rowsource_specification
pivot_section
[ column_mapping_assignment ]...
[
'INCREMENTAL LOAD'
transposition_rowsource_specification
pivot_section
[ column_mapping_assignment ]...
]
'ENDLOAD'
[ primary_key_specification ]
ピボット・コードのブロック・ロードの例:
DEFINE VERSIONED DATASET DW_CITY_PIVOT
ON FULL LOAD
ROWSOURCE CITIES;
PIVOT
(
WITHIN CITIES[COUNTRY, CITY, CITY_CODE];
THIS[AV_INC_JAN, AV_INC_FEB, AV_INC_MAR] = AVG(CITIES.INCOME) FOR CITIES.MONTH IN ('Jan', 'Feb', 'Mar');
);
INCREMENTAL LOAD
ROWSOURCE CITIES_COUNTIES;
PIVOT
(
WITHIN CITIES_COUNTIES[COUNTRY, CITY, CITY_CODE];
THIS[AV_INC_JAN, AV_INC_FEB, AV_INC_MAR] = AVG(CITIES_COUNTIES.INCOME) FOR CITIES_COUNTIES.MONTH IN ('Jan', 'Feb', 'Mar');
);
ENDLOAD
PRIMARYKEY [COUNTRY, CITY];
ENDピボット解除ロード
unpivot_code_block_load ::= 'ON FULL LOAD'
transposition_rowsource_specification
unpivot_section
[ column_mapping_assignment ]...
[
'INCREMENTAL LOAD'
transposition_rowsource_specification
unpivot_section
[ column_mapping_assignment ]...
]
'ENDLOAD'
primary_key_specification