A column definition sets the attributes of a column. The general definition looks like this:
%[WIDTH]PROPERTY[(TITLE)][{SUMMARY-TYPE}]
Except for the percent sign and the property name, all items are optional. The individual parts have the following meaning:
An integer specifying the width of the column in characters. If omitted, the width is determined automatically.
The property that should be edited in this column. Special properties representing metadata are allowed here as well (see Special Properties).
The header text for the column. If omitted, the property name is used.
The summary type. If specified, the column values for parent headings are computed from the direct children. If there is any existing property defined for the parent nodes, it is not used in the calculations.
When there is an existing property in parent heading, Org does not only overlay the computed value in the column view, but also overwrites the property value in parent’s property drawer56.
Summary type is ignored for special properties.
Supported summary types are:
| ‘+’ | Sum numbers in this column. |
| ‘+;%.1f’ | Like ‘+’, but format result with ‘%.1f’. |
| ‘$’ | Currency, short for ‘+;%.2f’. |
| ‘min’ | Smallest number in column. |
| ‘max’ | Largest number. |
| ‘mean’ | Arithmetic mean of numbers. |
| ‘X’ | Checkbox status, ‘[X]’ if all children are ‘[X]’. |
| ‘X/’ | Checkbox status, ‘[n/m]’. |
| ‘X%’ | Checkbox status, ‘[n%]’. |
| ‘:’ | Sum times, HH:MM, plain numbers are minutes. |
| ‘:min’ | Smallest time value in column. |
| ‘:max’ | Largest time value. |
| ‘:mean’ | Arithmetic mean of time values. |
| ‘@min’ | Minimum age57 (in days/hours/mins/seconds). |
| ‘@max’ | Maximum age (in days/hours/mins/seconds). |
| ‘@mean’ | Arithmetic mean of ages (in days/hours/mins/seconds). |
| ‘est+’ | Add low-high estimates. |
You can also define custom summary types by setting
org-columns-summary-types.
The ‘est+’ summary type requires further explanation. It is used for combining estimates, expressed as low-high ranges. For example, instead of estimating a particular task will take 5 days, you might estimate it as 5–6 days if you’re fairly confident you know how much work is required, or 1–10 days if you do not really know what needs to be done. Both ranges average at 5.5 days, but the first represents a more predictable delivery.
When combining a set of such estimates, simply adding the lows and highs produces an unrealistically wide result. Instead, ‘est+’ adds the statistical mean and variance of the subtasks, generating a final estimate from the sum. For example, suppose you had ten tasks, each of which was estimated at 0.5 to 2 days of work. Straight addition produces an estimate of 5 to 20 days, representing what to expect if everything goes either extremely well or extremely poorly. In contrast, ‘est+’ estimates the full job more realistically, at 10–15 days.
Here is an example for a complete columns definition, along with allowed values58.
:COLUMNS: %25ITEM %9Approved(Approved?){X} %Owner %11Status \
%10Time_Estimate{:}
:Owner_ALL: Tammy Mark Karl Lisa Don
:Status_ALL: "In progress" "Not started yet" "Finished" ""
:Approved_ALL: "[ ]" "[X]"
The first column, ‘%25ITEM’, means the first 25 characters of the item itself, i.e., of the headline. You probably always should start the column definition with the ‘ITEM’ specifier. The other specifiers create columns ‘Owner’ with a list of names as allowed values, for ‘Status’ with four different possible values, and for a checkbox field ‘Approved’. When no width is given after the ‘%’ character, the column is exactly as wide as it needs to be in order to fully display all values. The ‘Approved’ column does have a modified title (‘Approved?’, with a question mark). Summaries are created for the ‘Time_Estimate’ column by adding time duration expressions like HH:MM, and for the ‘Approved’ column, by providing an ‘[X]’ status if all children have been checked.
The ‘CLOCKSUM’ and ‘CLOCKSUM_T’ column properties are special, they list the sums of ‘CLOCK:’ intervals in the subtree, either for all clocks (‘CLOCKSUM’) or just for today (‘CLOCKSUM_T’). Unlike ‘:’ summary type that ignores property values in parent headings, all the ‘CLOCK:’ intervals are summed up, including ‘CLOCK:’ lines within parent headings.
When computing summaries of deeply nested headings, the summaries are computed recursively, from the deepest level to the shallowest. Here is an example:
#+BEGIN: columnview :indent t :format "%ITEM %EFFORT{:mean}" :id global
| ITEM | EFFORT |
|--------------------+---------|
| Top level | 3h 0min |
| \_ Intermediate 1 | 1h 0min |
| \_ Leaf 1 | 1h |
| \_ Leaf 2 | 1h |
| \_ Leaf 3 | 1h |
| \_ Intermediate 2 | 5h |
#+END:
* Top level
** Intermediate 1
:PROPERTIES:
:EFFORT: *unused*, will be set to 1h 0min (mean of the leaf nodes)
:END:
***** Leaf 1
:PROPERTIES:
:EFFORT: 1h
:END:
*** Leaf 2
:PROPERTIES:
:EFFORT: 1h
:END:
*** Leaf 3
:PROPERTIES:
:EFFORT: 1h
:END:
** Intermediate 2
:PROPERTIES:
:EFFORT: 5h
:END:
If more than column definition is requested for the same property, only the first definition will trigger writing to the property drawer. For example, ‘%EFFORT{mean} %EFFORT(Sum){:}’ will write the mean value of ‘EFFORT’ property; not the sum. If the first column definition does not have summary type (‘%EFFORT %EFFORT{mean}’), nothing will be written to the property drawer
An age can be defined as a duration, using units defined in
org-duration-units, e.g., ‘3d 1h’. If any value in the column is as
such, the summary is also expressed as a duration.
Please note that the ‘COLUMNS’ definition must be on a single line; it is wrapped here only because of formatting constraints.