機械翻訳について

変換表定義

「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