8.4.2 The clock table
Org mode can produce quite complex reports based on the time clocking information. Such a report is called a clock table, because it is formatted as one or several Org tables.
org-clock-report
β
Insert or update a clock table. When called with a prefix argument, jump to the first clock table in the current document and update it. The clock table includes archived trees.
This command can be invoked by calling org-dynamic-block-insert-dblock
(C-c C-x x
) and selecting βclocktable" (see Dynamic Blocks).
C-c C-c
or C-c C-x C-u
(org-dblock-update
)β
Update dynamic block at point. Point needs to be in the βBEGIN
β line of the dynamic block.
C-u C-c C-x C-u
β
Update all dynamic blocks (see Dynamic Blocks). This is useful if you have several clock table blocks in a buffer.
S-LEFT
β
S-RIGHT
(org-clocktable-try-shift
)β
Shift the current β:block
β interval and update the table. Point needs to be in the β#+BEGIN: clocktable
β line for this command. If β:block
β is βtoday
β, it is shifted to βtoday-1
β, etc.
Here is an example of the frame for a clock table as it is inserted into the buffer by org-clock-report
:
#+BEGIN: clocktable :maxlevel 2 :emphasize nil :scope file
#+END: clocktable
The β#+BEGIN
β line contains options to define the scope, structure, and formatting of the report. Defaults for all these options can be configured in the variable org-clocktable-defaults
.
First there are options that determine which clock entries are to be selected:
β:maxlevel
ββ
Maximum level depth to which times are listed in the table. Clocks at deeper levels are summed into the upper level.
β:scope
ββ
The scope to consider. This can be any of the following:
βnil β | the current buffer or narrowed region |
βfile β | the full current buffer |
βsubtree β | the subtree where the clocktable is located |
βtreeN β | the surrounding level N tree, for example βtree3 β |
βtree β | the surrounding level 1 tree |
βagenda β | all agenda files |
β("file" ...) β | scan these files |
βFUNCTION β | scan files returned by calling FUNCTION with no argument |
βfile-with-archives β | current file and its archives |
βagenda-with-archives β | all agenda files, including archives |
β:block
ββ
The time block to consider. This block is specified either absolutely, or relative to the current time and may be any of these formats:
β2007-12-31 β | New year eve 2007 |
β2007-12 β | December 2007 |
β2007-W50 β | ISO-week 50 in 2007 |
β2007-Q2 β | 2nd quarter in 2007 |
β2007 β | the year 2007 |
βtoday β, βyesterday β, βtoday-N β | a relative day |
βthisweek β, βlastweek β, βthisweek-N β | a relative week |
βthismonth β, βlastmonth β, βthismonth-N β | a relative month |
βthisyear β, βlastyear β, βthisyear-N β | a relative year |
βuntilnow β1 | all clocked time ever |
When this option is not set, Org falls back to the value in org-clock-display-default-range
, which defaults to the current year.
Use S-LEFT
or S-RIGHT
to shift the time interval.
β:tstart
ββ
A time string specifying when to start considering times. Relative times like β"<-2w>"
β can also be used. See Matching tags and properties for relative time syntax.
β:tend
ββ
A time string specifying when to stop considering times. Relative times like β"<now>"
β can also be used. See Matching tags and properties for relative time syntax.
β:wstart
ββ
The starting day of the week. The default is 1 for Monday.
β:mstart
ββ
The starting day of the month. The default is 1 for the first.
β:step
ββ
Set to βday
β, βweek
β, βsemimonth
β, βmonth
β, or βyear
β to split the table into chunks. To use this, either β:block
β, or β:tstart
β and β:tend
β are required.
β:stepskip0
ββ
When non-nil
, do not show steps that have zero time.
β:fileskip0
ββ
When non-nil
, do not show table sections from files which did not contribute.
β:match
ββ
A tags match to select entries that should contribute. See Matching tags and properties for the match syntax.
Then there are options that determine the formatting of the table. There options are interpreted by the function org-clocktable-write-default
, but you can specify your own function using the β:formatter
β parameter.
β:emphasize
ββ
When non-nil
, emphasize level one and level two items.
β:lang
ββ
Language2 to use for descriptive cells like βTask".
β:link
ββ
Link the item headlines in the table to their origins.
β:narrow
ββ
An integer to limit the width of the headline column in the Org table. If you write it like β50!
β, then the headline is also shortened in export.
β:indent
ββ
Indent each headline field according to its level.
β:hidefiles
ββ
Hide the file column when multiple files are used to produce the table.
β:tcolumns
ββ
Number of columns to be used for times. If this is smaller than β:maxlevel
β, lower levels are lumped into one column.
β:level
ββ
Should a level number column be included?
β:sort
ββ
A cons cell containing the column to sort and a sorting type. E.g., β:sort (1 . ?a)
β sorts the first column alphabetically.
β:compact
ββ
Abbreviation for β:level nil :indent t :narrow 40! :tcolumns 1
β. All are overwritten except if there is an explicit β:narrow
β.
β:timestamp
ββ
A timestamp for the entry, when available. Look for βSCHEDULED
β, βDEADLINE
β, βTIMESTAMP
β and βTIMESTAMP_IA
β special properties (see Special Properties), in this order.
β:tags
ββ
When this flag is non-nil
, show the headlineβs tags.
β:properties
ββ
List of properties shown in the table. Each property gets its own column.
β:inherit-props
ββ
When this flag is non-nil
, the values for β:properties
β are inherited.
β:formula
ββ
Content of a βTBLFM
β keyword to be added and evaluated. As a special case, β:formula %
β adds a column with % time. If you do not specify a formula here, any existing formula below the clock table survives updates and is evaluated.
β:formatter
ββ
A function to format clock data and insert it into the buffer.
To get a clock summary of the current level 1 tree, for the current day, you could write:
#+BEGIN: clocktable :maxlevel 2 :block today :scope tree1 :link t
#+END: clocktable
To use a specific time range you could write3
#+BEGIN: clocktable :tstart "<2006-08-10 Thu 10:00>"
:tend "<2006-08-10 Thu 12:00>"
#+END: clocktable
A range starting a week ago and ending right now could be written as
#+BEGIN: clocktable :tstart "<-1w>" :tend "<now>"
#+END: clocktable
A summary of the current subtree with % times would be
#+BEGIN: clocktable :scope subtree :link t :formula %
#+END: clocktable
A horizontally compact representation of everything clocked during last week would be
#+BEGIN: clocktable :scope agenda :block lastweek :compact t
#+END: clocktable