Chartブロックでとある参照先がさらに参照しているフィールドをディメンションにできないときの回避方法(Nocobase)

2024.05.14

※ Nocobaseのバージョンに 1.0.0-alpha.6 を使用したときのものです

困っていたこと

NocoBaseでchartブロックをつかって登録データの集計ダッシュボードを作っていたのですが、ディメンションで参照できないフィールドがありました。

コレクションの関連は以下のようになっています。

ライセンス割り当てコレクションライセンスコレクション が 多対1 で関連付けされていて、

ライセンスコレクションライセンスカテゴリーコレクション が 多対1 で関連付けされている 状態です。

ライセンス割り当てコレクションを対象にして集計用のchartブロックを作成していたのですが、関連づいているライセンスのカテゴリーで集計しようと思ったら、カテゴリーが選択できますぇんでした。

上記のように、ライセンスのカテゴリーが表示されません。

ちなみに、テーブルブロックだと参照できていました。

どう対応すればいいの?

集計対象のライセンス割り当てコレクションにカテゴリー名を持ってくることで集計可能な状態にしてみました。

このようにライセンス割り当てコレクション集計用カテゴリーというフィールドを追加します。

そして、このフィールドに値を持ってきて保存するにはワークフローを使いました。

ワークフロー

トリガー

ライセンス割り当てコレクションに追加、更新が行われた時をトリガーにします。

このとき、後続のノードでアクセスする必要がある関連フィールドにライセンスとカテゴリーを選択します。

そうすることで以下のようなjsonデータが後続ノードに渡ります。

{
  "data": {
    "id": 6,
    "createdById": 1,
    "rel_license": {
      "id": 5,
      "name": "チーム(フル)",
      "price": 1200,
      "parentId": 3,
      "createdAt": "2024-05-14T05:10:39.042Z",
      "full_name": "Figma / チーム(フル)",
      "updatedAt": "2024-05-14T05:45:08.670Z",
      "is_enabled": true,
      "createdById": 1,
      "updatedById": 1,
      "rel_license_category": {
        "id": 2,
        "name": "Figma",
        "createdAt": "2024-05-14T05:44:32.136Z",
        "updatedAt": "2024-05-14T05:44:32.136Z",
        "createdById": 1,
        "updatedById": 1
      },
      "f_license_category_id": 2
    },
    "updatedById": 1
    ~~~~~ 省略 ~~~~~
  }
}
  • rel_license: 関連づけられたライセンスのデータ
  • rel_license_category: ライセンスに関連づけられたカテゴリーのデータ

レコード更新

レコード更新ノードを追加し、ライセンス割り当てコレクションに追加した集計用カテゴリートリガーフィールド / Trigger data / ライセンス / カテゴリー / 名前 を セットすることでデータが更新できます。

chartブロックで集計できるか確認

トリガーによってワークフローが起動し、データが更新されたあと、対応前にできなかった集計をやってみました。

このように集計用カテゴリーにデータが入っている状態です。

chartブロックの編集画面にいって、

ディメンションに集計用カテゴリーをセットします。

Run Query ボタンをクリックするとグラフ等のプレビューが表示できます。

無事にカテゴリーにセットした値で集計ができるようになりました。


今後のバージョンアップにより今回の対応をしなくても良くなる可能性もありますが、ひとまず回避策の一つとして使えそうです