diff --git a/CHANGELOG.md b/CHANGELOG.md index 383fb85e..9d15ffba 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +# dbt_zendesk v0.8.2 +## Fixes +- It was brought to our attention that the `dbt_utils.date_trunc` macro only leverages the default arguments of the date_trunc function in the various warehouses. For example, `date_trunc` in Snowflake for the `week` argument produces the starting Monday, while BigQuery produces the starting Sunday. For this package, we want to leverage the start of the week as Sunday. Therefore, logic within the business metric intermediate models has been adjusted to capture the start of the week as Sunday. This was done by leveraging the `week_start` macro within the `dbt-date` package. ([#68](https://github.com/fivetran/dbt_zendesk/pull/68)) # dbt_zendesk v0.8.1 ## Fixes - The `0.7.1` release of the zendesk package introduced a bug within the `zendesk__sla_policy` model that caused duplicate sla records via a [join condition](https://github.com/fivetran/dbt_zendesk/blob/v0.7.1/models/sla_policy/int_zendesk__sla_policy_applied.sql#L48). This join condition has been modified to leverage the more accurate `sla_policy_applied.valid_starting_at` field instead of the `sla_policy_applied.sla_applied_at` which changes for `first_reply_time` slas. ([#67](https://github.com/fivetran/dbt_zendesk/pull/67)) diff --git a/dbt_project.yml b/dbt_project.yml index 3b057cea..eec6bfd5 100644 --- a/dbt_project.yml +++ b/dbt_project.yml @@ -1,5 +1,5 @@ name: 'zendesk' -version: '0.8.1' +version: '0.8.2' config-version: 2 require-dbt-version: [">=1.0.0", "<2.0.0"] diff --git a/integration_tests/dbt_project.yml b/integration_tests/dbt_project.yml index 90b542cf..55ed2344 100644 --- a/integration_tests/dbt_project.yml +++ b/integration_tests/dbt_project.yml @@ -1,7 +1,7 @@ config-version: 2 name: 'zendesk_integration_tests' -version: '0.8.1' +version: '0.8.2' profile: 'integration_tests' diff --git a/models/agent_work_time/int_zendesk__ticket_work_time_business.sql b/models/agent_work_time/int_zendesk__ticket_work_time_business.sql index bf5b355b..294ceb79 100644 --- a/models/agent_work_time/int_zendesk__ticket_work_time_business.sql +++ b/models/agent_work_time/int_zendesk__ticket_work_time_business.sql @@ -39,11 +39,11 @@ with ticket_historical_status as ( select ticket_status_crossed_with_schedule.*, - ({{ fivetran_utils.timestamp_diff( - "" ~ dbt_utils.date_trunc('week', 'ticket_status_crossed_with_schedule.status_schedule_start') ~ "", - 'ticket_status_crossed_with_schedule.status_schedule_start', - 'second') }} /60 - ) as start_time_in_minutes_from_week, + ({{ fivetran_utils.timestamp_diff( + "cast(" ~ dbt_date.week_start('ticket_status_crossed_with_schedule.status_schedule_start','UTC') ~ "as " ~ dbt_utils.type_timestamp() ~ ")", + "cast(ticket_status_crossed_with_schedule.status_schedule_start as " ~ dbt_utils.type_timestamp() ~ ")", + 'second') }} /60 + ) as start_time_in_minutes_from_week, ({{ fivetran_utils.timestamp_diff( 'ticket_status_crossed_with_schedule.status_schedule_start', 'ticket_status_crossed_with_schedule.status_schedule_end', diff --git a/models/reply_times/int_zendesk__ticket_first_reply_time_business.sql b/models/reply_times/int_zendesk__ticket_first_reply_time_business.sql index 6f9850bd..893486d3 100644 --- a/models/reply_times/int_zendesk__ticket_first_reply_time_business.sql +++ b/models/reply_times/int_zendesk__ticket_first_reply_time_business.sql @@ -7,7 +7,8 @@ with ticket_reply_times as ( ), ticket_schedules as ( - select * + select + * from {{ ref('int_zendesk__ticket_schedules') }} ), schedule as ( @@ -37,8 +38,8 @@ with ticket_reply_times as ( min(first_reply_time.agent_responded_at) as agent_responded_at, ({{ fivetran_utils.timestamp_diff( - "" ~ dbt_utils.date_trunc('week', 'ticket_schedules.schedule_created_at') ~ "", - 'ticket_schedules.schedule_created_at', + "cast(" ~ dbt_date.week_start('ticket_schedules.schedule_created_at','UTC') ~ "as " ~ dbt_utils.type_timestamp() ~ ")", + "cast(ticket_schedules.schedule_created_at as " ~ dbt_utils.type_timestamp() ~ ")", 'second') }} /60 ) as start_time_in_minutes_from_week, greatest(0, diff --git a/models/resolution_times/int_zendesk__ticket_first_resolution_time_business.sql b/models/resolution_times/int_zendesk__ticket_first_resolution_time_business.sql index 1d5b7c32..d798ab8e 100644 --- a/models/resolution_times/int_zendesk__ticket_first_resolution_time_business.sql +++ b/models/resolution_times/int_zendesk__ticket_first_resolution_time_business.sql @@ -25,10 +25,10 @@ with ticket_resolution_times_calendar as ( -- bringing this in the determine which schedule (Daylight Savings vs Standard time) to use min(ticket_resolution_times_calendar.first_solved_at) as first_solved_at, - + ({{ fivetran_utils.timestamp_diff( - "" ~ dbt_utils.date_trunc('week', 'ticket_schedules.schedule_created_at') ~ "", - 'ticket_schedules.schedule_created_at', + "cast(" ~ dbt_date.week_start('ticket_schedules.schedule_created_at','UTC') ~ "as " ~ dbt_utils.type_timestamp() ~ ")", + "cast(ticket_schedules.schedule_created_at as " ~ dbt_utils.type_timestamp() ~ ")", 'second') }} /60 ) as start_time_in_minutes_from_week, greatest(0, diff --git a/models/resolution_times/int_zendesk__ticket_full_resolution_time_business.sql b/models/resolution_times/int_zendesk__ticket_full_resolution_time_business.sql index 103b5bd1..7abd100c 100644 --- a/models/resolution_times/int_zendesk__ticket_full_resolution_time_business.sql +++ b/models/resolution_times/int_zendesk__ticket_full_resolution_time_business.sql @@ -25,10 +25,9 @@ with ticket_resolution_times_calendar as ( -- bringing this in the determine which schedule (Daylight Savings vs Standard time) to use min(ticket_resolution_times_calendar.last_solved_at) as last_solved_at, - ({{ fivetran_utils.timestamp_diff( - "" ~ dbt_utils.date_trunc('week', 'ticket_schedules.schedule_created_at') ~ "", - 'ticket_schedules.schedule_created_at', + "cast(" ~ dbt_date.week_start('ticket_schedules.schedule_created_at','UTC') ~ "as " ~ dbt_utils.type_timestamp() ~ ")", + "cast(ticket_schedules.schedule_created_at as " ~ dbt_utils.type_timestamp() ~ ")", 'second') }} /60 ) as start_time_in_minutes_from_week, greatest(0, diff --git a/models/sla_policy/agent_work_time/int_zendesk__agent_work_time_business_hours.sql b/models/sla_policy/agent_work_time/int_zendesk__agent_work_time_business_hours.sql index c3cad2aa..9e2ccbeb 100644 --- a/models/sla_policy/agent_work_time/int_zendesk__agent_work_time_business_hours.sql +++ b/models/sla_policy/agent_work_time/int_zendesk__agent_work_time_business_hours.sql @@ -50,13 +50,11 @@ with agent_work_time_filtered_statuses as ( select ticket_status_crossed_with_schedule.*, - ({{ fivetran_utils.timestamp_diff( - "" ~ dbt_utils.date_trunc( - 'week', - 'ticket_status_crossed_with_schedule.valid_starting_at') ~ "", - 'ticket_status_crossed_with_schedule.valid_starting_at', - 'second') }} /60 - ) as valid_starting_at_in_minutes_from_week, + ({{ fivetran_utils.timestamp_diff( + "cast(" ~ dbt_date.week_start('ticket_status_crossed_with_schedule.valid_starting_at','UTC') ~ "as " ~ dbt_utils.type_timestamp() ~ ")", + "cast(ticket_status_crossed_with_schedule.valid_starting_at as " ~ dbt_utils.type_timestamp() ~ ")", + 'second') }} /60 + ) as valid_starting_at_in_minutes_from_week, ({{ fivetran_utils.timestamp_diff( 'ticket_status_crossed_with_schedule.valid_starting_at', 'ticket_status_crossed_with_schedule.valid_ending_at', diff --git a/models/sla_policy/reply_time/int_zendesk__reply_time_business_hours.sql b/models/sla_policy/reply_time/int_zendesk__reply_time_business_hours.sql index 568a63e1..ebabc995 100644 --- a/models/sla_policy/reply_time/int_zendesk__reply_time_business_hours.sql +++ b/models/sla_policy/reply_time/int_zendesk__reply_time_business_hours.sql @@ -32,12 +32,11 @@ with ticket_schedules as ( select sla_policy_applied.*, ticket_schedules.schedule_id, - ( - {{ fivetran_utils.timestamp_diff( - "" ~ dbt_utils.date_trunc('week', 'sla_policy_applied.sla_applied_at') ~ "", - 'sla_policy_applied.sla_applied_at', - 'second') }} /60 - ) as start_time_in_minutes_from_week, + ({{ fivetran_utils.timestamp_diff( + "cast(" ~ dbt_date.week_start('sla_policy_applied.sla_applied_at','UTC') ~ "as " ~ dbt_utils.type_timestamp() ~ ")", + "cast(sla_policy_applied.sla_applied_at as " ~ dbt_utils.type_timestamp() ~ ")", + 'second') }} /60 + ) as start_time_in_minutes_from_week, schedule_business_hours.total_schedule_weekly_business_minutes from sla_policy_applied left join ticket_schedules on sla_policy_applied.ticket_id = ticket_schedules.ticket_id diff --git a/models/sla_policy/requester_wait_time/int_zendesk__requester_wait_time_business_hours.sql b/models/sla_policy/requester_wait_time/int_zendesk__requester_wait_time_business_hours.sql index 7945c429..79848a86 100644 --- a/models/sla_policy/requester_wait_time/int_zendesk__requester_wait_time_business_hours.sql +++ b/models/sla_policy/requester_wait_time/int_zendesk__requester_wait_time_business_hours.sql @@ -51,12 +51,10 @@ with requester_wait_time_filtered_statuses as ( select ticket_status_crossed_with_schedule.*, ({{ fivetran_utils.timestamp_diff( - "" ~ dbt_utils.date_trunc( - 'week', - 'ticket_status_crossed_with_schedule.valid_starting_at') ~ "", - 'ticket_status_crossed_with_schedule.valid_starting_at', - 'second') }} /60 - ) as valid_starting_at_in_minutes_from_week, + "cast(" ~ dbt_date.week_start('ticket_status_crossed_with_schedule.valid_starting_at','UTC') ~ "as " ~ dbt_utils.type_timestamp() ~ ")", + "cast(ticket_status_crossed_with_schedule.valid_starting_at as " ~ dbt_utils.type_timestamp() ~ ")", + 'second') }} /60 + ) as valid_starting_at_in_minutes_from_week, ({{ fivetran_utils.timestamp_diff( 'ticket_status_crossed_with_schedule.valid_starting_at', 'ticket_status_crossed_with_schedule.valid_ending_at', diff --git a/packages.yml b/packages.yml index 8314b47a..7b4a6cd9 100644 --- a/packages.yml +++ b/packages.yml @@ -1,3 +1,5 @@ packages: - package: fivetran/zendesk_source - version: [">=0.6.0","<0.7.0"] \ No newline at end of file + version: [">=0.6.0","<0.7.0"] + - package: calogica/dbt_date + version: [">=0.5.0", "<0.6.0"] \ No newline at end of file