以下のように複数のブーリアン(True/False)フィールドで管理している情報があったとします。

今これを、以下のように一つのフィールドに変換したいです。

皆さんならどのように変換しますか。
一度きりの変換で、今後は新しいフィールドしか使わない「移行」であれば、
レポートでエクスポートして、エクセルでフィルタなど駆使して新しい項目を埋め、
CSVでS3経由でアップデートする、というのも一つの手かと思います。
10-20個程度のレコードであれば、編集可能なレポートを作り、そこで入力するのもありですね。
ある程度の件数があり、元のフィールドは残しつつ、定期的に新しいフィールドも更新したい、という場合は
ルールエンジンの活用がおすすめです。
ルールエンジンでも、いくつかやり方が考えられますが、Case関数を使うのが簡単ですので
この記事ではCase関数を使った方法を解説します。
- フィールドの用意
フィールドがない場合はカスタムフィールドを新しく作成します。
- ルールエンジンの設定
ルールエンジンで対象のオブジェクトを開き、上記の複数のフィールドを含めておきます。
Transformにて、Case Fieldを追加します。
Caseの編集画面では、新しいフィールドに結果として出力したい値ごとにCaseおよびCase Filterを登録します。
例えばChampionであれば、Case FilterとしてはChampionフィールドがTrueであるという条件になります。
このCaseを新しいフィールドの値の数だけ作り、ルールエンジンのLoadアクションでフィールドにロードすれば完成です。
- Caseの順番
ここで、Caseフィールドの中に作成するCase(枝)の順番が大事になります。
Caseフィールドはルールエンジンの実行時に以下のように処理されます。
・最初にCase1のロジックを評価する
・条件が合致した場合は定義された値を返し、Case 2以降のロジックは評価しない。
・Case1の条件が合致しない場合、Case2、Case3へ、と順番に評価する。
・同様に合致した場合はそれ以降のロジックは評価しない。
・どれも合致しない場合は、デフォルトで設定した値を返す。

つまり、Caseを作る順番が結果に影響する場合があります。
例えば、前述の例だと、ChampionおよびAdminのどちらもTrueになっている場合、
Caseの上の順番で設定されているもののみが値として入ります。
Caseの順番もよく考慮の上設定しましょう。