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