Date range grammar
In order to make filtering by dates and date ranges easier on the end-user, Fibery report uses a custom domain specific language to represent dates and date ranges. The syntax allows a user to specify either a static date or a dynamic date range using plain English statements.
Arbitrary Dates
Dates can be easily and quickly specified without any knowledge of the DSL by simply inserting a date in either DD-MMMM-YYYY, DD MMMM YYYY, DD-MM-YYYY or DD MM YYYY format.
The Date Spec DSL also includes various keyword elements that can be used to quickly insert dynamic values. In your date specification you may specify today and yesterday to get the appropriate date value. These date values will always parse in relation to the current day, allowing you to specify a date or date range of, or relative to, these dates.
Periods
Periods in the date spec DSL is where the majority of the magic happens. The DSL understands various time periods, as outlined in the chart below. These time periods can be referenced either aligned to their appropriate boundaries (calendar months, full weeks, quarters, etc.) or arbitrarily aligned to a particular day (the past month, past week, etc.).
Period | Aligned value | Arbitrary value |
---|---|---|
day | a day | a day |
week | iso week (Mon - Sun) | 7 days |
month | calendar month (1st day start) | 30 days |
quarter | calendar quarter (Q1, Q2, etc.) | 90 days |
year | calendar year (Jan 1 - Dec 31) | 365 days |
Grammar usage
Periods can be referenced, as mentioned earlier, either aligned to an appropriate date boundary or arbitrarily aligned. When using an aligned period, the period fits to the calendar representation of that period. For example, an aligned month starts on the 1st day and ends on the last, whereas an arbitrary month would represent 30 days starting or ending on a particular day.
LAST and THIS statements
The last keyword creates a period aligned to the last period represented. Consider the following examples:
DSL statement | value |
---|---|
last week | the last full calendar week starting from Monday |
last month` | the last full month, starting from the 1st | |
last quarter | the last full quarter |
last year | the last full year |
User can specify period interval exactly. For example, last 3 weeks
, last 8 months
and etc.
this keyword is an alias for last and can be used instead of it.
PREVIOUS statement
The previous keyword creates a range whose starts with first day of the period before the current period and continues for period length. Consider the following examples:
DSL statement | value |
---|---|
previous week | starts at 12:00:00 AM on the first day of the week before the current week and continues for seven days |
previous month | starts at 12:00:00 AM on the first day of the month before the current month and continues for all the days of that month |
previous quarter | starts at 12:00:00 AM on the first day of the calendar quarter before the current calendar quarter and continues to the end of that quarter |
previous year | starts at 12:00:00 AM on January 1 of the year before the current year and continues through the end of December 31 of that year |
User can specify period interval exactly. For example, previous 3 weeks
, previous 8 months
and etc.
BETWEEN statements
The between keyword allows you to specify a date range or minimum and maximum values to filter on with more power and precision. The full format for this statement is BETWEEN date AND date
where both dates are some representation of a date (this can be an arbitrary date, keyword or period).
ago keyword can be used inside between to specify date more precisely.
Consider the following examples:
DSL statement | value |
---|---|
between 6 quarters ago and 2 months ago | starts at 12:00:00 AM on the first day of the calendar quarter 6 quarters before the current calendar quarter and continues until to the first day of the calendar month 2 months before the current calendar month |
between 1 January 2016 and today | between Jan 1, 2013 and today |
FROM and TO statements
from and to allow user to specify ranges without minimum or maximum values.
Consider the following examples:
DSL statement | value |
---|---|
from 1 Jan 2010 | starts at 1 Jan 2010 till now |
to 1 Jan 2012 | ends with 1 Jan 2012 |
Receiving Parsed Dates
The date range grammar parses an input date with each use of a filter that utilizes a date-type field. These dates are provided to application connectors as a dictionary object representing a date range. User-input dates and date ranges are timezone-naive.
Date always will be parsed as date range. Even if user enters a single date in a field, this date will be parsed and further represented as a dictionary object with _min
equal to start of the date and _max
equal to end of the date.
If a user enters a date range with no defined minimum or maximum, such as would be the case when using the FROM
or TO
keywords, _min
and _max
keys will not be present and the dictionary will have only _min
or _max
as its single key-value pair.
_min
and _max
represented as a string in ISO-8601 format.