Relative Date Expressions

Relative Date Expressions

available since 16.0

QueryAPI supports relative date expressions in Groovy API. Instead of hard-coding absolute dates into your queries or dashboard filters, you can build conditions that are evaluated at runtime, such as “today”, “now”, or “today ± N days”.

Example 1 – Last 7 Days of Sales

This example shows how to use a “today” literal and relative subtraction (−7 days) in a QueryAPI filter. This can enable a “Last 7 days” dashboard filter without hard‑coding dates.

import java.time.Duration def qapi = api.queryApi() def exprs = qapi.exprs() def sales = qapi.tables().datamart("Standard_Sales_Data") def today = exprs.dateOnlyToday() def sevenDaysAgo = today.minus(Duration.ofDays(7)) return qapi.source( sales, [sales["InvoiceDate"], sales["InvoicePrice"]], exprs.and( sales["InvoiceDate"].greaterOrEqual(sevenDaysAgo), sales["InvoiceDate"].lessOrEqual(today) ) ).stream { it.toList() }

Example 2 – Next 30 Days Validity Window

This example shows how to define a rolling 30‑day horizon (e.g., for “offers valid in the next 30 days”).

import java.time.Duration def qapi = api.queryApi() def exprs = qapi.exprs() def cr = qapi.tables().conditionRecords() def today = exprs.dateOnlyToday() def in30Days = today.plus(Duration.ofDays(30)) return qapi.source( cr, [cr.key1(), cr.validFrom(), cr.validTo()], exprs.and( cr.validFrom().lessOrEqual(today), cr.validTo().greaterOrEqual(in30Days) ) ).stream { it.toList() }

Example 3 – Dashboard “Custom” Filter Using Relative Dates

This example shows how Query Definitions can plug relative date expressions into a single filter (dateFilter) behind the “Custom” date option. Different UI choices (e.g., “Last 7 days”, “Last 30 days”, “Next month”) can map to different combinations of relative start/end expressions in Groovy.

import java.time.Duration def qapi = api.queryApi() def exprs = qapi.exprs() def sales = qapi.tables().datamart("Standard_Sales_Data") // Example: “From 30 days ago until today” as a reusable building block def today = exprs.dateOnlyToday() def thirtyDaysAgo = today.minus(Duration.ofDays(30)) Expression dateFilter = exprs.and( sales.getAt("InvoiceDate").greaterOrEqual(thirtyDaysAgo), sales.getAt("InvoiceDate").lessOrEqual(today) ) return qapi.source( sales, [sales["CustomerId"], sales["InvoiceDate"], sales["InvoicePrice"]], dateFilter ).stream { it.toList() }

Found an issue in documentation? Write to us.