emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: tbanelwebmin <tbanelwebmin@free.fr>
To: emacs-orgmode@gnu.org
Subject: Re: help: howto aggregate several properties in one column
Date: Sun, 11 Aug 2024 22:27:48 +0200	[thread overview]
Message-ID: <6f4ba917-7c81-641e-336e-0b0ba8381fc3@free.fr> (raw)
In-Reply-To: <daabd776-0543-4e85-b907-b6b9bbe84e3f@cas.cat>

Two quick-and-dirty workarounds:

1. Eval that prior to using propview:

(setq
  TEST_A "<>"
  TEST_B "<>"
  TEST_C "<>"
  TEST_D "<>")

2. Define this helper macro:

(defmacro valof (symbol)
   `(if (boundp ',symbol)
       ,symbol
     "()"))

Then specify columns like that:

(concat (valof TEST_A) (valof TEST_B))


Have fun
Thierry


On 24-08-11 10:49, Pedro wrote:
> Hi,
>
> I am a heavy user of propview [1] and I am very happy with it, but 
> looks like now I reached a limitation, or maybe someone founds a 
> magical workaround. I am open to use another solution outside of 
> propview.
>
> Find attached in file aggregate-props.org that serves as a playground 
> environment and as an example of what I am struggling with, it is 
> posed as a generic example: I want to "merge" two properties into one, 
> no matter if the property exists or no. I am trying to use concat, 
> concat works only when the properties on an item exist, if one of them 
> does not exist, fails, which is unfortunate to what I am trying to 
> achieve, because on one side, I would like to report (with a propview 
> table) the frequency of appearance of each test_a, test_b, test_c, 
> etc. on all nodes with tag :test:, and with another propview table, a 
> summary of all test properties.
>
> There is a workaround based on a precalculation strategy that I kind 
> of hate: do an org-map-entries of all targeted items with tag "test", 
> and update SUMMARY property through an adhoc elisp function all the 
> properties related to test (I am happy with just enumerating all of 
> the involved subproperties, but I recognize, having a regex on 
> property such as test_* or that "starts with" test, would be amazing), 
> then, it is just as easy as adding the new column SUMMARY, but I would 
> like to avoid this solution
>
> Extra note: related to propview, it is not a problem to concat 100 
> elements, because you can do it in an extra shortnamed function, so 
> the column name can be short
>
> So this is what happens, concat of TEST_A and TEST_B is 0
>
> #+BEGIN: propview :scope tree :match "+test" :noquote all :cols (ITEM 
> CREATED TEST_A TEST_B (concat TEST_A TEST_B) (concat TEST_C TEST_D))
> | ITEM    | CREATED                | TEST_A | TEST_B | (concat TEST_A 
> TEST_B) | (concat TEST_C TEST_D) |
> |---------+------------------------+--------+--------+------------------------+------------------------| 
>
> | mytest  | [2024-08-09 Fri 23:53] |      a |      0 
> |                      0 | cd                     |
> | mytest2 | [2024-08-09 Fri 23:53] |      0 |      b 
> |                      0 | cd                     |
> | mytest3 | [2024-08-09 Fri 23:53] |      0 |      0 
> |                      0 | 0                      |
> |---------+------------------------+--------+--------+------------------------+------------------------| 
>
> |         |                        |        | |                        
> |                        |
> #+END:
>
> What I would expect to happen is that in the concat result of TEST_A 
> and TEST_B would appear a or b, maybe that could be done with another 
> function?
>
> #+BEGIN: propview :scope tree :match "+test" :noquote all :cols (ITEM 
> CREATED TEST_A TEST_B (concat TEST_A TEST_B) (concat TEST_C TEST_D))
> | ITEM    | CREATED                | TEST_A | TEST_B | (concat TEST_A 
> TEST_B) | (concat TEST_C TEST_D) |
> |---------+------------------------+--------+--------+------------------------+------------------------| 
>
> | mytest  | [2024-08-09 Fri 23:53] |      a |      0 
> |                      a | cd                     |
> | mytest2 | [2024-08-09 Fri 23:53] |      0 |      b 
> |                      b | cd                     |
> | mytest3 | [2024-08-09 Fri 23:53] |      0 |      0 
> |                      0 | 0                      |
> |---------+------------------------+--------+--------+------------------------+------------------------| 
>
> |         |                        |        | |                        
> |                        |
> #+END:
>
> Cheers,
> pedeb
>
> [1] https://orgmode.org/worg/org-contrib/org-collector.html
>



  reply	other threads:[~2024-08-11 20:28 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-08-11  8:49 help: howto aggregate several properties in one column Pedro
2024-08-11 20:27 ` tbanelwebmin [this message]
2024-08-12  8:46   ` Pedro
  -- strict thread matches above, loose matches on Subject: below --
2024-08-10 12:13 Pedro

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.orgmode.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=6f4ba917-7c81-641e-336e-0b0ba8381fc3@free.fr \
    --to=tbanelwebmin@free.fr \
    --cc=emacs-orgmode@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).