user4035
user4035

Reputation: 23719

Emacs org-mode totals table

I have an org file, describing a project:

* task1
** task1-1
     :PROPERTIES:
     :price: 10
     :given: <2012-11-08 Thu>
     :END:
** task1-2
     :PROPERTIES:
     :price: 11
     :given: <2012-11-08 Thu>
     :END:


* task2
** task2-1
     :PROPERTIES:
     :price: 20
     :given: <2012-11-08 Thu>
     :END:
** task2-2
     :PROPERTIES:
     :price: 21
     :given: <2012-11-08 Thu>
     :END:

I used org-collector to produce a totals table:

#+BEGIN: propview :id global :conds ((not (= price 0))) :cols (ITEM price)
| ITEM      | price |
|-----------+-------|
| "task1-1" |    10 |
| "task1-2" |    11 |
| "task2-1" |    20 |
| "task2-2" |    21 |
|-----------+-------|
|           |    62 |
#+TBLFM: @6$2=vsum(@2$2..@5$2)
#+END:

But I want to have something like this:

| ITEM      | price |
|-----------+-------|
| "task1-1" |    10 |
| "task1-2" |    11 |
| "task2-1" |    20 |
| "task2-2" |    21 |
|-----------+-------|
| Total     |    62 |    

How to do it?

Upvotes: 4

Views: 1396

Answers (2)

user11709441
user11709441

Reputation: 1

I just figured this one out this morning. The answer you're looking for with Org-Collector is straightforward. Just put the table formulae two blank lines beneath the beginning of the property view and it'll be calculated automatically when the property view is evaluated (with C-c C-c).

#+BEGIN: propview :scope tree :cols (ITEM CLOCKSUM EFFORT) :match "TODO=\"TODO\"" :noquote ALL


#+TBLFM: @>$1=Totals::@>$2=vsum(@I..@II);t::@>$3=vsum(@I..@II);t
#+END:

If you want to turn this into a generic yasnippet, you need to escape the $ and the \:

#+BEGIN: propview :scope tree :cols (ITEM CLOCKSUM EFFORT) :match "TODO=\\"TODO\\"" :noquote ALL


#+TBLFM: @>\$1=Totals::@>\$2=vsum(@I..@II);t::@>\$3=vsum(@I..@II);t
#+END:

Now, you can add a generic property view that calculates the time so far and effort remaining for each step of a project, as well as the total time overall.

Upvotes: 0

Nikana Reklawyks
Nikana Reklawyks

Reputation: 3404

For the “Total” line, you can add a line |Total| |, press C-u C-c = in the empty cell (to define a formula for it), and enter the formula vsum(@1$2..@4$2). (If you wanna recalc, that's C-u C-c C-c for all.)

I don't know about org-collector, so can't help you with this part. Run it on the entire document (is :id global working?), or shift everything by one level to the right for it to be inside a single tree, maybe.

Upvotes: 6

Related Questions