2024-03-13 15:47:58 +01:00
|
|
|
version: 2
|
|
|
|
|
|
2024-03-13 11:09:22 +01:00
|
|
|
models:
|
|
|
|
|
- name: dates
|
|
|
|
|
description: |
|
|
|
|
|
A dates dimension. Each record represents one calendar day.
|
|
|
|
|
|
2024-03-13 15:47:58 +01:00
|
|
|
All othe columns have handy representations of the date, its subcomponents, and other relative dates.
|
2024-03-13 11:09:22 +01:00
|
|
|
|
|
|
|
|
This table is generated with the dbt date package: https://hub.getdbt.com/calogica/dbt_date/latest/.
|
|
|
|
|
columns:
|
|
|
|
|
- name: date_day
|
|
|
|
|
data_type: date
|
|
|
|
|
description: The date this record represents. All relative dates are relative to this. All derived date components are derived from this.
|
|
|
|
|
|
|
|
|
|
- name: prior_date_day
|
|
|
|
|
data_type: date
|
|
|
|
|
description: The day before date day.
|
|
|
|
|
|
|
|
|
|
- name: next_date_day
|
|
|
|
|
data_type: date
|
|
|
|
|
description: The day after date day.
|
|
|
|
|
|
|
|
|
|
- name: prior_year_date_day
|
|
|
|
|
data_type: date
|
|
|
|
|
description: The same day of the same month, but in the previous year. If date day is Feb 29th, this col returns Feb 28th.
|
|
|
|
|
|
|
|
|
|
- name: prior_year_over_year_date_day
|
|
|
|
|
data_type: date
|
|
|
|
|
description: The day placed 365 days before the date day. Behaves a bit funny with leap years.
|
|
|
|
|
|
|
|
|
|
- name: day_of_week
|
|
|
|
|
data_type: integer
|
|
|
|
|
description: The day of the week as a number, were Monday is 1 and Sunday is 7.
|
|
|
|
|
|
|
|
|
|
- name: day_of_week_name
|
|
|
|
|
data_type: text
|
|
|
|
|
description: The full name of the day of the week.
|
|
|
|
|
|
|
|
|
|
- name: day_of_week_name_short
|
|
|
|
|
data_type: text
|
|
|
|
|
description: The day of the week as a 3 digit shortened version.
|
|
|
|
|
|
|
|
|
|
- name: day_of_month
|
|
|
|
|
data_type: integer
|
|
|
|
|
description: The day of the month as a number.
|
|
|
|
|
|
|
|
|
|
- name: day_of_year
|
|
|
|
|
data_type: integer
|
|
|
|
|
description: The day of the year as a number, where January 1st is 1 and December 31st is 365/366.
|
|
|
|
|
|
|
|
|
|
- name: week_start_date
|
|
|
|
|
data_type: date
|
|
|
|
|
description: |
|
|
|
|
|
The full date for the first day of the week of date day.
|
|
|
|
|
|
|
|
|
|
It considers Sunday to be the first day of the week.
|
|
|
|
|
|
|
|
|
|
- name: week_end_date
|
|
|
|
|
data_type: date
|
|
|
|
|
description: |
|
|
|
|
|
The full date for the last day of the week of date day.
|
|
|
|
|
|
|
|
|
|
It considers Saturday to be the last day of the week.
|
|
|
|
|
|
|
|
|
|
- name: prior_year_week_start_date
|
|
|
|
|
data_type: date
|
|
|
|
|
description: Same as week_start_date, but for the same date day in the previous year.
|
|
|
|
|
|
|
|
|
|
- name: prior_year_week_end_date
|
|
|
|
|
data_type: date
|
|
|
|
|
description: Same as week_end_date, but for the same date day in the previous year.
|
|
|
|
|
|
|
|
|
|
- name: week_of_year
|
|
|
|
|
data_type: integer
|
|
|
|
|
description: The week of the year as a number, where the first week is 1 and the last week is 52/53.
|
|
|
|
|
|
|
|
|
|
- name: iso_week_start_date
|
|
|
|
|
data_type: date
|
|
|
|
|
description: |
|
|
|
|
|
The full date for the first day of the week of date day, according to ISO specs.
|
|
|
|
|
|
|
|
|
|
It considers Monday to be the first day of the week.
|
|
|
|
|
|
|
|
|
|
Read more here: https://en.wikipedia.org/wiki/ISO_week_date
|
|
|
|
|
|
|
|
|
|
- name: iso_week_end_date
|
|
|
|
|
data_type: date
|
|
|
|
|
description: |
|
|
|
|
|
The full date for the last day of the week of date day, according to ISO specs.
|
|
|
|
|
|
|
|
|
|
It considers Sunday to be the last day of the week.
|
|
|
|
|
|
|
|
|
|
Read more here: https://en.wikipedia.org/wiki/ISO_week_date
|
|
|
|
|
|
|
|
|
|
- name: prior_year_iso_week_start_date
|
|
|
|
|
data_type: date
|
|
|
|
|
description: "Read more here: https://en.wikipedia.org/wiki/ISO_week_date"
|
|
|
|
|
|
|
|
|
|
- name: prior_year_iso_week_end_date
|
|
|
|
|
data_type: date
|
|
|
|
|
description: "Read more here: https://en.wikipedia.org/wiki/ISO_week_date"
|
|
|
|
|
|
|
|
|
|
- name: iso_week_of_year
|
|
|
|
|
data_type: integer
|
|
|
|
|
description: "Read more here: https://en.wikipedia.org/wiki/ISO_week_date"
|
|
|
|
|
|
|
|
|
|
- name: prior_year_week_of_year
|
|
|
|
|
data_type: integer
|
|
|
|
|
description: ""
|
|
|
|
|
|
|
|
|
|
- name: prior_year_iso_week_of_year
|
|
|
|
|
data_type: integer
|
|
|
|
|
description: "Read more here: https://en.wikipedia.org/wiki/ISO_week_date"
|
|
|
|
|
|
|
|
|
|
- name: month_of_year
|
|
|
|
|
data_type: integer
|
|
|
|
|
description: The month date day belongs to as a number (1 for Jan, 12 for Dec).
|
|
|
|
|
|
|
|
|
|
- name: month_name
|
|
|
|
|
data_type: text
|
|
|
|
|
description: The month date day belongs to in English.
|
|
|
|
|
|
|
|
|
|
- name: month_name_short
|
|
|
|
|
data_type: text
|
|
|
|
|
description: The month date day belongs to as a 3 digit shortened version.
|
|
|
|
|
|
|
|
|
|
- name: month_start_date
|
|
|
|
|
data_type: date
|
|
|
|
|
description: The full date for the first day of the month.
|
|
|
|
|
|
|
|
|
|
- name: month_end_date
|
|
|
|
|
data_type: date
|
|
|
|
|
description: The full date for the last day of the month.
|
|
|
|
|
|
|
|
|
|
- name: prior_year_month_start_date
|
|
|
|
|
data_type: date
|
|
|
|
|
description: The full date for the first day of the same month last year.
|
|
|
|
|
|
|
|
|
|
- name: prior_year_month_end_date
|
|
|
|
|
data_type: date
|
|
|
|
|
description: The full date for the last day of the same month last year.
|
|
|
|
|
|
|
|
|
|
- name: quarter_of_year
|
|
|
|
|
data_type: integer
|
|
|
|
|
description: The quarter date day belongs to as a number (1 for Q1, 4 for Q4).
|
|
|
|
|
|
|
|
|
|
- name: quarter_start_date
|
|
|
|
|
data_type: date
|
|
|
|
|
description: The full date for the first date of the quarter.
|
|
|
|
|
|
|
|
|
|
- name: quarter_end_date
|
|
|
|
|
data_type: date
|
|
|
|
|
description: The full date for the last date of the quarter.
|
|
|
|
|
|
|
|
|
|
- name: year_number
|
|
|
|
|
data_type: integer
|
|
|
|
|
description: The year date day belongs to as a number.
|
|
|
|
|
|
|
|
|
|
- name: year_start_date
|
|
|
|
|
data_type: date
|
|
|
|
|
description: The full date for the first day of the year.
|
|
|
|
|
|
|
|
|
|
- name: year_end_date
|
|
|
|
|
data_type: date
|
|
|
|
|
description: The full date for the last day of the year.
|
2024-06-19 11:52:28 +02:00
|
|
|
|
|
|
|
|
- name: daily_currency_exchange_rates
|
|
|
|
|
description:
|
|
|
|
|
This model holds a lot of data on currency exchange rates. The time
|
|
|
|
|
granularity is daily. Each record holds a currency pair for a specific
|
|
|
|
|
day, source and version.
|
|
|
|
|
|
|
|
|
|
Actual rates are sourced from xe.com data. The `guessed` and `forecast`
|
|
|
|
|
versions are built by simply 'pushing' the first/last exchange rate on
|
|
|
|
|
record. Basically, wherever we don't have data for a date, we pick the
|
|
|
|
|
closest actual data point that comes from xe.com. Bear in mind this means
|
|
|
|
|
that `forecast` version records will change on a daily basis as actual
|
|
|
|
|
data moves forwards, meaning you shouldn't assume your money amounts
|
|
|
|
|
converted in the future should always stay put.
|
|
|
|
|
|
|
|
|
|
Note that, given the dimensionality, getting a simple time series for a
|
|
|
|
|
currency pair will require a bit of filtering.
|
|
|
|
|
|
|
|
|
|
Reverse rates are explicit. This means that, for any given day and any
|
|
|
|
|
given currency pair, you will find two records with opposite from/to
|
|
|
|
|
positions. So, for 2024-01-01, you will find both a EUR->USD record and a
|
|
|
|
|
USD->EUR record with the opposite rate (1/rate).
|
|
|
|
|
columns:
|
|
|
|
|
- name: id_exchange_rate
|
|
|
|
|
data_type: text
|
|
|
|
|
description: A unique ID for the record, derived from concatenating the
|
|
|
|
|
currencies, date, source and version. Currency order is relevant
|
|
|
|
|
(EURUSD != USDEUR).
|
|
|
|
|
tests:
|
|
|
|
|
- not_null
|
|
|
|
|
- unique
|
|
|
|
|
- name: from_currency
|
|
|
|
|
data_type: character
|
|
|
|
|
description: The source currency, represented as an ISO 4217 code.
|
|
|
|
|
tests:
|
|
|
|
|
- not_null
|
|
|
|
|
- name: to_currency
|
|
|
|
|
data_type: character
|
|
|
|
|
description: The target currency, represented as an ISO 4217 code.
|
|
|
|
|
tests:
|
|
|
|
|
- not_null
|
|
|
|
|
- name: rate
|
|
|
|
|
data_type: numeric
|
|
|
|
|
description: >-
|
|
|
|
|
The exchange rate, represented as the units of the target currency
|
|
|
|
|
that one unit of source currency gets you. So, from_currency=USD to
|
|
|
|
|
to_currency=PLN with rate=4.2 should be read as '1 US Dollar buys me
|
|
|
|
|
4.2 Polish Zlotys'.
|
|
|
|
|
|
|
|
|
|
For same currency pairs (EUR to EUR, USD to USD, etc). The rate will
|
|
|
|
|
always be one.
|
|
|
|
|
|
|
|
|
|
The rate can be smaller than one, but can't be negative.
|
|
|
|
|
tests:
|
|
|
|
|
- not_negative_or_zero
|
|
|
|
|
- not_null
|
|
|
|
|
- name: rate_date_utc
|
|
|
|
|
data_type: date
|
|
|
|
|
description: The date in which the rate record is relevant.
|
|
|
|
|
tests:
|
|
|
|
|
- not_null
|
|
|
|
|
- name: source
|
|
|
|
|
data_type: text
|
|
|
|
|
description:
|
|
|
|
|
Where is the data coming from. Records that are composed from
|
|
|
|
|
making assumptions on real data will contain `_inferred`.
|
|
|
|
|
- name: rate_version
|
|
|
|
|
data_type: text
|
|
|
|
|
description:
|
|
|
|
|
The version of the rate. This can be one of `actual` (the rate is a
|
|
|
|
|
reality fact), `forecast` (the rate sits in the future and is a guess
|
|
|
|
|
in nature) or `guess` (the rate sits in the past and is a guess in
|
|
|
|
|
nature). Note that one currency pair can have multiple rate versions
|
|
|
|
|
on the same date.
|
|
|
|
|
tests:
|
|
|
|
|
- accepted_values:
|
|
|
|
|
values:
|
|
|
|
|
- guess
|
|
|
|
|
- actual
|
|
|
|
|
- forecast
|
|
|
|
|
- not_null
|
|
|
|
|
- name: updated_at_utc
|
|
|
|
|
data_type: timestamp with time zone
|
|
|
|
|
description:
|
|
|
|
|
For external sources, this will be the point in time when the
|
|
|
|
|
information was obtained from them. For stuff we make up here in the
|
|
|
|
|
DWH, this will be the point in time when we made the assumption.
|
|
|
|
|
tests:
|
|
|
|
|
- not_null
|
|
|
|
|
|
|
|
|
|
- name: simple_exchange_rates
|
|
|
|
|
description: >-
|
|
|
|
|
A simplified vision of exchange rates, derived from
|
|
|
|
|
`int_daily_currency_exchange_rates`. Come here if you don't want to
|
|
|
|
|
understand nuances and complexities and just want to convert rates.
|
|
|
|
|
|
|
|
|
|
The time granularity is daily. Each record holds a currency pair for a
|
|
|
|
|
specific day. You will only find one conversion rate per currency pair and
|
|
|
|
|
date.
|
|
|
|
|
tests:
|
|
|
|
|
- dbt_utils.unique_combination_of_columns:
|
|
|
|
|
combination_of_columns:
|
|
|
|
|
- from_currency
|
|
|
|
|
- to_currency
|
|
|
|
|
- rate_date_utc
|
|
|
|
|
columns:
|
|
|
|
|
- name: from_currency
|
|
|
|
|
data_type: character
|
|
|
|
|
description: The source currency, represented as an ISO 4217 code.
|
|
|
|
|
tests:
|
|
|
|
|
- not_null
|
|
|
|
|
- name: to_currency
|
|
|
|
|
data_type: character
|
|
|
|
|
description: The source currency, represented as an ISO 4217 code.
|
|
|
|
|
tests:
|
|
|
|
|
- not_null
|
|
|
|
|
- name: rate
|
|
|
|
|
data_type: numeric
|
|
|
|
|
description: The target currency, represented as an ISO 4217 code.
|
|
|
|
|
tests:
|
|
|
|
|
- not_null
|
|
|
|
|
- name: rate_date_utc
|
|
|
|
|
data_type: date
|
|
|
|
|
description: The date in which the rate record is relevant.
|
|
|
|
|
tests:
|
|
|
|
|
- not_null
|
|
|
|
|
- name: updated_at_utc
|
|
|
|
|
data_type: timestamp with time zone
|
|
|
|
|
description:
|
|
|
|
|
For external sources, this will be the point in time when the
|
|
|
|
|
information was obtained from them. For stuff we make up here in the
|
|
|
|
|
DWH, this will be the point in time when we made the assumption.
|
|
|
|
|
tests:
|
|
|
|
|
- not_null
|