The When Dimension1 plays a fundamental role in Multidimensional Systems, it allows us to express when the analysed focus of attention have occurred.
The purpose of the when
package is to assist in the implementation of the When Dimension. In particular, it supports the generation of tables with the granularity needed (second, minute, hour, date, week, month, quarter, semester or year) in Multidimensional Systems implemented on a ROLAP (Relational On-Line Analytical Processing) star database. It relies on the functions offered by the lubridate
package to obtain the components from the date and time.
Installation
You can install the released version of when
from CRAN with:
install.packages("when")
And the development version from GitHub with:
# install.packages("devtools")
devtools::install_github("josesamos/when")
Example
To obtain a table with dates we indicate the start and end date. Alternatively we can indicate the set of dates to consider. We can select the level of detail, the attributes to include or the language of the literals for day and month names. In the following example we indicate the language because it is different from the one we have in the computer’s operating system.
library(when)
date <-
when(
locale = Sys.setlocale("LC_TIME", "English"),
start = lubridate::today(),
end = lubridate::today() + lubridate::years(5)
) |>
generate_table() |>
get_table()
The first and last rows of the obtained result are shown below.
pander::pandoc.table(rbind(head(date, 5), tail(date, 5)),
split.table = Inf)
id | date | month_day | week_day | day_name | day_num_name | year_week | week | year_month | month | month_name | month_num_name | year |
---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | 2024-01-09 | 09 | 2 | Tuesday | 2-Tuesday | 2024-02 | 02 | 2024-01 | 01 | January | 01-January | 2024 |
2 | 2024-01-10 | 10 | 3 | Wednesday | 3-Wednesday | 2024-02 | 02 | 2024-01 | 01 | January | 01-January | 2024 |
3 | 2024-01-11 | 11 | 4 | Thursday | 4-Thursday | 2024-02 | 02 | 2024-01 | 01 | January | 01-January | 2024 |
4 | 2024-01-12 | 12 | 5 | Friday | 5-Friday | 2024-02 | 02 | 2024-01 | 01 | January | 01-January | 2024 |
5 | 2024-01-13 | 13 | 6 | Saturday | 6-Saturday | 2024-02 | 02 | 2024-01 | 01 | January | 01-January | 2024 |
1824 | 2029-01-05 | 05 | 5 | Friday | 5-Friday | 2029-01 | 01 | 2029-01 | 01 | January | 01-January | 2029 |
1825 | 2029-01-06 | 06 | 6 | Saturday | 6-Saturday | 2029-01 | 01 | 2029-01 | 01 | January | 01-January | 2029 |
1826 | 2029-01-07 | 07 | 7 | Sunday | 7-Sunday | 2029-01 | 01 | 2029-01 | 01 | January | 01-January | 2029 |
1827 | 2029-01-08 | 08 | 1 | Monday | 1-Monday | 2029-02 | 02 | 2029-01 | 01 | January | 01-January | 2029 |
1828 | 2029-01-09 | 09 | 2 | Tuesday | 2-Tuesday | 2029-02 | 02 | 2029-01 | 01 | January | 01-January | 2029 |
If we want a table with time, we indicate the type using a parameter. By default we get all the seconds of a day but we can also configure a different period or level of detail.
time <-
when(type = 'time', start = "08:00", end = "17:00") |>
generate_table() |>
get_table()
The start and end of the result table is shown below.
pander::pandoc.table(rbind(head(time, 5), tail(time, 5)),
split.table = Inf)
id | time | hour | minute | second | day_part |
---|---|---|---|---|---|
1 | 08:00:00 | 08 | 00 | 00 | Morning |
2 | 08:00:01 | 08 | 00 | 01 | Morning |
3 | 08:00:02 | 08 | 00 | 02 | Morning |
4 | 08:00:03 | 08 | 00 | 03 | Morning |
5 | 08:00:04 | 08 | 00 | 04 | Morning |
32397 | 16:59:56 | 16 | 59 | 56 | Afternoon |
32398 | 16:59:57 | 16 | 59 | 57 | Afternoon |
32399 | 16:59:58 | 16 | 59 | 58 | Afternoon |
32400 | 16:59:59 | 16 | 59 | 59 | Afternoon |
32401 | 17:00:00 | 17 | 00 | 00 | Evening |
The day_part
attribute is predefined in English. Literals or associated hours can be changed using a configuration function.
In addition to obtaining them as tibble
, we can export the tables to files in csv or xlsx format. They can also be exported directly to any Relational DBMS.