On Tuesday, March 13, 2012 4:41:06 PM UTC+1, John Wiegley wrote:
>
> Many thanks to Alexandre Rademaker for suggesting the following idea.
>
> Ledger now has an experimental (i.e., not to be published until 3.1, and
> won't
> hold up release) feature: SELECT-style queries. The syntax is very simple,
> you state what columns you want, what "table" you want them from, and what
> your query is. For example:
>
> ledger select 'date, account, amount from posts where account =~
> /Expenses/'
>
> Behind the scenes, what this does is (a) rewrite what you've asked for as a
> format string, and (b) setup all the related options (like --limit) to
> satisfy
> your query. What's extra nifty about all this is:
>
> - It honors all the special options, like --amount-width, colorizing,
> --bold-if, etc.
>
> - It knows how to properly format and colorize accounts vs. amounts, etc.
>
> - It auto-widens/narrows account/payee names to make the report fit
> within
> the requested --columns
>
> - The column names are actually value expressions; you can query on
> "unrounded(amount)", and select will still know it's an amount column
>
> - The width of unrecognized columns is governed by --meta-width
>
> - "from posts" is the default, you don't have to specify it
>
> Some gotchas already (and there will be many with a feature like this):
>
> - Error handling is currently terrible. You can't ask for 'payee' in an
> accounts report, and you don't want to try. :)
>
> - The 'account' column in account reports doesn't show up hierarchically
> yet
>
> - Doesn't yet blank out repeated dates and payee names if they all occur
> within the same transaction
>
> To show you an example of the time this can save you, let's say I wanted
> this
> weird register report:
>
> ledger --meta-width=14 -f test/input/sample.dat \
> select 'date, aux_date or date, payee, tag("Sample"),' \
> 'amount, amount * 2' from posts
>
> Here's the formatting string this builds:
>
> %(ansify_if(ansify_if(justify(format_date(date), int(date_width)),green if
> color and date > today),bold if should_bold))
> %(ansify_if(ansify_if(justify(format_date((aux_date | date)),
> int(date_width)),green if color and date > today),bold if should_bold))
> %(ansify_if(ansify_if(justify(truncated(payee, int(payee_width)),
> int(payee_width)),bold if color and !cleared and actual),bold if
> should_bold)) %(ansify_if(justify(truncated(tag("Sample"), int(meta_width
> or 10)), int(meta_width) or 10),bold if should_bold))
> %(ansify_if(justify(scrub(display_amount),
> int(amount_width),int(date_width) + 1 + int(date_width) + 1 +
> int(payee_width) + 1 + (int(meta_width) or 10) + 1 + int(amount_width),
> true, color), bold if should_bold))
> %(ansify_if(justify(scrub((display_amount * {2})),
> int(amount_width),int(date_width) + 1 + int(date_width) + 1 +
> int(payee_width) + 1 + (int(meta_width) or 10) + 1 + int(amount_width) + 1
> + int(amount_width), true, color), bold if should_bold))\n
>
> And here's the output:
>
> 04-May-01 04-May-01 Checking balance $1,000.00
> $2,000.00
> 04-May-01 04-May-01 Checking balance $-1,000.00
> $-2,000.00
> 04-May-03 04-May-01 Investment balance 50 AAPL 100
> AAPL
> 04-May-03 04-May-01 Investment balance $-1,500.00
> $-3,000.00
> 04-May-14 04-May-14 Páy dày 500.00€
> 1000.00€
> 04-May-14 04-May-14 Páy dày -500.00€
> -1000.00€
> 04-May-14 04-May-14 Another dày in w.. $500.00
> $1,000.00
> 04-May-14 04-May-14 Another dày in w.. $-500.00
> $-1,000.00
> 04-May-14 04-May-14 Another dày in w.. $1,000.00
> $2,000.00
> 04-May-14 04-May-14 Another dày in w.. $-1,000.00
> $-2,000.00
> 04-May-27 04-May-27 Book Store $20.00
> $40.00
> 04-May-27 04-May-27 Book Store $40.00
> $80.00
> 04-May-27 04-May-27 Book Store $30.00
> $60.00
> 04-May-27 04-May-27 Book Store $-90.00
> $-180.00
> 04-May-27 04-May-27 Book Store $-2.00
> $-4.00
> 04-May-27 04-May-27 Credit card comp.. Another Value $20.00
> $40.00
> 04-May-27 04-May-27 Credit card comp.. Value $-20.00
> $-40.00
>
> John
>
This looks like a very useful feature. Are there more examples on how this
can be used? Anyone using this now?
Jostein
--
---
You received this message because you are subscribed to the Google Groups
"Ledger" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.