Skip to main content
Kazuna
Helper ⭐️
September 12, 2025
Solved

ルールエンジンの実行タイミングによって反映するスコアを変える場合どうしたら良いか?

  • September 12, 2025
  • 3 replies
  • 111 views

ルールエンジンの実行タイミングによって反映するスコアを変える場合、1ルール内で分岐を作ることは可能でしょうか?

複数ルールエンジンを作成する必要があるでしょうか?

 

例えば、

・8月は進捗率が

20%未満:赤

20%以上-60%未満:黄

60%以上:緑

 

・9月は進捗率が

30%未満:赤

30%以上-80%未満:黄

80%以上:緑

 

のようにしたいです。

    Best answer by asanos

    @Kana Kobayashi 
    ご回答頂きありがとうございます!

    私も継続的に実施するのであれば①の方式がいいのかな、と思いました!
    ちなみに、

    > 以前①に似たような条件設定をした際に、うまく判定できなかったこともありました。

    とご記載ただいたのは日付型項目 x Rundateだとうまく日付が指定できない、という感じでしたでしょうか?

    RundateはUTCで動く仕様なのと、またクライテリアでは月だけを指定する、というのが出来なかったります。

    そのため、以下のようにすると①の方式で上手くいくのでは、、、という可能性もあります!(複雑ですが、、、)

    • Rundateで実行日の日付を取得
    • toStringで文字列へ変換
    • substringを利用して、月の部分だけを取得
    • 取得した月の文字列でクライテリアを設定(08→8月, 09→9月)

     

    @Kazuna 

    3 replies

    Kana Kobayashi
    Helper ⭐️
    September 12, 2025

    @Kazuna 

    こんにちは!

    もしかしたら、他にベストな回答があるかもしれないのですが、

    ルールエンジンが1つでも、クライテリアを設定することで、条件に応じた設定は可能ですし、

    場合によっては複雑になってしまうので、複数のルールエンジンで運用の方が良いかもしれないなと思いました。

     

    一例ですが・・・

    1ルール内で実装

    クライテリアフィールドを使い、現在月 = 8月なら閾値を 20/60%、現在月 = 9月なら閾値を 30/80% …と書き分ける。(こういうフィルターがかけられるデータ構造になっていることが重要ですが。。。)

    メリット:ルールが一元化できる。

    デメリット:式が複雑化しやすく、メンテナンス性が落ちる。

     

    月ごとに別ルールを用意

    「進捗率スコア更新ルール(8月用)」「進捗率スコア更新ルール(9月用)」…のように複製し、各月に応じた閾値を設定。

    実行スケジュールを月ごとに指定すれば、対象ルールだけが走る。(例:8月用は8月に実行するためだけのルールエンジン設定)

    メリット:ロジックがシンプルで読みやすい。運用担当者も意図を把握しやすい。

    デメリット:対象月の分ルールが増えるので管理が煩雑になる。

     

    一時的にそうするだけであれば、②の方が良いかもしれません。以前①に似たような条件設定をした際に、

    うまく判定できなかったこともありました。

    実行してみて、正しく判定されているかは、データのエクスポートをして、十分ご確認いただいた方が良いかもです。

     

    あくまでご参考レベルの情報ではありますが、私だったら・・・みたいな観点で回答させていただきました。

    もし、ご参考になれば幸いです。

    asanos
    asanosAnswer
    Helper ⭐️⭐️⭐️
    September 16, 2025

    @Kana Kobayashi 
    ご回答頂きありがとうございます!

    私も継続的に実施するのであれば①の方式がいいのかな、と思いました!
    ちなみに、

    > 以前①に似たような条件設定をした際に、うまく判定できなかったこともありました。

    とご記載ただいたのは日付型項目 x Rundateだとうまく日付が指定できない、という感じでしたでしょうか?

    RundateはUTCで動く仕様なのと、またクライテリアでは月だけを指定する、というのが出来なかったります。

    そのため、以下のようにすると①の方式で上手くいくのでは、、、という可能性もあります!(複雑ですが、、、)

    • Rundateで実行日の日付を取得
    • toStringで文字列へ変換
    • substringを利用して、月の部分だけを取得
    • 取得した月の文字列でクライテリアを設定(08→8月, 09→9月)

     

    @Kazuna 

    Kazuna
    KazunaAuthor
    Helper ⭐️
    September 18, 2025

    @Kana Kobayashi 

    @asanos 

    お2人とも回答ありがとうございます!

    別ルールを用意するしかないか・・・?と思っていたのですが、1ルール内でRundateとクライテリアフィールドを使えば叶えられるとのこと、新たな学びを得られて感動です!

    こちらで実装してみたいと思います!

    (functionの使い方がまだまだだなと思いました…精進します!)