# `Beancount.Directives.Query`
[🔗](https://github.com/thanos/beancount_ex/blob/v0.6.0/lib/beancount/directives/query.ex#L1)

The `query` directive stores a named BQL query in the ledger.

See [Query](https://beancount.github.io/docs/beancount_language_syntax/#query).

## Beancount syntax

    2026-01-01 query "monthly" "SELECT account, sum(position) GROUP BY account"

General form: `YYYY-MM-DD query "Name" "BQL"`

## Elixir struct

    %Beancount.Directives.Query{
      date: ~D[2026-01-01],
      name: "monthly",
      bql: "SELECT account, sum(position) GROUP BY account",
      metadata: %{}
    }

Or use `Beancount.query_directive/4`:

    Beancount.query_directive(~D[2026-01-01], "monthly",
      "SELECT account, sum(position) GROUP BY account"
    )

## Fields

  * `date` - `Date.t()` the query definition is recorded.
  * `name` - unique identifier for the saved query.
  * `bql` - Beancount Query Language string.
  * `metadata` - optional map rendered below the directive.

# `t`

```elixir
@type t() :: %Beancount.Directives.Query{
  bql: String.t(),
  date: Date.t(),
  metadata: map(),
  name: String.t()
}
```

---

*Consult [api-reference.md](api-reference.md) for complete listing*
