計算式プラグインでテーブル内項目の値別に番号付与が出来ないかと相談を受けたので、やってみました。
テーブル内の計算で実行速度に問題があったので、計算式プラグインを変更して対応しました。
テーブル行の追加・削除操作例
文字列T1 にドロップダウンT1 の値別に、番号を付加します。
環境
アプリ設定
- テーブル内に、数値項目で行番号、文字列、ドロップダウンを配置します。
- 値別番号付与のための作業用項目として、文字列項目「連結」を追加。
![2020-05-24_22h08_03.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F100572%2F06a3fcc9-d71e-3902-4545-267d4e79cae8.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=1752fbe1b745da1d0dd4e2f9ce52b236)
計算式プラグインの設定
- 「循環参照を許可」をチェックします。
![2020-05-24_22h09_56.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F100572%2F65758204-6925-a7ba-c1c1-808d78ac44bc.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=300a30d1754aa46d7211abdc7efcb91c)
計算式
-
「行番号」:ROWNO(行番号)+1
※ROWNO関数は、指定されたテーブル項目の0から始まる行位置を返します。 -
「連結」: TARRAY(ドロップダウンT1)
※文字列項目に TARRAY関数を指定すると、処理結果の配列をカンマ「,」区切りの文字列に変換します。
テーブルの行毎に行全体の文字列連結を行うと、行数が増えると処理時間が増大するので、一旦全体の文字列を作成しておきます。
※ランク:1
テーブル内の計算より先に処理させるため、1を指定します。 -
「文字列T1」: IF(ドロップダウンT1,
ドロップダウンT1&(
ARRAY_COUNT(SPLIT(JOIN(SLICE(SPLIT(連結,","),0,ROWNO(Table)+1),
",")&",",ドロップダウンT1&","))-1))- SPLIT(連結,","):連結をドロップダウンT1 の配列に変換
- SLICE(SPLIT(連結,","),0,ROWNO(Table)+1):先頭行から処理中のテーブル行までの値を取得
計算式プラグイン Ver.29 変更点の影響
今回の試作では、SLICE 関数とテーブル内項目の計算処理のパフォーマンス改善が必要でした。
Ver.28 以前で実装した場合、50行程度の行数があるとテーブルの追加・変更等で計算処理に10秒程度かかっていました。※計算処理内容は、異なります。
Ver.29 では、同条件で約1秒程度の計算処理に改善されました。
・MATCH 関数追加
・SLICE 引数に計算式を指定可能に変更
・ROWNO にテーブル指定時の不具合対応
テーブル行追加・削除でROWNO計算式が実行されない
・テーブル内項目の計算処理のパフォーマンス改善
循環参照かつ編集不可のテーブル内項目の値変更イベント処理抑止
あとがき
まだまだ、計算式プラグインで実装が困難な課題があります。
今回のような改善で、少しずつでも実現できる範囲を広げていきたいと思います。