Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- VIEW: delivery_attempt {
- # DEVELOPER
- # Created BY: Pedro Passarelli
- # Maintained BY: Lucas Pereira
- # Created DATE: 08/11/2018
- # Business Goal: Calculate the service level achievement FOR E-commerce package's delivery attempts.
- #VIEW DEFINITION
- label: "Delivery Attempt"
- derived_table: {
- # persist_for: "4 hours"
- # distribution_style: all
- sql:
- WITH
- package_entry AS ( -- add this directly from package view
- SELECT task.package_id AS package_id,
- MIN(CASE WHEN task.type = 'Confirmação' AND task.status = 'Completa com sucesso' THEN completed_at
- ELSE NULL
- END) AS date
- FROM ${task.SQL_TABLE_NAME} AS task
- GROUP BY 1),
- delivery_attempt AS ( --table that filters only what we consider as a valid attempt (which is based on the type of the task and status of its ack
- SELECT dispatch.n1pk_dispatch_id AS id,
- dispatch.package_id AS package_id,
- dispatch.completed_at AS completed_date,
- dispatch.ack_status AS status, --check name
- ROW_NUMBER () OVER
- (PARTITION BY package_id
- ORDER BY completed_at ASC) AS number,
- CASE WHEN ack_status IN ('Destinatário ausente', 'Endereço sem complemento')
- -- AND number BETWEEN 1 AND 2 --Athena does not support referencing a previously defined field
- AND ROW_NUMBER () OVER
- (PARTITION BY package_id
- ORDER BY completed_at ASC) BETWEEN 1 AND 2
- THEN 'Re-envio automático' --packages with unsuccessful 1st or 2nd delivery attempts with these statuses should be automatically re-dispatched
- WHEN ack_status = 'Realizado com sucesso'
- THEN 'Pacote finalizado'
- ELSE 'Tratativa' --packages that have attempts with other statuses or unsucessful 3rd (or more) attempts should wait
- END AS next_attempt_action
- FROM ${dispatch.SQL_TABLE_NAME} AS dispatch --check name
- WHERE ack_status IN ( 'Realizado com sucesso',
- 'Endereço errado',
- 'Endereço sem complemento',
- 'Destinatário ausente',
- 'Destinatário não encontrado',
- 'Recusado')), --pegar o task_type = d AND waypoint.role = ra
- deadline_kickoff AS ( --table that determines which date we should use for calculating the deadline for each one of the package's delivery attempt
- SELECT package_entry.package_id AS package_id,
- COALESCE(delivery_attempt.NUMBER, 1) AS delivery_attempt_number,
- CASE WHEN COALESCE(delivery_attempt.NUMBER, 1) = 1--delivery_attempt.number = 1 --Athena does not support referencing a previously defined field
- THEN package_entry.DATE --1st attempt should always use entry_date
- WHEN LAG(delivery_attempt.next_attempt_action, 1) OVER --when its an automatic re-dispatch, we should use the completed_date from the prior attempt
- (PARTITION BY package_entry.package_id
- ORDER BY delivery_attempt.completed_date) = 'Re-envio automático'
- THEN LAG(delivery_attempt.completed_date, 1) OVER
- (PARTITION BY package_entry.package_id
- ORDER BY delivery_attempt.completed_date)
- ELSE NULL --when the package is delivered or it is pending interation from the company, we do not have a deadline for a new attempt
- END AS DATE
- FROM package_entry
- LEFT OUTER JOIN delivery_attempt
- ON package_entry.package_id = delivery_attempt.package_id
- GROUP BY package_entry.package_id,
- delivery_attempt.NUMBER,
- package_entry.DATE,
- delivery_attempt.next_attempt_action,
- delivery_attempt.completed_date),
- city_slo AS (
- SELECT package.n1pk_package_id AS package_id,
- destination.city AS city,
- destination.state AS state, -- According to what we discussed, we can actually do the filtering by state.
- CASE WHEN package.system_slo = 'D1' THEN
- (CASE WHEN package_entry.DATE BETWEEN FROM_ISO8601_TIMESTAMP('2018-11-19') AND FROM_ISO8601_TIMESTAMP('2018-12-31') --Considering the period of 19/11~31/12
- THEN (CASE WHEN state IN ('SP', 'RJ', 'MG', 'PR')
- THEN 'D2'
- WHEN state IN ('RS', 'DF', 'GO')
- THEN 'D3'
- WHEN state IN ('BA', 'CE', 'PE', 'AM')
- THEN 'D4'
- END)
- ELSE --Changes the SLO from cities which have different rules, but D1.
- (CASE WHEN state IN ('RS', 'DF', 'GO')
- THEN 'D2'
- WHEN state IN ('BA', 'CE', 'PE', 'AM')
- THEN 'D3'
- ELSE 'D1'
- END)
- END)
- ELSE 'D0' --Redundant information, but it's easier to visualize on this way.
- END AS agreed_slo
- FROM ${base_package.SQL_TABLE_NAME} AS package
- JOIN loggi.dispatch_destination AS destination
- ON package.fk_destination_id = destination.id
- JOIN package_entry AS package_entry
- ON package_entry.package_id = package.n1pk_package_id
- ),
- ex_holiday AS (
- SELECT deadline_kickoff.package_id AS package_id,
- deadline_kickoff.delivery_attempt_number AS delivery_attempt_number,
- deadline_kickoff.DATE AS deadline_kickoff,
- city_slo.agreed_slo AS agreed_slo,
- city_slo.city AS city,
- -- Using Athena:
- (CASE WHEN DOW(deadline_kickoff.DATE) BETWEEN 1 AND 5 --Calculates the deadline for a first attempt on D0
- AND HOUR(deadline_kickoff.DATE) < 20
- THEN DATE_ADD('hour', 22, DATE_ADD('day', 0, DATE_TRUNC('day',deadline_kickoff.DATE))) --if on monday - friday (before 8pm), due date is same day
- WHEN DOW(deadline_kickoff.DATE) BETWEEN 1 AND 4
- AND HOUR(deadline_kickoff.DATE) >= 20
- THEN DATE_ADD('hour', 22, DATE_ADD('day', 1, DATE_TRUNC('day',deadline_kickoff.DATE))) --if on monday - thursday (after 8pm), due date is next day
- WHEN (DOW(deadline_kickoff.DATE) = 5
- AND HOUR(deadline_kickoff.DATE) >= 20)
- OR DOW(deadline_kickoff.DATE) BETWEEN 6 AND 7
- THEN DATE_ADD('hour', 22, DATE_ADD('week', 1, DATE_TRUNC('week',deadline_kickoff.DATE))) --if on saturday - sunday or friday (after 8pm), due date is next Monday
- ELSE NULL
- END) AS deadline_zero,
- (CASE WHEN DOW(deadline_kickoff.DATE) BETWEEN 1 AND 5 --Calculates the deadline for a first attempt on D1
- AND HOUR(deadline_kickoff.DATE) < 13
- THEN DATE_ADD('hour', 22, DATE_ADD('day', 0, DATE_TRUNC('day',deadline_kickoff.DATE))) --if on monday - friday (before 1pm), due date is same day
- WHEN DOW(deadline_kickoff.DATE) BETWEEN 1 AND 4
- AND HOUR(deadline_kickoff.DATE) >= 13
- THEN DATE_ADD('hour', 22, DATE_ADD('day', 1, DATE_TRUNC('day',deadline_kickoff.DATE))) --if on monday - thursday (after 1pm), due date is next day
- WHEN (DOW(deadline_kickoff.DATE) = 5
- AND HOUR(deadline_kickoff.DATE) >= 13)
- OR DOW(deadline_kickoff.DATE) BETWEEN 6 AND 7
- THEN DATE_ADD('hour', 22, DATE_ADD('week', 1, DATE_TRUNC('week',deadline_kickoff.DATE))) --if on saturday - sunday or friday (after 1pm), due date is next Monday
- ELSE NULL
- END) AS deadline_one,
- (CASE WHEN DOW(deadline_kickoff.DATE) BETWEEN 1 AND 4
- THEN DATE_ADD('hour', 22, DATE_ADD('day', 1, DATE_TRUNC('day',deadline_kickoff.DATE))) --if on monday - thursday, due date is next day
- WHEN DOW(deadline_kickoff.DATE) BETWEEN 5 AND 7
- THEN DATE_ADD('hour', 22, DATE_ADD('week', 1, DATE_TRUNC('week',deadline_kickoff.DATE))) --if on friday - sunday, due date is next Monday
- ELSE NULL
- END) AS deadline_redispatch,
- (CASE
- WHEN city_slo.agreed_slo = 'D0'
- THEN (CASE WHEN DOW(deadline_kickoff.DATE) BETWEEN 1 AND 5 --Calculates the deadline for a first attempt on D0
- AND HOUR(deadline_kickoff.DATE) < 20
- THEN DATE_ADD('hour', 22, DATE_ADD('day', 0, DATE_TRUNC('day',deadline_kickoff.DATE))) --if on monday - friday (before 8pm), due date is same day
- WHEN DOW(deadline_kickoff.DATE) BETWEEN 1 AND 4
- AND HOUR(deadline_kickoff.DATE) >= 20
- THEN DATE_ADD('hour', 22, DATE_ADD('day', 1, DATE_TRUNC('day',deadline_kickoff.DATE))) --if on monday - thursday (after 8pm), due date is next day
- WHEN (DOW(deadline_kickoff.DATE) = 5
- AND HOUR(deadline_kickoff.DATE) >= 20)
- OR DOW(deadline_kickoff.DATE) BETWEEN 6 AND 7
- THEN DATE_ADD('hour', 22, DATE_ADD('week', 1, DATE_TRUNC('week',deadline_kickoff.DATE))) --if on saturday - sunday or friday (after 8pm), due date is next Monday
- ELSE NULL
- END)
- WHEN city_slo.agreed_slo = 'D1'
- THEN (CASE WHEN DOW(deadline_kickoff.DATE) BETWEEN 1 AND 5 --Calculates the deadline for a first attempt on D1
- AND HOUR(deadline_kickoff.DATE) < 13
- THEN DATE_ADD('hour', 22, DATE_ADD('day', 0, DATE_TRUNC('day',deadline_kickoff.DATE))) --if on monday - friday (before 1pm), due date is same day
- WHEN DOW(deadline_kickoff.DATE) BETWEEN 1 AND 4
- AND HOUR(deadline_kickoff.DATE) >= 13
- THEN DATE_ADD('hour', 22, DATE_ADD('day', 1, DATE_TRUNC('day',deadline_kickoff.DATE))) --if on monday - thursday (after 1pm), due date is next day
- WHEN (DOW(deadline_kickoff.DATE) = 5
- AND HOUR(deadline_kickoff.DATE) >= 13)
- OR DOW(deadline_kickoff.DATE) BETWEEN 6 AND 7
- THEN DATE_ADD('hour', 22, DATE_ADD('week', 1, DATE_TRUNC('week',deadline_kickoff.DATE))) --if on saturday - sunday or friday (after 1pm), due date is next Monday
- ELSE NULL
- END)
- WHEN city_slo.agreed_slo = 'D2'
- THEN (CASE WHEN DOW(deadline_kickoff.DATE) BETWEEN 1 AND 4 --Calculates the deadline for a first attempt on D2
- AND HOUR(deadline_kickoff.DATE) < 13
- THEN DATE_ADD('hour', 22, DATE_ADD('day', 1, DATE_TRUNC('day',deadline_kickoff.DATE))) --if on monday - thursday (before 1pm), due date is next day
- WHEN DOW(deadline_kickoff.DATE) BETWEEN 1 AND 3
- AND HOUR(deadline_kickoff.DATE) >= 13
- THEN DATE_ADD('hour', 22, DATE_ADD('day', 2, DATE_TRUNC('day',deadline_kickoff.DATE))) --if on sunday - wednesday (after 1pm), due date is 2 days after kickoff
- WHEN (DOW(deadline_kickoff.DATE) = 4
- AND HOUR(deadline_kickoff.DATE) >= 13) OR
- (DOW(deadline_kickoff.DATE) = 5
- AND HOUR(deadline_kickoff.DATE) < 13)
- THEN DATE_ADD('hour', 22, DATE_ADD('week', 1, DATE_TRUNC('week',deadline_kickoff.DATE))) -- if on thursday (after 1pm) or friday (before 1pm), then the deadline will be set off on next Monday.
- WHEN
- (DOW(deadline_kickoff.DATE) = 5
- AND HOUR(deadline_kickoff.DATE) >= 13)
- OR DOW(deadline_kickoff.DATE) BETWEEN 6 AND 7
- THEN DATE_ADD('hour', 22, DATE_ADD('day', 1, (DATE_ADD('week', 1, DATE_TRUNC('week',deadline_kickoff.DATE))))) --if on saturday - sunday or friday (after 1pm), due date is next Tuesday
- ELSE NULL
- END)
- WHEN city_slo.agreed_slo = 'D3'
- THEN (CASE WHEN DOW(deadline_kickoff.DATE) BETWEEN 1 AND 3 --Calculates the deadline for a first attempt on D1
- AND HOUR(deadline_kickoff.DATE) < 13
- THEN DATE_ADD('hour', 22, DATE_ADD('day', 2, DATE_TRUNC('day',deadline_kickoff.DATE))) --if on monday - wedneday (before 1pm), due date is 2 days after kickoff
- WHEN DOW(deadline_kickoff.DATE) BETWEEN 1 AND 2
- AND HOUR(deadline_kickoff.DATE) >= 13
- OR DOW(deadline_kickoff.DATE) = 7
- THEN DATE_ADD('hour', 22, DATE_ADD('day', 3, DATE_TRUNC('day',deadline_kickoff.DATE))) --if on sunday or monday - tuesday (after 1pm), due date 3 days after kickoff
- WHEN (DOW(deadline_kickoff.DATE) = 3
- AND HOUR(deadline_kickoff.DATE) >= 13)
- OR (DOW(deadline_kickoff.DATE) = 4
- AND HOUR(deadline_kickoff.DATE) < 13)
- THEN DATE_ADD('hour', 22, DATE_ADD('week', 1, DATE_TRUNC('week',deadline_kickoff.DATE))) --if on wednesday (after 1pm) or thursday (before 1pm), due date is on next Monday.
- WHEN (DOW(deadline_kickoff.DATE) = 4
- AND HOUR(deadline_kickoff.DATE) >= 13)
- OR (DOW(deadline_kickoff.DATE) = 5
- AND HOUR(deadline_kickoff.DATE) < 13)
- THEN DATE_ADD('hour', 22, DATE_ADD('day', 1, (DATE_ADD('week', 1, DATE_TRUNC('week',deadline_kickoff.DATE))))) --if on thursday (after 1pm) or friday (before 1pm), due date is next Tuesday
- WHEN (DOW(deadline_kickoff.DATE) = 5
- AND HOUR(deadline_kickoff.DATE) >= 13)
- OR DOW(deadline_kickoff.DATE) = 6
- THEN DATE_ADD('hour', 22, DATE_ADD('day', 2, (DATE_ADD('week', 1, DATE_TRUNC('week',deadline_kickoff.DATE))))) --if on saturday or friday (after 1pm), due date is next Wednesday
- ELSE NULL
- END)
- WHEN city_slo.agreed_slo = 'D4'
- THEN (CASE WHEN DOW(deadline_kickoff.DATE) BETWEEN 1 AND 2 --Calculates the deadline for a first attempt on D1
- AND HOUR(deadline_kickoff.DATE) < 13
- THEN DATE_ADD('hour', 22, DATE_ADD('day', 3, DATE_TRUNC('day',deadline_kickoff.DATE))) --if on monday - tuesday (before 1pm), due date is 3 days after kickoff
- WHEN DOW(deadline_kickoff.DATE) = 1
- AND HOUR(deadline_kickoff.DATE) >= 13
- OR DOW(deadline_kickoff.DATE) = 7
- THEN DATE_ADD('hour', 22, DATE_ADD('day', 4, DATE_TRUNC('day',deadline_kickoff.DATE))) --if on sunday - monday (after 1pm), due date is 4 days after kickoff
- WHEN DOW(deadline_kickoff.DATE) = 2
- AND HOUR(deadline_kickoff.DATE) >= 13
- OR DOW(deadline_kickoff.DATE) = 3
- AND HOUR(deadline_kickoff.DATE) < 13
- THEN DATE_ADD('hour', 22, DATE_ADD('week', 1, DATE_TRUNC('week',deadline_kickoff.DATE))) --if on tuesday (after 1pm) or wednesday (before 1pm), due date is next Monday.
- WHEN DOW(deadline_kickoff.DATE) = 3
- AND HOUR(deadline_kickoff.DATE) >= 13
- OR DOW(deadline_kickoff.DATE) = 4
- AND HOUR(deadline_kickoff.DATE) < 13
- THEN DATE_ADD('hour', 22, DATE_ADD('day', 1, (DATE_ADD('week', 1, DATE_TRUNC('week',deadline_kickoff.DATE))))) --if on wednesday (after 1pm) or thursday (before 1pm), due date is next Tuesday.
- WHEN DOW(deadline_kickoff.DATE) = 4
- AND HOUR(deadline_kickoff.DATE) >= 13
- OR DOW(deadline_kickoff.DATE) = 5
- AND HOUR(deadline_kickoff.DATE) < 13
- THEN DATE_ADD('hour', 22, DATE_ADD('day', 2, (DATE_ADD('week', 1, DATE_TRUNC('week',deadline_kickoff.DATE))))) --if on thrusday (after 1pm) or friday (before 1pm), due date is next Wednesday
- WHEN (DOW(deadline_kickoff.DATE) = 5
- AND HOUR(deadline_kickoff.DATE) >= 13)
- OR DOW(deadline_kickoff.DATE) = 6
- THEN DATE_ADD('hour', 22, DATE_ADD('day', 3, (DATE_ADD('week', 1, DATE_TRUNC('week',deadline_kickoff.DATE))))) --if on saturday or friday (after 1pm), due date is next Thursday
- END)
- WHEN delivery_attempt_number > 1
- THEN (CASE WHEN DOW(deadline_kickoff.DATE) BETWEEN 1 AND 4
- THEN DATE_ADD('hour', 22, DATE_ADD('day', 1, DATE_TRUNC('day',deadline_kickoff.DATE))) --if on monday - thursday, due date is next day
- WHEN DOW(deadline_kickoff.DATE) BETWEEN 5 AND 7
- THEN DATE_ADD('hour', 22, DATE_ADD('week', 1, DATE_TRUNC('week',deadline_kickoff.DATE))) --if on friday - sunday, due date is next Monday
- ELSE NULL
- END)
- END) AS deadline
- FROM deadline_kickoff
- JOIN city_slo AS city_slo
- ON deadline_kickoff.package_id = city_slo.package_id
- JOIN ${base_package.SQL_TABLE_NAME} AS package
- ON deadline_kickoff.package_id = package.n1pk_package_id),
- --As Holidays were inserted on Athena database, then we can try to use it!
- holiday_final AS (
- SELECT ex_holiday.package_id AS package_id,
- ex_holiday.delivery_attempt_number AS delivery_attempt_number, --adding to make sure every attempt has its own deadline
- CASE WHEN DATE_TRUNC('day', FROM_ISO8601_TIMESTAMP(holidays.holiday_date) AT TIME ZONE 'America/Sao_Paulo')
- BETWEEN DATE_ADD('DAY', -1, DATE_TRUNC('day',ex_holiday.deadline_kickoff)) AND DATE_ADD('DAY', -1, DATE_TRUNC('day',ex_holiday.deadline)) --Using the fact that the differences betwwen UTC and Sao Paulo timezone makes the equivalence to happen in the day before the deadline
- THEN (CASE WHEN DOW(ex_holiday.deadline) = 5 --When it's Friday and a holiday, so the deadline must be delayed to Monday
- THEN DATE_ADD('week', 1, DATE_TRUNC('week', ex_holiday.deadline))--Just copying the code - dunno if it's correct
- ELSE DATE_ADD('day', 1, DATE_TRUNC('day',ex_holiday.deadline))
- END) --Just copying -> ELSE: Just add 1 day more for the deadline
- ELSE ex_holiday.deadline
- END AS deadline_holiday
- FROM ex_holiday
- LEFT JOIN holidays ON DATE_TRUNC('day', FROM_ISO8601_TIMESTAMP(holidays.holiday_date) AT TIME ZONE 'America/Sao_Paulo') = DATE_ADD('DAY', -1, DATE_TRUNC('day',ex_holiday.deadline))
- )
- SELECT ex_holiday.package_id AS n2pk_package_id,
- ex_holiday.delivery_attempt_number AS n2pk_delivery_attempt_number,
- package_entry.DATE AS package_entry_date,
- ex_holiday.agreed_slo AS agreed_slo,
- deadline_kickoff.DATE AS deadline_kickoff,
- ex_holiday.deadline_zero AS deadline_zero,
- ex_holiday.deadline_one AS deadline_one,
- ex_holiday.deadline_redispatch AS deadline_redispatch,
- --ex_holiday.deadline AS deadline,
- holiday_final.deadline_holiday AS deadline,
- delivery_attempt.id AS task_id,
- delivery_attempt.completed_date AS completed_at,
- CASE WHEN delivery_attempt.completed_date > holiday_final.deadline_holiday--ex_holiday.deadline
- OR (delivery_attempt.completed_date IS NULL
- AND holiday_final.deadline_holiday /*ex_holiday.deadline*/ < NOW() AT TIME ZONE 'America/Sao_Paulo')
- THEN 'Fora do prazo'
- WHEN delivery_attempt.completed_date <= holiday_final.deadline_holiday--ex_holiday.deadline
- THEN 'Dentro do prazo'
- ELSE NULL
- END AS task_sla_achievement,
- ex_holiday.city AS city,
- delivery_attempt.STATUS AS STATUS,
- package.STATUS AS package_status
- FROM ex_holiday
- JOIN package_entry
- ON ex_holiday.package_id = package_entry.package_id
- JOIN deadline_kickoff
- ON ex_holiday.package_id = deadline_kickoff.package_id AND ex_holiday.delivery_attempt_number = deadline_kickoff.delivery_attempt_number
- JOIN ${base_package.SQL_TABLE_NAME} AS package
- ON ex_holiday.package_id = package.n1pk_package_id
- LEFT OUTER JOIN delivery_attempt
- ON ex_holiday.package_id = delivery_attempt.package_id AND ex_holiday.delivery_attempt_number = delivery_attempt.NUMBER
- JOIN holiday_final
- ON holiday_final.package_id = ex_holiday.package_id AND ex_holiday.delivery_attempt_number = holiday_final.delivery_attempt_number --Adding delivery_attempt_number to make sure every attempt has its own deadline
- ;;
- }
- #DIMENSIONS------------------------------------------------------------------
- dimension: n2pk_package_id {
- # Author: Pedro Passarelli
- # DATE: 2018-11-08
- # Output example:
- # Notes:
- # LAST Modified BY: Pedro
- label: "Package ID"
- description: "Shows the identification number of the package."
- TYPE: NUMBER
- SQL: ${TABLE}.n2pk_package_id ;;
- }
- dimension: n2pk_delivery_attempt_number {
- # Author: Pedro Passarelli
- # DATE: 2018-11-08
- # Output example:
- # Notes:
- # LAST Modified BY: Pedro
- label: "Number"
- description: "Shows the number of this delivery attempt in the package lifecycle"
- TYPE: NUMBER
- SQL: ${TABLE}.n2pk_delivery_attempt_number ;;
- }
- dimension: agreed_slo {
- # Author: Pedro Passarelli
- # DATE: 2018-11-08
- # Output example: D2
- # Notes: Differs FROM base_package.system_slo
- # LAST Modified BY: Lucas
- label: "Agreed SLO"
- view_label: "Package"
- description: "Shows the SLO (Service Level Objective) agreed with companies, considering rules for each city."
- TYPE: string
- SQL: ${TABLE}.agreed_slo ;;
- }
- dimension: city {
- # Author: Lucas Pereira
- # DATE: 2018-11-26
- # Output example:
- # Notes: This dimension IS used TO filtering purposes ON the Explore.
- # LAST Modified BY: Lucas
- label: "City"
- description: "Shows the city which the delivery is taken place."
- TYPE: string
- SQL: ${TABLE}.city ;;
- suggestions: [
- "São Paulo",
- "Rio de Janeiro",
- "Belo Horizonte",
- "Curitiba",
- "Campinas",
- "São José dos Campos",
- "Ribeirão Preto",
- "Santos",
- "Porto Alegre",
- "Brasília",
- "Goiânia",
- "Salvador",
- "Fortaleza",
- "Recife",
- "Manaus"
- ]
- }
- dimension_group: completed {
- # Author: Pedro Passarelli
- # DATE: 2018-11-08
- # Output example:
- # Notes:
- # LAST Modified BY: Pedro
- label: "Completed"
- description: "Date in which the delivery attempt is considered completed. This date is compared with the deadline to determine if the attempt is within SLA or not"
- TYPE: TIME
- timeframes: [TIME, DATE, week, MONTH, YEAR, hour_of_day, time_of_day, day_of_week, raw]
- datatype: TIMESTAMP
- SQL: ${TABLE}.completed_at ;;
- }
- dimension_group: deadline {
- # Author: Pedro Passarelli
- # DATE: 2018-11-08
- # Output example:
- # Notes:
- # LAST Modified BY: Pedro
- label: "Deadline"
- description: "Limit date for a delivery attempt to happen in order for being considered within SLA"
- TYPE: TIME
- timeframes: [TIME, DATE, week, MONTH, YEAR, hour_of_day, time_of_day, day_of_week, raw]
- datatype: TIMESTAMP
- SQL: ${TABLE}.deadline ;;
- }
- dimension_group: deadline_kickoff {
- # Author: Pedro Passarelli
- # DATE: 2018-11-08
- # Output example:
- # Notes:
- # LAST Modified BY: Pedro
- label: "Deadline Kickoff"
- description: "Date in which the deadline for a delivery attempt starts running"
- TYPE: TIME
- timeframes: [TIME, DATE, week, MONTH, YEAR, hour_of_day, time_of_day, day_of_week, raw]
- datatype: TIMESTAMP
- SQL: ${TABLE}.deadline_kickoff ;;
- }
- dimension_group: package_entry {
- # Author: Pedro Passarelli
- # DATE: 2018-11-08
- # Output example:
- # Notes:
- # LAST Modified BY: Pedro
- label: "Package Entry"
- description: "Date in which the package is considered Loggi's responsability. Considered for determining first attempt deadline date"
- TYPE: TIME
- timeframes: [TIME, DATE, week, MONTH, YEAR, hour_of_day, time_of_day, day_of_week, raw]
- datatype: TIMESTAMP
- SQL: ${TABLE}.package_entry_date ;;
- }
- dimension: STATUS {
- # Author: Pedro Passarelli
- # DATE: 2018-11-08
- # Output example:
- # Notes:
- # LAST Modified BY: Pedro
- label: "Delivery Attempt Status"
- description: "Status of the attempt, i.e 'Realizado com sucesso', 'Endereço errado', etc"
- TYPE: string
- SQL: ${TABLE}.STATUS ;;
- }
- dimension: task_id {
- # Author: Pedro Passarelli
- # DATE: 2018-11-08
- # Output example:
- # Notes: Although we shoud NOT have duplicates OF this FIELD IS this VIEW, this IS NOT the PRIMARY KEY AS there should be LINES IN which this FIELD IS NULL
- # LAST Modified BY: Pedro
- label: "Task ID"
- description: "Shows the identification number of the task that corresponds to the delivery attempt."
- TYPE: NUMBER
- SQL: ${TABLE}.n2pk_package_id ;;
- }
- dimension: task_sla_achievement {
- # Author: Pedro Passarelli
- # DATE: 2018-11-08
- # Output example:
- # Notes:
- # LAST Modified BY: Pedro
- label: "Delivery Attempt SLA"
- description: "Describes whether a delivery attempt happened within its deadline or not. Possible values are 'Dentro do prazo', 'Fora do prazo' or NULL (when there is no deadline defined)"
- TYPE: string
- SQL: ${TABLE}.task_sla_achievement ;;
- }
- #FIELD SETS------------------------------------------------------------------
- SET: business_user_dimensions {
- FIELDS: [
- n2pk_delivery_attempt_number,
- agreed_slo,
- city,
- deadline_kickoff_date,
- deadline_kickoff_day_of_week,
- deadline_kickoff_hour_of_day,
- deadline_kickoff_month,
- deadline_kickoff_raw,
- deadline_kickoff_time,
- deadline_kickoff_time_of_day,
- deadline_kickoff_week,
- deadline_kickoff_year,
- deadline_date,
- deadline_day_of_week,
- deadline_hour_of_day,
- deadline_month,
- deadline_raw,
- deadline_time,
- deadline_time_of_day,
- deadline_week,
- deadline_year
- ]
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement