Anaplan Data Orchestrator のデータ変換に対する Planual のルール。
8.02-01 データ変換を通過するデータの量をできるだけ早く減らす
一連の変換を通じて処理されるデータの量をできるだけ早く減らすことで、処理の負担が軽減されます。フィルターと集計を使用して、必要なデータの列のみを転送します。
relatedToRule
8.02-02 HASH 関数を使用する
HASH 関数は、パラメーター値に基づいて、長さが 56 文字の決定論的な一意のキーを返します。
対象ドメインの予想される入力サイズに基づいてコリジョンの可能性がわずかであれば、これを 56 文字から n 文字に安全に短縮できます (たとえば、左側の n 文字を取得するなど)。結果を短縮すると、より読みやすい一意のコードが提供されます。
コリジョンの可能性が 0.0001% 未満の場合は、次を使用します。
- 最大 1,000 アイテムのドメインの場合は 10 文字
- 最大 100 万アイテムのドメインの場合は 15 文字
- 最大 10 億アイテムのドメインの場合は 20 文字
8.02-03 TO_DATE 関数を使用して文字列を日付に変換する
これにより、日付の形式を定義できるようになります。一方、一般的な CAST 関数では、日付は米国の日付形式 (mm/dd/yyyy) であると想定されます。
8.02-04 二つのデータセットを結合する場合は少なくとも一つの一致する列が必要
これにより、ユーザーが誤って二つの大きなデータセット間のデカルト積を作成することが防止されます。これを実行する必要がある場合 (たとえば変換で使用するパラメーター値を結合する場合)、同じ定数値を持つ計算列を両方のデータセットに追加します。
8.02-05 フィルターの順序に注意する
たとえば、列計算が適用された後、変換の結果に詳細フィルターが適用されます。そのため、元の値でフィルターリングする必要がある場合は、一つの変換ビューで計算を適用し、それに基づいて詳細フィルターを含む後続の変換ビューを作成します。
8.02-06 二つのデータセットを結合する際に等しい値のみを結合する
二つのデータセットを結合する場合、式の結果で結合したり、式でフィルタリングしたりすることはできないため、等しい値でしか結合できません。
例:
TransactionsDataSet.Productcode = ProductMaster.ProductCode AND TransactionsDataSet.TransactionDate >= ProductMaster.StartDate
これを実現するには、関連するすべての組み合わせのデータセットを結合し、関連する行にフィルターを適用します。
TransactionsDataSet.Productcode = ProductMaster.ProductCode
比較のための列を計算します。
InRelevantDateRange = TransactionsDataSet.TransactionDate >= ProductMaster.StartDate
InRelevantDateRange = TRUE のフィルターを追加します。
列の値を計算して、後からトランザクション ビューでの結合で参照することは可能ですが、これは可能な限り避けるべきです。そのような処理は結合の効率を低下させ、さらに下流の結合の効率も低下させるためです。
たとえば、データセット T1 に列 A と B があり、これらをデータセット T2 の一致する列で結合する場合、a と b の連結を計算してその単一の結合列で結合するのではなく、a と b で結合するように定義します。
8.02-07 文字列値を適切な型に変換する
次の関数を使用して、文字列値を適切な型に変換します。
- TO_NUMBER
- TO_DATE
- TO_TIMESTAMP
TO_CHAR 関数を使用して、NUMERIC (浮動小数点数 / 整数)、DATE、TIMESTAMP 型の列を指定された形式の文字列に変換します。
型を変換するには、CAST を使用します。

関数 IS_FLOAT、IS_INTEGER、IS_BOOLEAN を使用して、文字列値が必要なデータ型への CAST に適しているかどうかを確認できます。
注記:IS_FLOAT と IS_INTEGER では、千の位の区切り文字がある数値を表す文字列が数値として扱われません。問題に対処するには、次のような式を使用します。
IF
IS_FLOAT ( SUBSTITUTE ( 'CC Test'.'New column1' , "," , "" ) )
THEN
CAST(SUBSTITUTE ( 'CC Test'.'New column1' , "," , "" ),"FLOAT")
ELSE
0
8.02-08 NULL 値が計算結果に与える影響に注意してください。
ADO によって実行されるベースとなる計算は SQL に基づいています。式内の値が NULL の場合、結果も NULL になります。これは想定される SQL の動作です。
ADO には、null でない最初の式の値を返す Null Value Logic (NVL) 関数が含まれています。
NVL(expr1 [,expr2, …])
一連の式の中で null ではない最初の式の値を返します。
次の例では、「Price」 がNULL の場合、収益も NULL になります。
'SalesTrans'.'UnitsSold' * 'SalesTrans'.'Price'
NVL を使用することで、NULL 価格を標準価格に置き換え、その標準価格も NULL の場合は 0 に置き換えることで、常に数値の結果が得られるようにすることができます。
'SalesTrans'.'UnitsSold' * NVL('SalesTrans'.'Price', 'SalesTrans'.'StandardPrice', 0)
NULL に関する同様の動作は、文字列値、集計、ADO におけるあらゆる計算にも適用されるため、ADO で変換を構築する際には、潜在的な NULL 値を考慮することが重要です。
8.02-09 計算対象列における整数と浮動小数の結果の管理
新しい数値列を計算する場合、その列は式内の最初の式のデータ型 (整数または浮動小数) を継承します。
次の例では、IntegerValue が整数である場合、小数点を含む結果が期待される場合でも、結果は整数になります。
'Source'.'IntegerValue'/ 9
強制的に結果を浮動小数にするには、以下のように修正します。
CAST('Source'.'IntegerValue', "float") / 9
8.02-10 防御的なコーディング
CAST 関数または TO_NUMBER 関数を使用する前に、IS_INTEGER 関数と IS_FLOAT 関数を使用して、文字列型の列の値が整数値と浮動小数のどちらを表しているのかを確認します。
関数や数式から予期しない結果が生じるのを避けるため、NULL 値をテストするか、NVL を使用します。
ゼロ除算エラーを回避するために、除数が 0 でないことを確認します。