> ## Documentation Index
> Fetch the complete documentation index at: https://docs.datazone.co/llms.txt
> Use this file to discover all available pages before exploring further.

# Variable Usage

> Examples of using variables and Jinja-style templating in Intelligent App queries.

Intelligent Apps support dynamic query generation using variables and Jinja-style templating. This allows you to build flexible dashboards that respond to user input from filters and variables.

## Basic Variable Substitution

You can reference variables in your SQL queries using double curly braces:

```yaml theme={null}
query: |
  SELECT * FROM sales_orders WHERE order_date > '{{ order_date }}'
```

## Conditional Query Blocks

You can use Jinja-style control structures to include or exclude parts of your query based on variable values:

```yaml theme={null}
query: |
  SELECT * FROM sales_orders
  WHERE 1=1
  {% if product_group != '' %}
    AND product_group = '{{ product_group }}'
  {% endif %}
  {% if membership_type != 'all' %}
    AND membership_type = '{{ membership_type }}'
  {% endif %}
```

## Using Multiple Variables

Combine several variables for more complex filtering:

```yaml theme={null}
query: |
  SELECT * FROM sales_orders
  WHERE order_date BETWEEN '{{ start_date }}' AND '{{ end_date }}'
    AND amount > {{ min_amount }}
```

## Example: Dynamic LIMIT

You can use variables to control query limits:

```yaml theme={null}
query: |
  SELECT * FROM sales_orders
  LIMIT {{ row_limit }}
```

## Example: IN Clauses with Lists

If your variable is a list, you can use Jinja to join values for an IN clause:

```yaml theme={null}
query: |
  SELECT * FROM sales_orders
  WHERE region IN ({{ regions | join(", ") }})
```

## Best Practices

* Always provide sensible defaults for variables to avoid empty queries.
* Use `{% if ... %}` blocks to prevent SQL errors when variables are empty or unset.
* Sanitize and validate user input where possible.

## Reference: Jinja Syntax

* `{{ variable }}`: Insert variable value
* `{% if ... %} ... {% endif %}`: Conditional blocks
* `{% for ... %} ... {% endfor %}`: Loops (for advanced use)
* Filters like `| join(", ")` for lists

See also: [Filters](./filters), [Overview](./overview), [Charts](./charts)
