式マクロ 式マクロは、マッピングで繰り返しや複雑な式を作成するために使用するマクロです。
式マクロを使用すれば、複数の式や定数に対して計算を実行できます。例えば、式マクロを使用することで、一連の販売範囲で複数のフィールドやラベル項目をNULL値に置換できます。
式マクロでは、1つまたは複数の入力フィールドでマクロのソースデータを表します。実行する計算は式で表します。出力フィールドは、計算の結果を表します。
実行時に、タスクが式を拡張してすべての入力フィールドと定数を組み込み、次に結果を出力フィールドに書き込みます。
式トランスフォーメーションおよびアグリゲータトランスフォーメーションで式マクロを作成できますが、式トランスフォーメーションでは式マクロと入出力パラメータを組み合わせることはできません。
マクロのタイプ 以下のタイプのマクロを作成できます。
垂直 垂直マクロは式を垂直に拡張します。垂直マクロは、複数の受信フィールドに同じ計算を実行するために類似する一連の式を生成します。 水平 水平マクロは式を水平に拡張します。水平マクロは拡張された式を1つ生成し、その式により複数のフィールドや定数が組み込まれます。 混合 混合マクロは、式を垂直および水平に拡張します。混合マクロは、複数の垂直式を生成し、それらはさらに水平にも拡張されます。 マクロ入力フィールド マクロ入力フィールドは、式マクロで使用する入力を表すフィールドです。入力には、フィールドまたは定数を使用できます。すべての式マクロにはマクロ入力フィールドが必要です。
垂直マクロの1つのマクロ入力フィールドは、一連の受信フィールドを表します。
水平マクロの1つのマクロ入力フィールドは、一連の受信フィールドまたは一連の定数を表します。水平マクロでは、複数のマクロ入力フィールドを作成して、一連の定数を複数定義できます。
マクロ入力フィールドでは、%<macro_field_name>%の命名規則が使用されます。
例えば、式を複数のアドレスフィールドに適用することが必要な場合があります。この場合、%AddressFields%というマクロ入力フィールドを作成して、フィールドルールを定義し、使用する受信フィールドを指定します。式を設定するときには、%AddressFields%を使用して受信フィールドを表します。
垂直マクロ マクロ式を一連の受信フィールドに適用するには、垂直マクロを使用します。
垂直マクロのマクロ入力フィールドは、受信フィールドを表します。式は、すべての受信フィールドで実行する計算を表します。またマクロ出力フィールドは、計算結果を残りのマッピングに渡す一連の出力フィールドを表します。マクロ出力フィールドでマクロ式を設定します。
マクロ出力フィールドはマクロの出力フィールドを表しますが、出力フィールドの名前はマッピングで明確に定義されません。垂直マクロの結果をマッピングに含めるには、マクロによって生成された出力フィールドを含めるように、ダウンストリームのトランスフォーメーションのフィールドルールを設定します。
垂直マクロの結果をターゲットに書き込むには、出力フィールドをターゲットトランスフォーメーションのターゲットフィールドにリンクします。
タスクが実行されると、タスクは、マクロ入力フィールドが表すフィールドごとに計算を実行する複数の式を生成します。またタスクは、マクロ出力フィールドを実際の出力フィールドで置き換え、その出力フィールドを使用して、計算結果を残りのマッピングに渡します。
注: マクロ出力フィールドでは、データの受け渡しは行われません。
例 次の垂直のマクロ式は、%Addresses%マクロ入力フィールドが表すフィールドから先頭および末尾のスペースを切り捨てます。
LTRIM(RTRIM(%Addresses%))
実行時に、タスクは、%Address%が表すフィールドからスペースを切り捨てる次の一連の式を生成します。
LTRIM(RTRIM(Street)) LTRIM(RTRIM(City)) LTRIM(RTRIM(State)) LTRIM(RTRIM(ZipCode))
垂直マクロの設定 式トランスフォーメーションの[式] タブまたはアグリゲータトランスフォーメーションの[集計] タブで垂直マクロを設定できます。
1 マクロ入力フィールドを作成して使用する受信フィールドを定義します。
2 マクロ出力フィールドを作成して出力フィールドのデータ型と命名規則を定義します。
3 マクロ出力フィールドで、マクロ式を設定します。マクロ入力フィールドをマクロ式に含めます。
4 ダウンストリームトランスフォーメーションで、マクロの結果をマッピングに含めるフィールドルールを設定します。
垂直マクロのマクロ入力フィールド マクロ入力フィールドは、垂直マクロで使用する受信フィールドを表すために使用します。
マクロ入力フィールドを作成するとき、マクロ入力フィールドの名前を定義し、フィールドルールによって使用する受信フィールドを定義します。実行時には、マクロ入力フィールドが拡張されて選択したフィールドを表します。
マクロ入力フィールドを設定するときは、次のフィールドルールを使用します。
• すべてのフィールド• 名前付きフィールド• テキストまたはパターンごとのフィールド次の画像は、Q1~Q4フィールドを含んでいる[名前付きフィールド]フィールドルールを示しています。
垂直マクロのマクロ出力フィールド マクロ出力フィールドは、タスクが垂直マクロに対して実行時に生成する出力フィールドを表します。また、マクロ出力フィールドで使用する式も定義します。
マクロ出力フィールドを設定するときには、出力フィールドの命名規則を定義するために使用するマクロ入力フィールドを選択します。命名規則のプレフィックスやサフィックスをカスタマイズできます。マクロ出力フィールドでは、デフォルトで<macro_input_field>_outの命名規則が出力フィールドに使用されます。
出力フィールドのデータ型、精度、およびスケールを定義できます。または、受信フィールドのデータ型、精度、およびスケールを使用するようにマクロ出力フィールドを設定できます。受信フィールドのデータ型は、受信フィールドに複数のデータ型があり、式が受信データのデータ型を変更しない場合に使用します。
実行時には、タスクがマクロ出力フィールドの設定に基づいて出力フィールドを生成します。タスクは、マクロ入力フィールドが表す受信フィールドごとに出力フィールドを作成し、次に式の結果を出力フィールドに書き込みます。
例えば次の画像は、%QuarterlyData%が表す受信フィールドに基づいて出力フィールドを作成するマクロ出力フィールドを示しています。
%QuarterlyData%マクロ入力フィールドがQ1~Q4のフィールドを表している場合、実行時にタスクによってQ1_out、Q2_out、Q3_out、Q4_outの出力フィールドが作成されます。出力フィールドは入力フィールドと同じデータ型になります。
[入力フィールドタイプ]のデータ型を選択した後に、精度やスケールを定義することはできません。
垂直マクロの出力フィールドのフィールドルール マッピングで垂直マクロの結果を使用するには、ダウンストリームトランスフォーメーションで出力フィールドを組み込むようにフィールドルールを設定するか、ターゲットフィールドマッピングをパラメータ化します。
式マクロは、実行時まで明確に定義されないフィールドを表すため、ダウンストリームトランスフォーメーションに垂直マクロの出力フィールドを組み込むように設定する必要があります。これを実行するには、2つの方法があります。
• ダウンストリームトランスフォーメーションで名前付きフィールドを作成します。[受信フィールド] タブで、名前付きフィールドルールを作成し、垂直マクロの出力フィールドごとに新しい入力フィールドを作成します。これらのフィールドは、ダウンストリームトランスフォーメーションで使用できます。• または、ターゲットトランスフォーメーションがマクロの直接のダウンストリームである場合は、ターゲットフィールドマッピングを完全にパラメータ化します。マッピングタスクを設定すると、データ統合 はターゲットにマクロ出力フィールドを作成します。受信フィールドをターゲットフィールドにマッピングします。例 %InputDates%という名前のマクロ入力フィールドは、データを日付データ型に変換するマクロの次のソースフィールドを表します。
OrderDate ShipDate PaymentReceived
マクロ出力フィールドは、デフォルトの命名規則である、<マクロ入力フィールド>_outを使用します。マクロが生成する日付フィールドを使用するには、ダウンストリームトランスフォーメーションで名前付きフィールドのルールを作成します。次のフィールドを作成します。
OrderDate_out ShipDate_out PaymentReceived_out
作成したフィールドを含めるようにフィールドルールを設定します。
フィールドルールを作成したら、ダウンストリームトランスフォーメーションの式やフィールドマッピングでそれらのフィールドを使用できます。
垂直マクロの例 各ストアの四半期データの年間合計を求めるには、アグリゲータトランスフォーメーションで垂直の式マクロを使用できます。
アグリゲータトランスフォーメーションでは、グループ化フィールドとしてストアIDフィールドを使用します。%QuarterlyData%マクロ入力フィールドには、次の入力フィールドから売上データが読み込まれます: Q1、Q2、Q3、Q4。
%QuarterlyData%_outマクロ出力フィールドは、%QuarterlyData%マクロ入力フィールドに基づきます。四半期ごとの売上合計を求めるために、マクロ出力フィールドには次の式が含まれています: SUM(%QuarterlyData%) 。
ターゲットトランスフォーメーションでは、フィールドルールの受信フィールドリストに、次の出力フィールドが含まれています: Q1_out、Q2_out、Q3_out、Q4_out。ターゲットフィールドマッピングでは、Qx_outフィールドがターゲットにマップされます。
次の図に、アグリゲータトランスフォーメーションでの垂直の式マクロを示します。
タスクを実行すると、式が次のように垂直方向に展開されます。
SUM(Q1) SUM(Q2) SUM(Q3) SUM(Q4)
タスクは、集計を実行し、結果をターゲットに書き込むときに、ストアごとにデータをグループ化します。
水平マクロ 水平マクロは、複数の入力フィールドや定数を組み込む1つの複雑な式を生成するために使用します。
水平マクロでは、マクロ入力フィールドで複数の入力フィールドや定数を表すことができます。
水平マクロでは、式が、入力フィールドや定数に実行する計算を表します。式には、水平拡張関数を含める必要があります。
水平マクロ式によって1つの結果が生成され、トランスフォーメーション出力フィールドから結果が以降のマッピングに渡されます。水平マクロ式はトランスフォーメーション出力フィールドで設定します。
式の結果は、デフォルトのフィールドルールに従って、ダウンストリームのンスフォーメーションに渡されます。マッピングで、水平マクロの結果を組み込むためにフィールドルールを追加する必要はありません。
水平マクロの結果をターゲットに書き込むには、トランスフォーメーション出力フィールドをターゲットトランスフォーメーションのターゲットフィールドに接続します。
例 例えば、水平マクロでは、%AllFields%マクロ入力フィールドで表されたフィールドのNULL値をチェックできます。フィールドがNULLの場合、1が返されます。さらに、%OPR_SUM%水平拡張関数が、NULLフィールドの合計数を返します。
次の式は、マクロ内での計算を表しています。
%OPR_SUM[ IIF(ISNULL(%AllFields%), 1, 0) ]%
実行時には、%AllFields%が表すフィールドを組み込むために、アプリケーションが次のように式を水平に拡張します。
IIF(ISNULL (AccountID, 1,0)+IIF(ISNULL(AccountName, 1, 0)+IIF(ISNULL(ContactName, 1, 0)+IIF(ISNULL(Phone, 1, 0)+IIF(ISNULL(Email, 1, 0)...
水平拡張関数 水平拡張関数を使用して、式マクロに式を作成します。
水平拡張関数には、%OPR_<function_type>%の命名規則を使用します。水平拡張関数では、丸カッコではなく角かっこ([ ])を使用します。
[フィールド式]ダイアログボックスで、関数のリストの[水平拡張]グループに関数が表示されます。
次の水平拡張関数を使用できます。
%OPR_CONCAT% CONCAT関数を使用して、式マクロ内の式を拡張し、複数のフィールドを連結します。%OPR_CONCAT%は、次の式と同じ計算値を作成します。 FieldA || FieldB || FieldC...
%OPR_CONCATDELIM% CONCAT関数を使用して、式マクロ内の式を拡張し、複数のフィールドを連結してカンマ区切り文字を追加します。%OPR_CONCATDELIM%は、次の式と同じ計算値を作成します。 FieldA || ", " || FieldB || ", " || FieldC...
%OPR_IIF% IIF関数を使用して、式マクロ内の式を拡張し、IIF文のセットを評価します。%OPR_IIF%は、次の式と同じ計算値を作成します。 IIF(<field> >= <constantA>, <constant1>, IIF(<field> >= <constantB>, <constant2>, IIF(<field> >= <constantC>, <constant3>, 'out of range')))
%OPR_SUM% SUM関数を使用して、式マクロ内の式を拡張し、すべてのフィールドの合計を返します。%OPR_SUM%は、次の式と同じ計算値を作成します。 FieldA + FieldB + FieldC...
水平拡張関数の詳細については、『Function Reference』 を参照してください。
水平マクロの設定 式トランスフォーメーションの[式] タブまたはアグリゲータトランスフォーメーションの[集計] タブで、水平マクロを設定できます。
マクロ式で受信フィールドまたは定数のどちらを使用するかに基づいて水平マクロを設定します。
1 1つ以上のマクロ入力フィールドを作成します。
- 受信フィールドを使用するには、マクロ入力フィールドを作成して使用する受信フィールドを定義します。- 定数を使用するには、使用する定数の各セットについてマクロ入力フィールドを作成します。2 トランスフォーメーション出力フィールドを作成します。
3 トランスフォーメーション出力フィールドで、マクロ式を設定します。水平拡張関数を使用してマクロ入力フィールドを含めます。
4 マッピングに水平マクロの結果を含めるには、ダウンストリームトランスフォーメーションでデフォルトのフィールドルールを使用します。トランスフォーメーション出力フィールドを含む任意のフィールドルールを使用できます。
5 水平マクロの結果をターゲットに書き込むには、トランスフォーメーション出力フィールドをターゲットトランスフォーメーションのターゲットフィールドに接続します。
水平マクロの受信フィールド用のマクロ入力フィールド マクロ入力フィールドは、水平マクロで使用する受信フィールドを表すために使用できます。
マクロ入力フィールドを作成するとき、マクロ入力フィールドの名前を定義し、フィールドルールによって使用する受信フィールドを定義します。実行時には、マクロ入力フィールドが拡張されて選択したフィールドを表します。
マクロ入力フィールドを設定するときは、次のフィールドルールを使用します。
• すべてのフィールド• 名前付きフィールド• テキストまたはパターンごとのフィールド次の画像は、Q1~Q4フィールドを含んでいる[名前付きフィールド]フィールドルールを示しています。
水平マクロの定数用のマクロ入力フィールド マクロ入力フィールドは、水平マクロで使用する定数を表すために使用できます。また、複数のマクロ入力フィールドを作成して、対応する定数の複数の集合を表すこともできます。
マクロ入力フィールドを作成するとき、マクロ入力フィールドの名前を定義し、使用する定数を定義します。実行時には、マクロ入力フィールドが拡張されて定数に置き換えられ、それらの定数がリストされた順序で使用されます。
定数の複数の集合に対応する複数のマクロ入力フィールドを作成すると、タスクでは各定数の集合がリストされた順序で評価されます。
次の画像は、定数を表すマクロ入力フィールドを示しています。
実行時には、マクロ入力フィールドが拡張されて、定数が50000、100000、150000の順序で使用されます。
水平マクロのトランスフォーメーション出力フィールドの設定 水平マクロの式を定義したり、結果を残りのマッピングに渡したりするには、トランスフォーメーション出力フィールドを使用します。
トランスフォーメーション出力フィールドを作成するときは、フィールドの名前とデータ型を定義します。さらにマクロの式も設定します。式には、使用する水平拡張関数や任意のマクロ入力フィールドを含めます。
デフォルトのフィールドルールでは、トランスフォーメーション出力フィールドをダウンストリームトランスフォーメーションに渡します。トランスフォーメーション出力フィールドを含むフィールドルールを使用して、水平マクロの結果をマッピングに渡すことができます。
水平マクロの例 給与の範囲に基づいて従業員のカテゴリを作成するには、それぞれの範囲の最小値と最大値、および対応する業務カテゴリを定義する水平マクロを作成します。
式トランスフォーメーションでは、マクロ入力フィールドで式に使用する定数を定義します。%IncomeMin%は、各給与範囲の最低値を定義し、%IncomeMax%は各給与範囲の最大値を定義します。%EmployeeType%は、各範囲に対応する業務カテゴリをリストします。
EmployeeStatusのトランスフォーメーション出力フィールドは、マッピングの結果を渡します。また、次の水平マクロ式が含まれます。
%OPR_IIF[ (EMP_SALARY>=%IncomeMin%) AND (EMP_SALARY<%IncomeMax%), %EmployeeType%, 'unknown' ]%
ターゲットトランスフォーメーションでは、デフォルトのフィールドルールによって、受信フィールドリストにEmployeeStatusトランスフォーメーション出力フィールドが組み込まれます。ターゲットフィールドのマッピングでは、EmployeeStatusがターゲットにマップされます。
次の図は、式トランスフォーメーションでの水平マクロを示しています。
水平マクロ式は、タスクを実行すると次のように拡張します。
IIF(Salary>=5000 AND Salary<50000), 'IndividualContributor', IIF (Salary>=50000 AND Salary<100000), 'Manager', IIF (Salary>=100000 AND Salary<150000), 'SeniorManager', 'unknown')))
この式は、最初のIIF式で各マクロの入力フィールドの最初の値を使用し、それ以降もそれぞれの定数を使用しています。
混合マクロ 混合マクロは、式を垂直および水平に拡張します。混合マクロは、複数の垂直式を生成し、それらはさらに水平にも拡張されます。
混合マクロは、ビジネス要求に基づいて設定してください。垂直および水平マクロの設定ガイドラインに従って、混合マクロを作成します。
例 例えば、次の式は%OPR_IIF%水平拡張関数を使用して、%dateports%マクロ入力フィールドで表す日付フィールドの形式を「mm-dd-yyyy」の形式に変換しています。
%OPR_IIF[IS_DATE(%dateports%,%fromdateformat%),TO_STRING(TO_DATE(%dateports%,%fromdateformat%),'mm-dd-yyyy'),%dateports%]%
%fromdateformat%マクロ入力フィールドは、日付フィールドに使用される異なる日付形式のmm/dd/yyとmm/dd/yyyyを定義します。
実行時には、アプリケーションが次のように式を垂直および水平に拡張します。
IIF(IS_DATE(StartDate,’mm/dd/yy’),TO_STRING(TO_DATE(StartDate,’mm/dd/yy’),’mm-dd-yyyy’), IIF(IS_DATE(StartDate,’mm/dd/yyyy’),TO_STRING(TO_DATE(StartDate,’mm/dd/yyyy’),’mm-dd-yyyy’), StartDate)) IIF(IS_DATE(EndDate,’mm/dd/yy’),TO_STRING(To_Date(EndDate,’mm/dd/yy’),’mm-dd-yyyy’), IIF(IS_DATE(END _DT,’mm/dd/yyyy’),TO_STRING(TO_DATE(EndDate,’mm/dd/yyyy’),’mm-dd-yyyy’), EndDate))
式が垂直に拡張されて、%dateports%が表すStartDateとEndDateの式が作成されています。また、式は%fromdateformat%が表す定数を使用して受信フィールドを評価するために水平に拡張されています。