From: Pedro <pinmacs@cas.cat>
To: emacs-orgmode@gnu.org
Subject: Re: help: howto aggregate several properties in one column
Date: Mon, 12 Aug 2024 10:46:51 +0200 [thread overview]
Message-ID: <da9df13b-31ba-410e-8d2f-003bb56e5026@cas.cat> (raw)
In-Reply-To: <6f4ba917-7c81-641e-336e-0b0ba8381fc3@free.fr>
[-- Attachment #1.1.1: Type: text/plain, Size: 6442 bytes --]
Thank you Thierry!
Even better, just initializing it the empty properties with an empty
string works great and then I don't need the valof macro.
I updated the aggregate-props.org file and find it attached
Here is the result I am getting with just ~(progn(setq TEST_A "") (setq
TEST_B ""))~
#+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 | |
a | cd |
| mytest2 | [2024-08-09 Fri 23:53] | | b |
b | cd |
| mytest3 | [2024-08-09 Fri 23:53] | | | |
0 |
|---------+------------------------+--------+--------+------------------------+------------------------|
| | | | |
| |
#+END:
Oooh, I am so happy, thank you again!
Cheers,
Pedro
On 2024-08-11 22:27, tbanelwebmin wrote:
> 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
>>
>
>
[-- Attachment #1.1.2: aggregate-props.org --]
[-- Type: text/org, Size: 1787 bytes --]
* my test
:PROPERTIES:
:CREATED: [2024-08-10 Sat 13:48]
:END:
#+name: sourceblock_created_2024-08-12_10-36-52
#+begin_src emacs-lisp
;; eval this before executing propview
;; so that aggregating columns with concat works
(setq TEST_A "")
(setq TEST_B "")
#+end_src
#+RESULTS: sourceblock_created_2024-08-12_10-36-52
#+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 | | a | cd |
| mytest2 | [2024-08-09 Fri 23:53] | | b | b | cd |
| mytest3 | [2024-08-09 Fri 23:53] | | | | 0 |
|---------+------------------------+--------+--------+------------------------+------------------------|
| | | | | | |
#+END:
** mytest :test:
:PROPERTIES:
:CREATED: [2024-08-09 Fri 23:53]
:CUSTOM_ID: board_157
:test_a: a
:test_c: c
:test_d: d
:END:
** mytest2 :test:
:PROPERTIES:
:CREATED: [2024-08-09 Fri 23:53]
:CUSTOM_ID: board_158
:test_b: b
:test_c: c
:test_d: d
:END:
** mytest3 :test:
:PROPERTIES:
:CREATED: [2024-08-09 Fri 23:53]
:CUSTOM_ID: board_158
:test_c: c
:END:
[-- Attachment #1.1.3: OpenPGP public key --]
[-- Type: application/pgp-keys, Size: 3323 bytes --]
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 495 bytes --]
next prev parent reply other threads:[~2024-08-12 8:48 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
2024-08-12 8:46 ` Pedro [this message]
-- 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=da9df13b-31ba-410e-8d2f-003bb56e5026@cas.cat \
--to=pinmacs@cas.cat \
--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).