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.
You can install the released version of when
from CRAN with:
install.packages("when")
And the development version from GitHub with:
# install.packages("devtools")
::install_github("josesamos/when") devtools
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.
::pandoc.table(rbind(head(date, 5), tail(date, 5)),
pandersplit.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-08 | 08 | 1 | Monday | 1-Monday | 2024-02 | 02 | 2024-01 | 01 | January | 01-January | 2024 |
2 | 2024-01-09 | 09 | 2 | Tuesday | 2-Tuesday | 2024-02 | 02 | 2024-01 | 01 | January | 01-January | 2024 |
3 | 2024-01-10 | 10 | 3 | Wednesday | 3-Wednesday | 2024-02 | 02 | 2024-01 | 01 | January | 01-January | 2024 |
4 | 2024-01-11 | 11 | 4 | Thursday | 4-Thursday | 2024-02 | 02 | 2024-01 | 01 | January | 01-January | 2024 |
5 | 2024-01-12 | 12 | 5 | Friday | 5-Friday | 2024-02 | 02 | 2024-01 | 01 | January | 01-January | 2024 |
1824 | 2029-01-04 | 04 | 4 | Thursday | 4-Thursday | 2029-01 | 01 | 2029-01 | 01 | January | 01-January | 2029 |
1825 | 2029-01-05 | 05 | 5 | Friday | 5-Friday | 2029-01 | 01 | 2029-01 | 01 | January | 01-January | 2029 |
1826 | 2029-01-06 | 06 | 6 | Saturday | 6-Saturday | 2029-01 | 01 | 2029-01 | 01 | January | 01-January | 2029 |
1827 | 2029-01-07 | 07 | 7 | Sunday | 7-Sunday | 2029-01 | 01 | 2029-01 | 01 | January | 01-January | 2029 |
1828 | 2029-01-08 | 08 | 1 | Monday | 1-Monday | 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.
::pandoc.table(rbind(head(time, 5), tail(time, 5)),
pandersplit.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.
Often called “Time Dimension” or “Date Dimension”.↩︎