From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp2.migadu.com ([2001:41d0:303:e16b::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms13.migadu.com with LMTPS id 6G42NsOPyGZ2CQAAe85BDQ:P1 (envelope-from ) for ; Fri, 23 Aug 2024 13:33:56 +0000 Received: from aspmx1.migadu.com ([2001:41d0:303:e16b::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp2.migadu.com with LMTPS id 6G42NsOPyGZ2CQAAe85BDQ (envelope-from ) for ; Fri, 23 Aug 2024 15:33:56 +0200 X-Envelope-To: larch@yhetil.org Authentication-Results: aspmx1.migadu.com; dkim=none; spf=pass (aspmx1.migadu.com: domain of "emacs-orgmode-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="emacs-orgmode-bounces+larch=yhetil.org@gnu.org"; dmarc=pass (policy=none) header.from=gnu.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1724420035; h=from:from:sender:sender:reply-to:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:in-reply-to:in-reply-to: references:references:list-id:list-help:list-unsubscribe: list-subscribe:list-post; bh=1rmrR5rPgM6qdUv0ayqkTUOFQXOKktdHoBTPGfgsTLc=; b=A3VrASZ8QyR9w4twmp2rKELo9ggsgDUkrl0N94SDJfSQdMXA//yIFEc6HwwTbmJpZWKyRT Akdk01bwGC+8LeqPVty7zs2nOohoKf5U1yqukhdo6gYyllRvOLdPA9KP88rnzqEfqsDdAS 7WyjVDO24BUfR3A9y6VGv+/c5AaJfqhQV6BrbpMl43P+ZTCm6E0kCn7gcKZzaOM/87ekZW pebwEF6hLel30H9fDWeDQ2oHpzIQ5jElDf/9+4ANygCDZrkMSgHRwhB8QksfNlLab4SENH kY9nBRaFPGmsZ1CvIl0ok8rQ3i8l4vn0BbnTK3CcW8XjDpT780/uxSNOjykpig== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=none; spf=pass (aspmx1.migadu.com: domain of "emacs-orgmode-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="emacs-orgmode-bounces+larch=yhetil.org@gnu.org"; dmarc=pass (policy=none) header.from=gnu.org ARC-Seal: i=1; s=key1; d=yhetil.org; t=1724420035; a=rsa-sha256; cv=none; b=rxc82nvzoRZN9kWFs++eAetd/BI4CdM7YTI3ozHk4uiJVNZ+6V9x3+7KZpbnCV6PvpiP8d mBBeAnzYjmOZS+Ytz+hCaa2Bm4Q6VJ+x+s8Mavv4e1RPUs4N7oWYEufDEEj9iiQmAW8Gzk lNeWM8EY4d/T8lwqXuTOpcunebifuN8cosk7rG3FOg6n68j/E1Z0/CxIzgnpZXVDTGdP95 /PTdB4ZvAB15DzgkfLYOm/UbGnXbnUD9ssMMRRP57FpEUzWecVnidMSgkdGaidXPBre1Zv cwciOc0VA5dMuf/Epk3fpMJkNlUq2+GGbuHmJnrXHhud629ycW4qUwfY8kJnvA== Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id 8BCA1667FC for ; Fri, 23 Aug 2024 15:33:55 +0200 (CEST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1shUPW-0000Aw-KT; Fri, 23 Aug 2024 09:33:02 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1shUPU-0000AY-Ls for emacs-orgmode@gnu.org; Fri, 23 Aug 2024 09:33:00 -0400 Received: from smtprelay05.ispgateway.de ([80.67.31.99]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1shUPS-0003tY-7y for emacs-orgmode@gnu.org; Fri, 23 Aug 2024 09:33:00 -0400 Received: from [185.17.206.236] (helo=condition-alpha.com) by smtprelay05.ispgateway.de with esmtpsa (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98) (envelope-from ) id 1shUPN-000000004t6-31lr; Fri, 23 Aug 2024 15:32:53 +0200 Message-Id: To: Ihor Radchenko Cc: emacs-orgmode@gnu.org, =?utf-8?Q?S=C5=82awomir?= Grochowski Subject: [PATCH] Re: Summation of effort estimates in columnview dblock In-Reply-To: References: <87ikwcazd9.fsf@localhost> <6ce3ea5364e48afc79f8345c67111c63@condition-alpha.com> <8734nc30dq.fsf@localhost> <878qwuyq8f.fsf@localhost> Date: Fri, 23 Aug 2024 15:32:53 +0200 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Df-Sender: YWxleGFuZGVyLmFkb2xmQGNvbmRpdGlvbi1hbHBoYS5jb20= Received-SPF: pass client-ip=80.67.31.99; envelope-from=alexander.adolf@condition-alpha.com; helo=smtprelay05.ispgateway.de X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: emacs-orgmode@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-to: Alexander Adolf From: Alexander Adolf via "General discussions about Org-mode." Errors-To: emacs-orgmode-bounces+larch=yhetil.org@gnu.org Sender: emacs-orgmode-bounces+larch=yhetil.org@gnu.org X-Migadu-Country: US X-Migadu-Flow: FLOW_IN X-Migadu-Queue-Id: 8BCA1667FC X-Migadu-Scanner: mx13.migadu.com X-Migadu-Spam-Score: -6.98 X-Spam-Score: -6.98 X-TUID: MBNvij2MJgS0 --=-=-= Content-Type: text/plain Ping? (NOTE: Updated documentation patch below has one very minor typo fixed. END NOTE) --=-=-= Content-Type: text/x-patch Content-Disposition: inline; filename=0001-doc-org-manual.org-better-explain-columnview-column-.patch >From 1a862dd5af174af480cedf35fbed94a7e4dfb69b Mon Sep 17 00:00:00 2001 From: Alexander Adolf Date: Sat, 17 Aug 2024 18:29:51 +0200 Subject: [PATCH] doc/org-manual.org: better explain columnview column summary types * doc/org-manual.org (Column attributes): Shed more words on how summary types for columnview columns work, which property values are taken into account, and which property values get updated in the buffer under what circumstances. --- doc/org-manual.org | 211 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 207 insertions(+), 4 deletions(-) diff --git a/doc/org-manual.org b/doc/org-manual.org index 6cf51ebca..18fc9a4fa 100644 --- a/doc/org-manual.org +++ b/doc/org-manual.org @@ -5734,10 +5734,8 @@ optional. The individual parts have the following meaning: - {{{var(SUMMARY-TYPE)}}} :: - The summary type. If specified, the column values for parent nodes - are computed from the children[fn:: If more than one summary type - applies to the same property, the parent values are computed - according to the first of them.]. + The summary type. If specified, the column and property values for + ancestor nodes are computed from their descendants. Supported summary types are: @@ -5810,6 +5808,211 @@ children have been checked. The =CLOCKSUM= and =CLOCKSUM_T= columns are special, they list the sums of CLOCK intervals in the subtree, either for all clocks or just for today. +When using summary types for non-special properties like the +=Time_Estimate= column in the example, the collection of data for the +summary in each subtree within scope will start at the furthest +descendant nodes which have the respective property. When any of +their sibling nodes also have the property in question, all the +siblings's values of the property are used to compute the summary +result according to the summary type specified. Then the closest +ancestor node which also has the respective property is located, and +the buffer is modified as the value of that node's property is updated +with the summary result of its descendant nodes. This process is +repeated starting from each updated node, until the top of each +subtree has been reached, and all branches of the subtree have been +traversed. Since the property values of ancestor nodes get updated in +this process, only the furthest descendant nodes which have the +respective property along each subtree axis will contribute to the +summary results. + +When a non-special property appears more than once in a columns +definition, and with different summary type specifications (including +with none), the values of that property present on any ancestor nodes +will be updated according to the summary type specification (if any) +of the first instance of the property in the columns definition. +Hence, when the first occurrence of a property in a columns definition +has no summary type specification, the property values of ancestor +nodes will not be updated. + +When using summary types with columns for the special properties +=CLOCKSUM= and =CLOCKSUM_T=, the summary process will be different. +First, as these are special properties that are not stored in property +drawers, no updates will be made to any nodes involved. Secondly, the +summary value will be computed not just from the furthest descendant +nodes, but from the special property values of all nodes in a subtree. + +The following example illustrates how special, and non-special +properties contribute to the summary results, and how the property +values of the headlines get updated. Consider the following buffer +contents (the =#+BEGIN= must be on a single line, and is wrapped here +for readability only): + +#+begin_example +,#+BEGIN: columnview :indent t :format "%ITEM(Task) \ + %EFFORT(Estimated Total){:} %EFFORT(Estimated) \ + %CLOCKSUM(Clocked Total){:} %CLOCKSUM(Clocked)" :id global +,#+END: + +,* Task 1 +:PROPERTIES: +:EFFORT: 2d +:END: +:LOGBOOK: +CLOCK: => 48:00 +:END: + +,** Task 1.1 +:PROPERTIES: +:EFFORT: 2d +:END: + +,*** Task 1.1.1 +:PROPERTIES: +:EFFORT: 3d +:END: +:LOGBOOK: +CLOCK: => 72:00 +:END: + +,*** Task 1.1.2 +:PROPERTIES: +:EFFORT: 4d +:END: +:LOGBOOK: +CLOCK: => 96:00 +:END: + +,** Task 1.2 +:PROPERTIES: +:EFFORT: 4d +:END: +:LOGBOOK: +CLOCK: => 96:00 +:END: +#+end_example + +When the colmnview dynamic block is now updated by {{{kbd(C-c C-c)}}} +or {{{kbd(C-c C-x C-u)}}} (~org-dblock-update~) with the cursor +somewhere on the =#+BEGIN= line, the buffer contents shown below will +result. Note how the values of the =EFFORT= property of =Task 1= and +=Task 1.1= were updated to eleven days, and to seven days +respectively. Note also, how the =CLOCKSUM= of thirteen days for +=Task 1= includes the two days which were clocked on the headline +itself. Comparing the two estimated, and the two clocksum columns +with each other in the table shows how the first summary type +specification determines the summary calculation for a given property. + +#+begin_example +,#+BEGIN: columnview :indent t :format "%ITEM(Task) \ + %EFFORT(Estimated Total){:} %EFFORT(Estimated) \ + %CLOCKSUM(Clocked Total){:} %CLOCKSUM(Clocked)" :id global +| Task | Estimated Total | Estimated | Clocked Total | Clocked | +|------------------+-----------------+-----------+---------------+----------| +| Task 1 | 11d 0:00 | 11d 0:00 | 13d 0:00 | 13d 0:00 | +| \_ Task 1.1 | 7d 0:00 | 7d 0:00 | 7d 0:00 | 7d 0:00 | +| \_ Task 1.1.1 | 3d | 3d | 3d 0:00 | 3d 0:00 | +| \_ Task 1.1.2 | 4d | 4d | 4d 0:00 | 4d 0:00 | +| \_ Task 1.2 | 4d | 4d | 4d 0:00 | 4d 0:00 | +,#+END: + +,* Task 1 +:PROPERTIES: +:EFFORT: 11d 0:00 +:END: +:LOGBOOK: +CLOCK: => 48:00 +:END: + +,** Task 1.1 +:PROPERTIES: +:EFFORT: 7d 0:00 +:END: + +,*** Task 1.1.1 +:PROPERTIES: +:EFFORT: 3d +:END: +:LOGBOOK: +CLOCK: => 72:00 +:END: + +,*** Task 1.1.2 +:PROPERTIES: +:EFFORT: 4d +:END: +:LOGBOOK: + CLOCK: => 96:00 +:END: + +,** Task 1.2 +:PROPERTIES: +:EFFORT: 4d +:END: +:LOGBOOK: +CLOCK: => 96:00 +:END: +#+end_example + +Starting again from the same initial example buffer content, but with +a modified =#+BEGIN= line that swaps the order of the two estimated, +and the two clocksum columns, the result of updating the columnview +dynamic block will be as shown below. Note the different results in +the estimated column without a summary type. Also note that the +=EFFORT= properties of the =Task 1= and =Task 1.1= headlines were not +updated in this case, because the first column specification for the +=EFFORT= property has no summary type. + +#+begin_example +,#+BEGIN: columnview :indent t :format "%ITEM(Task) \ + %EFFORT(Estimated) %EFFORT(Estimated Total){:} \ + %CLOCKSUM(Clocked) %CLOCKSUM(Clocked Total){:}" :id global +| Task | Estimated | Estimated Total | Clocked | Clocked Total | +|------------------+-----------+-----------------+----------+---------------| +| Task 1 | 2d | 11d 0:00 | 13d 0:00 | 13d 0:00 | +| \_ Task 1.1 | 2d | 7d 0:00 | 7d 0:00 | 7d 0:00 | +| \_ Task 1.1.1 | 3d | 3d | 3d 0:00 | 3d 0:00 | +| \_ Task 1.1.2 | 4d | 4d | 4d 0:00 | 4d 0:00 | +| \_ Task 1.2 | 4d | 4d | 4d 0:00 | 4d 0:00 | +,#+END: + +,* Task 1 +:PROPERTIES: +:EFFORT: 2d +:END: +:LOGBOOK: +CLOCK: => 48:00 +:END: + +,** Task 1.1 +:PROPERTIES: +:EFFORT: 2d +:END: + +,*** Task 1.1.1 +:PROPERTIES: +:EFFORT: 3d +:END: +:LOGBOOK: +CLOCK: => 72:00 +:END: + +,*** Task 1.1.2 +:PROPERTIES: +:EFFORT: 4d +:END: +:LOGBOOK: +CLOCK: => 96:00 +:END: + +,** Task 1.2 +:PROPERTIES: +:EFFORT: 4d +:END: +:LOGBOOK: +CLOCK: => 96:00 +:END: +#+end_example + *** Using column view :PROPERTIES: :DESCRIPTION: How to create and use column view. -- 2.39.3 (Apple Git-146) --=-=-=--