rex0220 計算式プラグイン テーブル集計

計算式プラグインで、テーブルを集計し別テーブルに反映できるようになりました。
区分毎や担当者毎に数値を集計することが計算式の指定だけで対応できます。
※計算式プラグイン Ver.48以降でサポート

# 概要

テーブルの計算式に、TLTABLE：テーブル集計関数を指定することで、集計結果を別テーブルに反映できます。

※参考 [rex0220 計算式プラグイン 複数テーブルの集計](https://qiita.com/rex0220/items/4d81de6652be1e7c6769)

例１　ドロップダウンごとに集計
![2022-01-05_10h10_46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/cc2f77c3-1e61-0405-0d0c-bb00f63079ab.png)

テーブル２の計算式：
TLTABLE(テーブル,
　TPFILTER(数値>0),
　TPKEY(ドロップダウン),
　TPVAL(数値),
　TPOUT(ドロップダウンT2,数値T2))

- TLTABLE(テーブル：　集計元テーブル
- TPFILTER(数値>0)：　数値が 1以上を集計
- TPKEY(ドロップダウン),：　集計キー
- TPVAL(数値),：　集計項目
- TPOUT(ドロップダウンT2,数値T2))：　出力先項目

※TPSORT を指定しない場合は、TPKEY の集計ーで昇順にソート

例２　ドロップダウンごとに集計し、数値の降順でソート
![2022-01-05_10h14_15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/c8e18f4d-fa30-d8f2-b27f-74ca1c574fdd.png)

テーブル２の計算式：
TLTABLE(テーブル,
　TPFILTER(数値>0),
　TPKEY(ドロップダウン),
　TPVAL(数値),
　TPOUT(ドロップダウンT2,数値T2),
　TPSORT(数値T2,0)
)

- TPSORT(数値T2,0) ：　数値T2 で降順(1:昇順,0:降順)にソート

![2022-01-05_10h20_24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/674a86c3-e48b-e877-cf0d-04e5d1a3a290.png)

# テーブルの計算式

テーブルに、TLTABLE 関数を指定することで、集計します。

- TLTABLE：　テーブルの集計関数
    - TLTABLE(テーブル,<br>
TPKEY(日付,ドロップダウン),　：キー項目<br>
TPVAL(数値),　：集計項目[,"sum","max","min","join","uniq"]<br>
TPOUT(日付T2,ドロップダウンT2,数値),　：出力先項目<br>
[TPOPT("MAXROWS",10)...])
    - TPKEY：　集計キーとなる項目：　TPKEY(日付,ドロップダウン,文字列)
    - TPVAL：　集計項目（計算式可）と集計方法（規定値："sum"）
        - 集計方法：　"sum","max","min","join","uniq"
        - TPVAL(数値,数値,"max")
        - TPVAL(チェックボックス,"uniq",SEL_CODE(ユーザー選択,"array"),"uniq")
    - TPOUT：　出力先項目
        - キー項目と集計項目の数の合計と同じ出力先項目数を指定
        - TPKEY(日付),TPVAL(数値),TPOUT(日付1,数値1)
    - [TPOPT] 関数で、オプションを指定
        - MAXROWS: 規定値　""　：最大行数
    - [TPFILTER(条件)]：　出力するテーブル行の条件を指定　
        - TPFILTER(数量>0)
    - [TPSORT(項目[,フラグ]...)]：　出力するテーブル行のソートを指定
        - フラグ：　1:　昇順、0: 降順
            - TPSORT(項目1,0,項目2)
    - [TPLABEL("ラベル"[,"ラベル"...])：　出力する項目名を変更
        - TPLABEL("区分","金額")
    - 例 TLTABLE(テーブル,TPKEY(文字列),TPVAL(数値),TPOUT(文字列2,数値2)
    - 例 TLTABLE(テーブル,TPFILTER(数値>0),TPKEY(文字列),TPVAL(数値),TPOUT(文字列2,数値2)
        - 数値>0 の行のみ集計
    - 例 TLTABLE(テーブル,TPKEY(文字列),TPVAL(数値),TPOUT(文字列2,数値2),
TPSORT(数値2,0)
        - 数値2 の降順で出力
    - 例 TLTABLE(テーブル,TPKEY(文字列),<br>
TPVAL(チェックボックス,"uniq",SEL_CODE(ユーザー選択,"array"),"uniq"),<br>
TPOUT(チェックボックス2,ユーザー選択2))
        - チェックボックス、ユーザー選択の値を重複なしで集約


# ユーザー選択、チェックボックスの集計

ユーザー選択、チェックボックスなども集計できます。
日付ごとに、ユーザー選択、チェックボックスを集計します。
![2022-01-05_10h42_32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/d498e444-080b-98a9-5d88-9e9d98ef6576.png)

テーブル２の計算式：
TLTABLE(テーブル,
　TPKEY(日付),
　TPVAL(SEL_CODE(ユーザー選択,"array"),"uniq",
　　ARRAY(チェックボックス),"uniq",
　　ARRAY(チェックボックス),"uniq",
　　数値),
　TPOUT(日付T2,ユーザー選択T2,チェックボックスT2,文字列2A,数値T2),
)

- TPVAL(SEL_CODE(ユーザー選択,"array"),"uniq", ：　ユーザー選択を配列で取り出す<br>
ARRAY(チェックボックス),"uniq",　：　チェックボックスを配列で取り出す<br>
ARRAY(チェックボックス),"uniq",　：　チェックボックスを配列で取り出す<br>
数値),　：　数値を集計
- TPOUT(日付T2,ユーザー選択T2,チェックボックスT2,文字列2A,数値T2),　：集計先項目を指定
    - キー項目と集計項目分の集計先項目をしてします。
    - 日付 -> 日付T2
    - SEL_CODE(ユーザー選択,"array"),"uniq"　-> ユーザー選択T2
    - ARRAY(チェックボックス),"uniq" -> チェックボックスT2
    - ARRAY(チェックボックス),"uniq" -> 文字列2A
    - 数値 [,"sum"] -> 数値T2

※ uniq で、集計すると値が重複しないように、集計します。

![2022-01-05_10h47_19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/e0e0c275-95f1-6f26-ef79-cff2dba2ec34.png)

# ドロップダウン項目、日付の集計

教科ごとに、日付を文字列に集計します。

![2023-06-20_14h55_15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/64319267-30e3-1b33-3de2-e15404757f79.png)

- 計算式
![2023-06-20_14h56_59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/6ef64bae-590c-48b2-5fe6-fa751ae9b746.png)

```.js
// 集計テーブル
TLTABLE(テーブル,
  TPKEY(教科),
  TPVAL(DATE_FORMAT(日付),"uniq"),
  TPOUT(教科T,日付T),
)
```

# 複数ドロップダウン項目、日付の集計

テーブルの複数項目について、日付の集計を行います。

![2023-06-20_19h36_29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/30809598-8f24-3174-2987-1dbcf05f163e.png)

![2023-06-20_20h05_24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/8756cef0-a3b9-50e9-8482-c1f8c9ad13a0.png)

```.js
// 集計テーブル
ARRAY_COUNT(TDS(科目1,科目2,科目3))
// 科目T
LET(w1,ARRAY_SORT(TDS(科目1,科目2,科目3)),
  ARRAY_GET(w1,ROWNO(集計テーブル))
)
// 日付T
LET(w1,科目T,
  w2,TDSIF(IN(w1,科目1,科目2,科目3),DATE_FORMAT(日付)),
  ARRAY_SORT(w2)
)
```

# 複数ドロップダウン項目、日付の集計（ドロップダウン項目を日付順にソート）

![2023-06-23_15h47_42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/e0e99db7-1cd4-dcf2-462a-24faf48430d2.png)

- 作業用項目「日付項目」の内容例
![2023-06-23_15h51_03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/4276a563-bab3-0ce8-cea9-5405c5d21d08.png)


- 作業用項目「日付項目」を追加
ドロップダウン項目を日付順にソートするため、ソート用に「日付項目」を追加します。

![2023-06-23_15h46_12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/192e3d3b-b60e-89c3-4842-0d472f6e68fe.png)

![2023-06-23_15h45_51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/d265b377-b7c9-54f3-c0c7-e9e2efbedf0f.png)


```.js
// 集計テーブル
ARRAY_COUNT(TDS(科目1,科目2,科目3))
// 科目T
LET(w1,ARRAY_GET(SPLIT(日付科目,","),ROWNO(集計テーブル)),
  ARRAY_GET(SPLIT(w1,"_"),1)
)
// 日付T
LET(w1,科目T,
  w2,TDSIF(IN(w1,科目1,科目2,科目3),DATE_FORMAT(日付)),
  ARRAY_SORT(w2)
)
// 日付科目
LET(w1,ARRAY_SORT(TDS(科目1,科目2,科目3)),
  w2,ARRAY_MAP(w1,xx,
    DATE_FORMAT(MINIF(IN(xx,科目1,科目2,科目3),
       日付))&"_"&xx),
  ARRAY_SORT(w2)
)
```

# 複数ドロップダウン項目、数値の集計

テーブルの複数項目について、数値の集計を行います。

![2023-07-14_13h23_07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/72b277ea-d53b-c419-d10b-3f31ad3a7d1e.png)

集計テーブルは、4 の固定行数として、科目別に時間数を集計します。

![2023-07-14_13h24_22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/6450ef0e-0d12-5424-7f52-34c227714613.png)

```.js
// 集計テーブル SUBTABLE
4

// 集計テーブル.科目T DROP_DOWN
ARRAY_GET(
  ARRAY("算数","国語","理科","社会"),
  ROWNO(集計テーブル)
)

// 集計テーブル.時間T NUMBER
LET(a,科目T,
  SUM(IF(科目1=a,時間1),IF(科目2=a,時間2),IF(科目3=a,時間3))
)

```