emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
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 --]

  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).