Heya,
  using the following BQL query:

  SELECT ANY_META('trip') AS trip, SUM(position) AS amount
  WHERE account ~ '^Assets:Reimbursable'
  GROUP BY trip

I find in its output rows like:

             trip                     amount  
  ---------------------------       -----------
  2014-03-21-somewhere1-somereason1  42.00 EUR
  2014-03-24-somewhere2-somereason2
                                     48.37 EUR
  2014-03-28-somewhere3-somereason3
  2014-03-29-somewhere4-somereason4  47.00 EUR

where lines 1 and 5 have non-empty values everywhere and lines 2 and 4
have empty amounts. Line 3 has empty trip, due to the fact that not all
postings have a "trip" metadata, so that is the grouped total of all
such postings.

As that line doesn't make sense for my report, I'm trying to filter it
out. The following (weird) solution works:

  SELECT ANY_META('trip') AS trip, SUM(position) AS amount
  WHERE account ~ '^Assets:Reimbursable'
  AND STR(ANY_META('trip')) != 'None'
  GROUP BY trip

What's happening is that ANY_META is returning a value of None, and I
can filter on its (Python) string representation. Which is awful :-)

Ideally, I'd like the following to work:

  SELECT ANY_META('trip') AS trip, SUM(position) AS amount
  WHERE account ~ '^Assets:Reimbursable'
  AND ANY_META('trip')
  GROUP BY trip

but it fails with the following traceback instead:

  File 
"/home/zack/.local/lib/python3.6/site-packages/beancount/query/query_compile.py",
 line 121, in __call__
    return self.operator(self.left(context), self.right(context))
  TypeError: unsupported operand type(s) for &: 'bool' and 'str'

Alternatively, the following would be a little bit less weird that the
solution above:

  SELECT ANY_META('trip') AS trip, SUM(position) AS amount
  WHERE account ~ '^Assets:Reimbursable'
  AND STR(ANY_META('trip')) != ''
  GROUP BY trip

Martin: what solution would you like best?

The patch for the last solution should be trivial (make ANY_META return
'' instead of None), but it's IMO not the best solution. Making None be
interpreted as False in WHERE context would be better, but I haven't yet
looked at how hard it is to make that work.

TIA,
Cheers
-- 
Stefano Zacchiroli . z...@upsilon.cc . upsilon.cc/zack . . o . . . o . o
Computer Science Professor . CTO Software Heritage . . . . . o . . . o o
Former Debian Project Leader & OSI Board Director . . . o o o . . . o .
« the first rule of tautology club is the first rule of tautology club »

-- 
You received this message because you are subscribed to the Google Groups 
"Beancount" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beancount+unsubscr...@googlegroups.com.
To post to this group, send email to beancount@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beancount/20180925152402.5mjj4cy7igl4h3zr%40upsilon.cc.
For more options, visit https://groups.google.com/d/optout.

Reply via email to