From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp1.migadu.com ([2001:41d0:403:58f0::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms13.migadu.com with LMTPS id EGhtLhmVxGa3ZQEA62LTzQ:P1 (envelope-from ) for ; Tue, 20 Aug 2024 13:07:37 +0000 Received: from aspmx1.migadu.com ([2001:41d0:403:58f0::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp1.migadu.com with LMTPS id EGhtLhmVxGa3ZQEA62LTzQ (envelope-from ) for ; Tue, 20 Aug 2024 15:07:37 +0200 X-Envelope-To: larch@yhetil.org Authentication-Results: aspmx1.migadu.com; dkim=none; dmarc=pass (policy=none) header.from=gnu.org; 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" ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1724159257; 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=S7sqvbLYsO9SPItifV4SrRE+rxsUpxM7IuXPxOweSSk=; b=RjTjNmeBXaLHOfi0y8cqJeScFjFGKB4nzmPvfTJNunjT42IJ0izUpOHtigbmJIRK5YNj/c jOFPqICrf4L9Sixc1XbRzj7HTFTldY3aQE2dA7Z90hNSyYErQf0r81QbxWMvqzhUMmIG9I tYMAvZhXiHBtPX8ojQgSkYw73P8V91Pn+qA1xKE06VZ6IAwR/4ZZen0mT29KzuPC8gfnvj K79zMjvmbIMvLtw9vOCc06mkFjcI6Rr8xNaGCbzwHqyT/3BGulBHFqYcgZgFa0k8rTy0j3 L5Th2KKfMFuP/IH4qPSzO/Hn7pn6VZbE3+OfBmfN/3JE8GQnxs8Ad6g1rn/izA== ARC-Seal: i=1; s=key1; d=yhetil.org; t=1724159257; a=rsa-sha256; cv=none; b=Gp38ObAQUJyT24fIw2Y29GL6Kq5k1yopVI7AZKepJalroW0V6XMJmoLEF+RrF7H+dxiYV6 Uxbtk73OXLhoPxWgLfGzkxXRjab/qBmdf/hT56eNu0iDU8XaGTzt8sTOzHi4r0i1w+vw/y J9+q1Sn3vabdZsVuz4CJEd7WV/v7mYsLYbT2CLUJ6AWbmgNdV4EyL+HELrLPrqzhCfKeHK V5UQvdRZI/FhtsrFjXaZIRWfWda/fkx0zKI+LrQml8QKGA6MRWYbcbyLaFx1rscf9jaIPb EvMe/b8FRlnQcBmjOmYuvgIceO9RgyXM3D2pjY7i/kWBeFCRTU92WOusROdZnA== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=none; dmarc=pass (policy=none) header.from=gnu.org; 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" 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 569027A596 for ; Tue, 20 Aug 2024 15:07:37 +0200 (CEST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1sgOZZ-0004qr-Vg; Tue, 20 Aug 2024 09:06:54 -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 1sgOZX-0004qQ-NQ for emacs-orgmode@gnu.org; Tue, 20 Aug 2024 09:06:51 -0400 Received: from smtprelay06.ispgateway.de ([80.67.31.103]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1sgOZU-0004zb-Qm for emacs-orgmode@gnu.org; Tue, 20 Aug 2024 09:06:51 -0400 Received: from [185.17.206.178] (helo=condition-alpha.com) by smtprelay06.ispgateway.de with esmtpsa (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98) (envelope-from ) id 1sgOZP-0000000056H-3Bys; Tue, 20 Aug 2024 15:06:43 +0200 Message-Id: To: Ihor Radchenko Cc: emacs-orgmode@gnu.org, =?utf-8?Q?S=C5=82awomir?= Grochowski Subject: Re: Summation of effort estimates in columnview dblock In-Reply-To: <878qwuyq8f.fsf@localhost> References: <87ikwcazd9.fsf@localhost> <6ce3ea5364e48afc79f8345c67111c63@condition-alpha.com> <8734nc30dq.fsf@localhost> <878qwuyq8f.fsf@localhost> Date: Tue, 20 Aug 2024 15:06:43 +0200 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Df-Sender: YWxleGFuZGVyLmFkb2xmQGNvbmRpdGlvbi1hbHBoYS5jb20= Received-SPF: pass client-ip=80.67.31.103; envelope-from=alexander.adolf@condition-alpha.com; helo=smtprelay06.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_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_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-Flow: FLOW_IN X-Migadu-Country: US X-Migadu-Spam-Score: -3.97 X-Spam-Score: -3.97 X-Migadu-Queue-Id: 569027A596 X-Migadu-Scanner: mx11.migadu.com X-TUID: +8QY+HIERUsw --=-=-= Content-Type: text/plain Thanks for your comments! Ihor Radchenko writes: > [...] > Several comments: > > 1. Nitpick: siblings's (it is current Emacs grammar convention in the > manuals) Fixed. > 2. Please add some examples with illustration. Now, this description > feels too dense Having written International technical standards for 20 years, I consider this flattery. ;-)) Example included. >> --- a/etc/ORG-NEWS >> +++ b/etc/ORG-NEWS > > No need. This change is not introducing anything new feature-wise. > [...] Removed. Fingers crossed, --alexander --=-=-= Content-Type: text/x-patch Content-Disposition: inline; filename=0001-doc-org-manual.org-better-explain-columnview-column-.patch >From d9e467207f333fd925bd9090228808da54205280 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..97ae0867c 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) --=-=-=--