If関数を使用してデータを比較する

2つの値を比較し、その比較結果によってマッピングする値を変えたいことってありますよね。例えば、フィールドの値が10以上なら"1"を10未満なら"2"をマッピングしたい場合とか。この記事では、If関数を使って2つの値を比較する方法を説明します。

入力の値と固定値を比較する

例えば、入力された売上注文レコードの「合計」の値が"500"以上かどうかを判定するには、次のように「合計」フィールドをIf関数の入力に接続します。

if_mapping.png

If関数の「データ」プロパティに"500"を入力し、「条件式」プロパティで">="を選択します。

if_500property.png

このように設定すると、If関数は入力の値が500以上だった場合にtrueとなり、500未満だった場合にfalseとなります。

次に、If関数の出力する値を設定します。If関数は、比較結果がtrueまたはfalseになった場合に応じて、「trueの場合の出力」または「falseの場合の出力」プロパティに指定されている値を出力します。今回は初期値である"1"と"2"をそのまま使用します。

それでは、次のようなレコードをMapperコンポーネントに接続してフローを実行してみましょう。

注文番号 合計
NO10003 5500

フローを実行すると、If関数が評価する条件式は「5500(合計)>= 500」となり、この結果はtrueとなるので「trueの場合の出力」プロパティに設定されている"1"が出力されます。

2つの入力値を比較する

先ほどは入力の値と固定値の比較でしたが、2つの入力の値を比較することもできます。例えば、「送料無料価格」という名前のフロー変数の値と、入力された売上注文レコードの「合計」の値を比較して、「合計 >= 送料無料価格」の場合はその注文が送料無料になるというような場合です。

まず、「送料無料価格」というフロー変数を作成し初期値として"5000"を入力します。5000円以上購入したら送料無料ってことですね。後は 次のように「合計」と「送料無料価格」をIf関数の入力に接続します。

if_2value.png

このとき、入力の順序が重要です。If関数をクリックすると、入力のリンク線に入力順の番号が表示されますので、下図のようになっているか確認してください。

if_2value_order.png

もしも入力順序を間違えた場合は、If関数を右クリックして表示されるメニューから「入力順序の並べ替え」を選択します。

if_order_change_menu.png

すると入力順序の並べ替えダイアログが表示されますので、一覧から順序を変更したいものを選択し、ダイアログの右側にある「△」と「▽」アイコンをクリックして順序を変更することができます。

if_order_change_dialog.png

また、インスペクターの「リンク」プロパティにも入力順序が表示されます。「リンク」の「入力1」には1番目の入力である「合計」が設定されています。「入力2」には2番目の入力である「送料無料価格」が設定されています。この「リンク」プロパティは各「入力」の値がドロップダウンリストで選択できるようになっていますので、ここで各「入力」の値を変更することで入力順序を変更することができます。

if_order_change_link_property.png

If関数の場合、2つ目の入力が接続されていると、「データ」プロパティの代わりに「入力2」の値が使用されます。「データ」プロパティにも「入力2」と同じ内容が設定されていることが分かりますね。

if_link_property.png

「条件式」プロパティに">="を選択した場合、最終的な条件式は「入力1 >= 入力2」となります。今回の設定の場合は「合計 >= 送料無料価格」となり、元々比較したかった式になりました。

次に、If関数の出力する値も少し工夫して送料を出力するようにしてみましょう。とりあえず送料は全国一律550円とします。先ほどの条件式がtrueとなった場合は送料無料ということなので、「trueの場合の出力」プロパティに"0"を設定します。条件式がfalseとなった場合は送料が必要なので、「falseの場合の出力」プロパティに"550"を設定します。

if_outputproperty.png

それでは、上で使用した次のレコードをMapperコンポーネントに接続してフローを実行してみましょう。

注文番号 合計
NO10003 5500

フローを実行すると、If関数が評価する条件式は「5500(合計)>= 5000(送料無料価格)」となり、この結果はtrueとなるので「trueの場合の出力」プロパティに設定されている"0"が出力されます。もしも、合計フィールドの値が"3000"の場合は、条件式がfalseとなるので「falseの場合の出力」プロパティに設定されている"550"が出力されます。

今回はフロー変数の値とレコードのフィールドの値を比較しましたが、もしかしたら、レコードの2つのフィールドの値を比較するということもあるかもしれませんね。そのような場合でも、今回のフロー変数の代わりにレコードの別のフィールドを2番目につなぐことで簡単に実現できます。

出力値を動的に設定する

今まで試してきたフローの場合、「trueの場合の出力」または「falseの場合の出力」プロパティに事前に設定した固定の値が出力されますが、レコードごとに出力値が変更されるような設定も可能です。

どのように設定するかというと、If関数の3番目と4番目の入力に値をつなぐだけです。3番目の入力は「trueの場合の出力」プロパティの値を置き換えます。4番目の入力は「falseの場合の出力」プロパティの値を置き換えます。

もしかしたら「trueの場合の出力」は固定値で、「falseの場合の出力」の値だけを置き換えたいということもあるかもしれませんね。でも、If関数に3番目の入力をつながないで、4番目の入力をつなぐことってできないですよね。この場合はどのようにすれば良いのでしょう? 先ほど説明した「リンク」プロパティの値を変更するという方法を使うことができます。「リンク」プロパティの「入力4」の値を3番目の入力に変更すると「入力3」が自動的に空欄になります。

if_4th_only_link_property.png

If関数をクリックした時に表示される入力のリンク線の番号も"3"がなくなって"1", "2", "4"になっているんです。

このようにすれば条件式を評価するごとに、その時につながれている「入力3」や「入力4」の値が出力されます。例えば、発送先の住所によって送料が変わるというような場合もよくありますよね。この場合は、「入力3」は送料無料なので"0"とします。そして、「入力4」に住所などから計算した送料をつないでおきます。そうすれば、レコードごとに"0"または住所に応じた送料が出力されます。

住所に応じた送料を出力するためには?

レコードに「発送先の都道府県」のようなフィールドがある場合、そのフィールドをTable関数またはTableDB関数につなぎます。Table関数/TableDB関数は入力された都道府県に対応する送料が出力されるようにしておきます。後はそれをIf関数の「入力4」につなぎます。

以上でIf関数の説明は終わりです。これで2つのデータを比較して、その結果に応じた値を出力することが出来るようになりましたね。

ヒント

入力のデータ型がBoolean型で、その値がtrueまたはfalseに応じて値を出力したい場合は、「条件式」プロパティで"="を選択し、「データ」プロパティには"true"を設定する必要があります。ただし、この方法はIf関数が何を比較しているのかが簡単に理解できません。このような場合にはBoolIf関数を使用すると簡単で分かりやすくなります。

If関数の出力結果を使って、Mapperコンポーネントの後続のコンポーネントで処理を分岐するには、BranchStartコンポーネントやChoiceコンポーネントを使用することができます。

この記事は役に立ちましたか?
0人中0人がこの記事が役に立ったと言っています

他のキーワードで検索する