7.5.1.2 Column attributes

列定义用于设置列的各项属性,通用格式如下:

%[WIDTH]PROPERTY[(TITLE)][{SUMMARY-TYPE}]
%[宽度]属性名[(列标题)][{汇总类型}]

除百分号与属性名外,其余部分均为可选。各部分含义如下:

WIDTH

整数,指定列的字符宽度。省略时宽度自动计算。

PROPERTY

本列要编辑的属性。也支持表示元数据的特殊属性(参见 Special Properties)。

TITLE

列表头文字。省略时使用属性名。

SUMMARY-TYPE

汇总类型。若指定,父标题的列值将由直接子节点计算得出。若父节点已有同名属性,该属性不会参与计算。

当父标题存在已有属性时,Org 不仅会在列视图中叠加计算值,还会直接覆盖父节点属性收纳块中的属性值56

特殊属性不支持汇总类型。

支持的汇总类型如下:

+本列数值求和。
+;%.1f同 ‘+=,但按 =%.1f’ 格式化结果。
$货币格式,等价于 ‘+;%.2f’ 。
min列中最小值。
max列中最大值。
mean数值算术平均值。
X复选框状态:所有子项均为 ‘[X]’ 时显示 ‘[X]’ 。
X/复选框状态:显示 ‘[n/m]’ 。
X%复选框状态:显示 ‘[n%]’ 。
:时间求和(HH:MM);纯数字视为分钟。
:min列中最小时间值。
:max列中最大时间值。
:mean时间值算术平均值。
@min最小时长57(天/时/分/秒)。
@max最大时长(天/时/分/秒)。
@mean时长算术平均值(天/时/分/秒)。
est+合并低–高估算范围。

你也可以通过设置 org-columns-summary-types 自定义汇总类型。

est+’ 汇总类型需要特别说明。它用于合并以低–高范围表示的工作量估算。例如,某项任务你不直接估算为 5 天,而是在较有把握时记为 5–6 天,完全不确定时记为 1–10 天。两种范围平均值都是 5.5 天,但前者更可控。

直接将所有范围的上下限相加会得到过于宽泛的结果,而 ‘est+’ 会对子任务的均值和方差进行统计合并,生成更合理的总估算。例如,10 个任务各估算 0.5–2 天,直接相加为 5–20 天,代表极端顺利或极端糟糕的情况;而 ‘est+’ 会更真实地估算为 10–15 天。

下面是完整的列定义示例,同时包含允许取值58

: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]"

第一列 ‘%25ITEM’ 表示显示条目本身(也就是标题)的前 25 个字符。你在定义列时通常都应该以 ‘ITEM’ 说明符开头。其他说明符分别创建这些列: ‘Owner’ 列使用一组姓名作为可选值; ‘Status’ 列有四种可选状态;还有一个复选框字段 ‘Approved’ 。在 ‘%’ 符号后如果没有指定宽度,列宽会自动适配为刚好能完整显示所有内容的宽度。 ‘Approved’ 列使用了自定义的标题( ‘Approved?’ ,带问号)。 ‘Time_Estimate’ 列会对 HH:MM 这类时长格式进行求和汇总;而 ‘Approved’ 列则会在所有子项都被勾选时显示 ‘[X]’ 状态。

CLOCKSUM’ 和 ‘CLOCKSUM_T’ 是特殊列属性,分别列出子树内所有时钟记录总和( ‘CLOCKSUM’ )与当日时钟记录总和( ‘CLOCKSUM_T’ )。与忽略父标题属性值的 ‘:’ 汇总类型不同, ‘CLOCKSUM’ 与 ‘CLOCKSUM_T’ 会统计所有 ‘CLOCK:’ 记录,包括父标题内的记录。

  1. Summaries in deeply nested hierarchy

    在多层嵌套结构中计算汇总时,会从最深层级向上递归计算。示例如下:

    #+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:
    

Footnotes

(56)

若同一属性被多次定义列,只有第一个定义会写入属性收纳块。例如 ‘%EFFORT{mean} %EFFORT(Sum){:}’ 只会写入 ‘EFFORT’ 的平均值而非合计值。若第一个列定义不含汇总类型( ‘%EFFORT %EFFORT{mean}’ ),则不会写入收纳块

(57)

时长可定义为持续时间,使用 org-duration-units 中定义的单位,例如 ‘3d 1h’ 。若列中存在此类值,汇总结果也会以持续时间形式呈现。

(58)

注意 ‘COLUMNS’ 定义必须写在一行内,此处换行仅为排版限制。