Суммируйте стоимость по группам в организационной таблице. - PullRequest
1 голос
/ 22 сентября 2019

Предположим, что такая таблица в организационной таблице

|------------+-------+------------+--------+--------+------------|
| Date       | Items | Unit Price | Amount | Amount | Categories |
|------------+-------+------------+--------+--------+------------|
| 2019/09/17 | A     |       2.64 |      1 |   2.64 | materials  |
|            | B     |      52.67 |      2 | 105.34 | diagnosis  |
|            | C     |       3.08 |      1 |   3.08 | materials  |
|            | D     |       3.85 |      2 |    7.7 | materials  |
|            | E     |      33.66 |      2 |  67.32 | materials  |
|            | F     |         40 |      1 |     40 | treatments |
|            | G     |       16.5 |      1 |   16.5 | materials  |
|            | H     |          4 |      3 |     12 | treatments |
|            | I     |         40 |      1 |     40 | bed        |
| x          | M     |       6    |     13 |     78 | treatments |
|------------+-------+------------+--------+--------+------------|
#+TBLFM: $5=$3*$4

Я хочу суммировать материальные сборы.

Можно ли рассчитать ее, сгруппировав как vsum(where Categories == materials)?

1 Ответ

1 голос
/ 24 сентября 2019

Один из способов сделать это с помощью выражения elisp:

|------------+-------+------------+--------+--------+------------|
| Date       | Items | Unit Price | Amount | Amount | Categories |
|------------+-------+------------+--------+--------+------------|
| 2019/09/17 | A     |       2.64 |      1 |   2.64 | materials  |
|            | B     |      52.67 |      2 | 105.34 | diagnosis  |
|            | C     |       3.08 |      1 |   3.08 | materials  |
|            | D     |       3.85 |      2 |    7.7 | materials  |
|            | E     |      33.66 |      2 |  67.32 | materials  |
|            | F     |         40 |      1 |     40 | treatments |
|            | G     |       16.5 |      1 |   16.5 | materials  |
|            | H     |          4 |      3 |     12 | treatments |
|            | I     |         40 |      1 |     40 | bed        |
| x          | M     |          6 |     13 |     78 | treatments |
|------------+-------+------------+--------+--------+------------|
| TOTAL:     |       |            |        |  97.24 |            |
|------------+-------+------------+--------+--------+------------|
#+TBLFM: $5=$3*$4
#+TBLFM: @12$5='(apply #'+ (cl-mapcar (lambda (num category) (if (eq category 'materials) num 0)) '(@II$5..@III$5) '(@II$6..@III$6)));L

cl-mapcar применяет + к ячейке @ 12 $ 5, сравнивая список из столбца 6 с символом 'materials.

Это решение и решение calc в emacsSE

...