Sorry for the late reply here too, and thanks for your e-mail! You’ve probably already figured out that you can change the :var in the second babel block to point to a different table (ex: :var source=another_table) named with #+NAME: . The tags you’ve defined with #+TAGS: are file-level, but it’s possible to change the function so that it can take an optional argument with a tag hierarchy, so you can make your own structure.
- 0 Posts
- 3 Comments
Joined 4 years ago
Cake day: November 28th, 2021
You are not logged in. If you use a Fediverse account that is able to follow users, you can follow this user.
Edit 2026-01-07: added the missing ) and fixed the formatting
Here’s how I would approach it:
#+STARTUP: noptag #+TAGS: #+TAGS: [ GT1 : tagA tagC tagD ] #+TAGS: [ GT2 : tagB tagE ] #+TAGS: [ GT3 : tagB tagC tagD ] #+NAME: source | tag | Q1 | Q2 | |------+----+----| | tagA | 9 | | | tagB | 4 | 2 | | tagC | 1 | 4 | | tagD | | 5 | | tagE | | 6 | #+begin_src emacs-lisp (defun my-sum-tag-groups (source) (cons (car source) (mapcar (lambda (tag-group) (let ((tags (org--tags-expand-group (list (car tag-group)) org-tag-groups-alist nil))) (cons (car tag-group) (seq-map-indexed (lambda (colname i) (apply '+ (mapcar (lambda (tag) (let ((val (or (elt (assoc-default tag source) i) "0"))) (if (stringp val) (string-to-number val) (or val 0)))) tags))) (cdr (car source)))))) org-tag-groups-alist))) #+end_src #+begin_src emacs-lisp :var source=source :colnames no :results table (my-sum-tag-groups source) #+end_src #+RESULTS: :results: | tag | Q1 | Q2 | | GT1 | 10 | 9 | | GT2 | 4 | 8 | | GT3 | 5 | 11 | :end:


Hah, sorry about that, reformatted!