SQL Saas translation

Translation Velocity

Translation Velocity model for saas translation.

source-preserved

Blocks

translation_velocity.sql · 119 lines
inferred
-- models/translation_velocity.sql
{{ config(materialized='view') }}

WITH date_lookup AS
  (
      SELECT dhour
            , EXTRACT(dow FROM dhour) AS day_of_week
            , SUM(CASE
                    WHEN EXTRACT(dow FROM dhour) NOT IN (6,0)
                    THEN 1
                    ELSE 0
                  END) OVER (ORDER BY dhour rows unbounded preceding) AS hour_seq
      FROM
      (
        SELECT DISTINCT(DATE_TRUNC('hour', DATEADD(hour, s + s2 * 10 + s3 * 100 + s4 * 1000 + s5 * 10000 + 1, (DATE_TRUNC('year', getDate()) + interval '-3 year') ))) AS dhour
                    from (SELECT 0 AS s UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 ) AS s,
                    (SELECT 0 AS s2 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 ) AS s2,
                    (SELECT 0 AS s3 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 ) AS s3,
                    (SELECT 0 AS s4 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 ) AS s4,
                    (SELECT 0 AS s5 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 ) AS s5
      )
  )
  SELECT
      authorize.site_id
    , authorize.target_locale_id
    , authorize.hashcode
    , authorize.date_authorized
    , assign.date_assigned
    , actions.date_translation
    , actions.date_edited
    , actions.date_reviewed
    , actions.date_published
    , authorize.request_url
    , str.request_id
    , str.word_count
    , authorize_lookup.hour_seq AS authorized_seq_num
    , assign_lookup.hour_seq AS assigned_seq_num
    , review_lookup.hour_seq AS reviewed_seq_num
    , edit_lookup.hour_seq AS edited_seq_num
    , published_lookup.hour_seq AS published_seq_num
    , (authorize.site_id || '|' || CAST(authorize.target_locale_id AS VARCHAR(5)) || '|' || CAST(authorize.hashcode AS VARCHAR(32))) AS action_key
  FROM
    (
      SELECT site_id, target_locale_id, hashcode, request_url, MIN(created) as date_authorized
      FROM {{ this }}.log_authorize_translations
      GROUP BY site_id, target_locale_id, request_url, hashcode
    ) authorize
  LEFT JOIN
    (
     SELECT site_id, target_locale_id, hashcode, MIN(created) as date_assigned
     FROM {{ this }}.log_assign_translations
     GROUP BY site_id, target_locale_id, hashcode
    ) assign
  ON assign.site_id = authorize.site_id AND assign.target_locale_id = authorize.target_locale_id AND assign.hashcode = authorize.hashcode
  LEFT JOIN
    (
     SELECT lwa.site_id, lwa.target_locale_id, lwa.hashcode
          , MIN(CASE WHEN lwa.action_type = 5 THEN lwa.created ELSE NULL END) as date_translation
          , MIN(CASE WHEN lwa.action_type = 6 THEN lwa.created ELSE NULL END) as date_reviewed
          , MIN(CASE WHEN lwa.action_type = 7 THEN lwa.created ELSE NULL END) as date_edited
          , MIN(CASE WHEN slookup.workflow_step_class_id = 5 THEN lwa.created ELSE NULL END) as date_published
     FROM {{ this }}.log_workflow_action lwa
       INNER JOIN {{ this }}.workflow_tracking_steps_lookup slookup
       ON slookup.workflow_tracking_step_lookup_id = lwa.target_workflow_tracking_step_lookup_id
       INNER JOIN {{ this }}.workflow_step_classes wsc
       ON wsc.workflow_step_class_id = slookup.workflow_step_class_id
     GROUP BY lwa.site_id, lwa.target_locale_id, lwa.hashcode
    ) actions
  ON actions.site_id = authorize.site_id AND actions.target_locale_id = authorize.target_locale_id AND actions.hashcode = authorize.hashcode
  INNER JOIN {{ this }}.strings str
  ON str.site_id = authorize.site_id AND str.hashcode = authorize.hashcode
  LEFT JOIN date_lookup as authorize_lookup
  ON authorize_lookup.dhour = DATE_TRUNC('hour', date_authorized)
  LEFT JOIN date_lookup as assign_lookup
  ON assign_lookup.dhour = DATE_TRUNC('hour', date_assigned)
  LEFT JOIN date_lookup as review_lookup
  ON review_lookup.dhour = DATE_TRUNC('hour', date_reviewed)
  LEFT JOIN date_lookup as edit_lookup
  ON edit_lookup.dhour = DATE_TRUNC('hour', date_edited)
  LEFT JOIN date_lookup as published_lookup
  ON published_lookup.dhour = DATE_TRUNC('hour', date_published)
  LEFT JOIN {{ this }}.log_smart_match lsm
  ON lsm.site_id = authorize.site_id AND lsm.target_locale_id = authorize.target_locale_id AND lsm.hashcode = authorize.hashcode
  LEFT JOIN
    (
      SELECT site_id, hashcode, MAX(created) as last_action_date
      FROM {{ this }}.log_string_active_history
      GROUP BY site_id, hashcode
    ) lsah
  ON lsah.site_id = authorize.site_id AND lsah.hashcode = authorize.hashcode
  WHERE lsm.log_match_id IS NULL
    AND (lsah.last_action_date IS NULL OR lsah.last_action_date < authorize.date_authorized)

# models/schema.yml
version: 2

models:
  - name: translation_velocity
    columns:
      - name: translation_key
      - name: site_id
      - name: target_locale_id
      - name: hashcode
      - name: authorized_to_published_in_hours
      - name: authorized_to_published_in_hours_no_weekends
      - name: authorized_to_assigned_in_hours
      - name: authorized_to_translated_in_hours
      - name: assigned_to_published_in_hours
      - name: assigned_to_published_in_hours_no_weekends
      - name: assigned_to_translated_in_hours
      - name: translated_to_edited_in_hours
      - name: edited_to_reviwed_in_hours
      - name: edited_to_published_in_hours
      - name: edited_to_published_in_hours_no_weekends
      - name: reviewed_to_published_in_hours
      - name: reviewed_to_published_in_hours_no_weekends
      - name: word_count
      - name: request_url
      - name: request_id

Assumptions

  • materialized='view' is the default; no persist hint found.
  • schema.yml columns come from view dimensions; a primary_key dimension gets unique + not_null tests.
translation_velocity.sql · 89 lines
source-preserved validation: not checked
WITH date_lookup AS
  (
      SELECT dhour
            , EXTRACT(dow FROM dhour) AS day_of_week
            , SUM(CASE
                    WHEN EXTRACT(dow FROM dhour) NOT IN (6,0)
                    THEN 1
                    ELSE 0
                  END) OVER (ORDER BY dhour rows unbounded preceding) AS hour_seq
      FROM
      (
        SELECT DISTINCT(DATE_TRUNC('hour', DATEADD(hour, s + s2 * 10 + s3 * 100 + s4 * 1000 + s5 * 10000 + 1, (DATE_TRUNC('year', getDate()) + interval '-3 year') ))) AS dhour
                    from (SELECT 0 AS s UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 ) AS s,
                    (SELECT 0 AS s2 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 ) AS s2,
                    (SELECT 0 AS s3 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 ) AS s3,
                    (SELECT 0 AS s4 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 ) AS s4,
                    (SELECT 0 AS s5 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 ) AS s5
      )
  )
  SELECT
      authorize.site_id
    , authorize.target_locale_id
    , authorize.hashcode
    , authorize.date_authorized
    , assign.date_assigned
    , actions.date_translation
    , actions.date_edited
    , actions.date_reviewed
    , actions.date_published
    , authorize.request_url
    , str.request_id
    , str.word_count
    , authorize_lookup.hour_seq AS authorized_seq_num
    , assign_lookup.hour_seq AS assigned_seq_num
    , review_lookup.hour_seq AS reviewed_seq_num
    , edit_lookup.hour_seq AS edited_seq_num
    , published_lookup.hour_seq AS published_seq_num
    , (authorize.site_id || '|' || CAST(authorize.target_locale_id AS VARCHAR(5)) || '|' || CAST(authorize.hashcode AS VARCHAR(32))) AS action_key
  FROM
    (
      SELECT site_id, target_locale_id, hashcode, request_url, MIN(created) as date_authorized
      FROM ${TABLE}.log_authorize_translations
      GROUP BY site_id, target_locale_id, request_url, hashcode
    ) authorize
  LEFT JOIN
    (
     SELECT site_id, target_locale_id, hashcode, MIN(created) as date_assigned
     FROM ${TABLE}.log_assign_translations
     GROUP BY site_id, target_locale_id, hashcode
    ) assign
  ON assign.site_id = authorize.site_id AND assign.target_locale_id = authorize.target_locale_id AND assign.hashcode = authorize.hashcode
  LEFT JOIN
    (
     SELECT lwa.site_id, lwa.target_locale_id, lwa.hashcode
          , MIN(CASE WHEN lwa.action_type = 5 THEN lwa.created ELSE NULL END) as date_translation
          , MIN(CASE WHEN lwa.action_type = 6 THEN lwa.created ELSE NULL END) as date_reviewed
          , MIN(CASE WHEN lwa.action_type = 7 THEN lwa.created ELSE NULL END) as date_edited
          , MIN(CASE WHEN slookup.workflow_step_class_id = 5 THEN lwa.created ELSE NULL END) as date_published
     FROM ${TABLE}.log_workflow_action lwa
       INNER JOIN ${TABLE}.workflow_tracking_steps_lookup slookup
       ON slookup.workflow_tracking_step_lookup_id = lwa.target_workflow_tracking_step_lookup_id
       INNER JOIN ${TABLE}.workflow_step_classes wsc
       ON wsc.workflow_step_class_id = slookup.workflow_step_class_id
     GROUP BY lwa.site_id, lwa.target_locale_id, lwa.hashcode
    ) actions
  ON actions.site_id = authorize.site_id AND actions.target_locale_id = authorize.target_locale_id AND actions.hashcode = authorize.hashcode
  INNER JOIN ${TABLE}.strings str
  ON str.site_id = authorize.site_id AND str.hashcode = authorize.hashcode
  LEFT JOIN date_lookup as authorize_lookup
  ON authorize_lookup.dhour = DATE_TRUNC('hour', date_authorized)
  LEFT JOIN date_lookup as assign_lookup
  ON assign_lookup.dhour = DATE_TRUNC('hour', date_assigned)
  LEFT JOIN date_lookup as review_lookup
  ON review_lookup.dhour = DATE_TRUNC('hour', date_reviewed)
  LEFT JOIN date_lookup as edit_lookup
  ON edit_lookup.dhour = DATE_TRUNC('hour', date_edited)
  LEFT JOIN date_lookup as published_lookup
  ON published_lookup.dhour = DATE_TRUNC('hour', date_published)
  LEFT JOIN ${TABLE}.log_smart_match lsm
  ON lsm.site_id = authorize.site_id AND lsm.target_locale_id = authorize.target_locale_id AND lsm.hashcode = authorize.hashcode
  LEFT JOIN
    (
      SELECT site_id, hashcode, MAX(created) as last_action_date
      FROM ${TABLE}.log_string_active_history
      GROUP BY site_id, hashcode
    ) lsah
  ON lsah.site_id = authorize.site_id AND lsah.hashcode = authorize.hashcode
  WHERE lsm.log_match_id IS NULL
    AND (lsah.last_action_date IS NULL OR lsah.last_action_date < authorize.date_authorized)
translation_velocity.view.lkml · 300 lines
inferred
view: translation_velocity {
  derived_table: {
    sql: WITH date_lookup AS
  (
      SELECT dhour
            , EXTRACT(dow FROM dhour) AS day_of_week
            , SUM(CASE
                    WHEN EXTRACT(dow FROM dhour) NOT IN (6,0)
                    THEN 1
                    ELSE 0
                  END) OVER (ORDER BY dhour rows unbounded preceding) AS hour_seq
      FROM
      (
        SELECT DISTINCT(DATE_TRUNC('hour', DATEADD(hour, s + s2 * 10 + s3 * 100 + s4 * 1000 + s5 * 10000 + 1, (DATE_TRUNC('year', getDate()) + interval '-3 year') ))) AS dhour
                    from (SELECT 0 AS s UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 ) AS s,
                    (SELECT 0 AS s2 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 ) AS s2,
                    (SELECT 0 AS s3 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 ) AS s3,
                    (SELECT 0 AS s4 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 ) AS s4,
                    (SELECT 0 AS s5 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 ) AS s5
      )
  )
  SELECT
      authorize.site_id
    , authorize.target_locale_id
    , authorize.hashcode
    , authorize.date_authorized
    , assign.date_assigned
    , actions.date_translation
    , actions.date_edited
    , actions.date_reviewed
    , actions.date_published
    , authorize.request_url
    , str.request_id
    , str.word_count
    , authorize_lookup.hour_seq AS authorized_seq_num
    , assign_lookup.hour_seq AS assigned_seq_num
    , review_lookup.hour_seq AS reviewed_seq_num
    , edit_lookup.hour_seq AS edited_seq_num
    , published_lookup.hour_seq AS published_seq_num
    , (authorize.site_id || '|' || CAST(authorize.target_locale_id AS VARCHAR(5)) || '|' || CAST(authorize.hashcode AS VARCHAR(32))) AS action_key
  FROM
    (
      SELECT site_id, target_locale_id, hashcode, request_url, MIN(created) as date_authorized
      FROM ${TABLE}.log_authorize_translations
      GROUP BY site_id, target_locale_id, request_url, hashcode
    ) authorize
  LEFT JOIN
    (
     SELECT site_id, target_locale_id, hashcode, MIN(created) as date_assigned
     FROM ${TABLE}.log_assign_translations
     GROUP BY site_id, target_locale_id, hashcode
    ) assign
  ON assign.site_id = authorize.site_id AND assign.target_locale_id = authorize.target_locale_id AND assign.hashcode = authorize.hashcode
  LEFT JOIN
    (
     SELECT lwa.site_id, lwa.target_locale_id, lwa.hashcode
          , MIN(CASE WHEN lwa.action_type = 5 THEN lwa.created ELSE NULL END) as date_translation
          , MIN(CASE WHEN lwa.action_type = 6 THEN lwa.created ELSE NULL END) as date_reviewed
          , MIN(CASE WHEN lwa.action_type = 7 THEN lwa.created ELSE NULL END) as date_edited
          , MIN(CASE WHEN slookup.workflow_step_class_id = 5 THEN lwa.created ELSE NULL END) as date_published
     FROM ${TABLE}.log_workflow_action lwa
       INNER JOIN ${TABLE}.workflow_tracking_steps_lookup slookup
       ON slookup.workflow_tracking_step_lookup_id = lwa.target_workflow_tracking_step_lookup_id
       INNER JOIN ${TABLE}.workflow_step_classes wsc
       ON wsc.workflow_step_class_id = slookup.workflow_step_class_id
     GROUP BY lwa.site_id, lwa.target_locale_id, lwa.hashcode
    ) actions
  ON actions.site_id = authorize.site_id AND actions.target_locale_id = authorize.target_locale_id AND actions.hashcode = authorize.hashcode
  INNER JOIN ${TABLE}.strings str
  ON str.site_id = authorize.site_id AND str.hashcode = authorize.hashcode
  LEFT JOIN date_lookup as authorize_lookup
  ON authorize_lookup.dhour = DATE_TRUNC('hour', date_authorized)
  LEFT JOIN date_lookup as assign_lookup
  ON assign_lookup.dhour = DATE_TRUNC('hour', date_assigned)
  LEFT JOIN date_lookup as review_lookup
  ON review_lookup.dhour = DATE_TRUNC('hour', date_reviewed)
  LEFT JOIN date_lookup as edit_lookup
  ON edit_lookup.dhour = DATE_TRUNC('hour', date_edited)
  LEFT JOIN date_lookup as published_lookup
  ON published_lookup.dhour = DATE_TRUNC('hour', date_published)
  LEFT JOIN ${TABLE}.log_smart_match lsm
  ON lsm.site_id = authorize.site_id AND lsm.target_locale_id = authorize.target_locale_id AND lsm.hashcode = authorize.hashcode
  LEFT JOIN
    (
      SELECT site_id, hashcode, MAX(created) as last_action_date
      FROM ${TABLE}.log_string_active_history
      GROUP BY site_id, hashcode
    ) lsah
  ON lsah.site_id = authorize.site_id AND lsah.hashcode = authorize.hashcode
  WHERE lsm.log_match_id IS NULL
    AND (lsah.last_action_date IS NULL OR lsah.last_action_date < authorize.date_authorized) ;;
  }

  dimension: translation_key {
    sql: ${TABLE}.translation_key ;;
  }

  dimension: site_id {
    type: int
    sql: ${TABLE}.site_id ;;
  }

  dimension: target_locale_id {
    sql: ${TABLE}.target_locale_id ;;
  }

  dimension: hashcode {
    sql: ${TABLE}.hashcode ;;
  }

  dimension: authorized_to_published_in_hours {
    type: number
    sql: DATEDIFF(hour, ${TABLE}.date_authorized, ${TABLE}.date_published) ;;
  }

  dimension: authorized_to_published_in_hours_no_weekends {
    type: number
    sql: ${TABLE}.published_seq_num - ${TABLE}.authorized_seq_num ;;
  }

  dimension: authorized_to_assigned_in_hours {
    type: number
    sql: DATEDIFF(hour, ${TABLE}.date_authorized, ${TABLE}.date_assigned) ;;
  }

  dimension: authorized_to_translated_in_hours {
    type: number
    sql: DATEDIFF(hour, ${TABLE}.date_authorized, ${TABLE}.date_translation) ;;
  }

  dimension: assigned_to_published_in_hours {
    type: number
    sql: DATEDIFF(hour, ${TABLE}.date_assigned, ${TABLE}.date_published) ;;
  }

  dimension: assigned_to_published_in_hours_no_weekends {
    type: number
    sql: ${TABLE}.published_seq_num - ${TABLE}.assigned_seq_num ;;
  }

  dimension: assigned_to_translated_in_hours {
    type: number
    sql: DATEDIFF(hour, ${TABLE}.date_assigned, ${TABLE}.date_translation) ;;
  }

  dimension: translated_to_edited_in_hours {
    type: number
    sql: DATEDIFF(hour, ${TABLE}.date_translation, ${TABLE}.date_edited) ;;
  }

  dimension: edited_to_reviwed_in_hours {
    type: number
    sql: DATEDIFF(hour, ${TABLE}.date_edited, ${TABLE}.date_reviewed) ;;
  }

  dimension: edited_to_published_in_hours {
    type: number
    sql: DATEDIFF(hour, ${TABLE}.date_edited, ${TABLE}.date_published) ;;
  }

  dimension: edited_to_published_in_hours_no_weekends {
    type: number
    sql: ${TABLE}.published_seq_num - ${TABLE}.edited_seq_num ;;
  }

  dimension: reviewed_to_published_in_hours {
    type: number
    sql: DATEDIFF(hour, ${TABLE}.date_reviewed, ${TABLE}.date_published) ;;
  }

  dimension: reviewed_to_published_in_hours_no_weekends {
    type: number
    sql: ${TABLE}.published_seq_num - ${TABLE}.reviewed_seq_num ;;
  }

  dimension: word_count {
    sql: ${TABLE}.word_count ;;
  }

  dimension: request_url {
    sql: ${TABLE}.request_url ;;
  }

  dimension: request_id {
    type: int
    sql: ${TABLE}.request_id ;;
  }

  dimension_group: authorized {
    type: time
    timeframes: [time, date, week, month, dow_num, dom, hod]
    sql: ${TABLE}.date_authorized ;;
  }

  dimension_group: assigned {
    type: time
    timeframes: [time, date, week, month, dow_num, dom, hod]
    sql: ${TABLE}.date_assigned ;;
  }

  dimension_group: translation {
    type: time
    timeframes: [time, date, week, month, dow_num, dom, hod]
    sql: ${TABLE}.date_translation ;;
  }

  dimension_group: published {
    type: time
    timeframes: [time, date, week, month, dow_num, dom, hod]
    sql: ${TABLE}.date_published ;;
  }

  measure: average_authorized_to_published_in_hours {
    type: average
    drill_fields: [detail*]
    sql: CASE
  WHEN ${authorized_to_published_in_hours} < 0
  THEN NULL
  ELSE ${authorized_to_published_in_hours}
END ;;
  }

  measure: average_authorized_to_published_in_hours_no_weekends {
    type: average
    drill_fields: [detail*]
    sql: CASE
  WHEN ${authorized_to_published_in_hours_no_weekends} < 0
  THEN NULL
  ELSE ${authorized_to_published_in_hours_no_weekends}
END ;;
  }

  measure: average_authorized_to_assigned_in_hours {
    type: average
    drill_fields: [detail*]
    sql: CASE
  WHEN ${authorized_to_assigned_in_hours} < 0
  THEN NULL
  ELSE ${authorized_to_assigned_in_hours}
END ;;
  }

  measure: average_assigned_to_published_in_hours {
    type: average
    drill_fields: [detail*]
    sql: CASE
  WHEN ${assigned_to_published_in_hours} < 0
  THEN NULL
  ELSE ${assigned_to_published_in_hours}
END ;;
  }

  measure: average_assigned_to_published_in_hours_no_weekends {
    type: average
    drill_fields: [detail*]
    sql: CASE
  WHEN ${assigned_to_published_in_hours_no_weekends} < 0
  THEN NULL
  ELSE ${assigned_to_published_in_hours_no_weekends}
END ;;
  }

  measure: average_authorized_to_translated_in_hours {
    type: average
    drill_fields: [detail*]
    sql: CASE
  WHEN ${authorized_to_translated_in_hours} < 0
  THEN NULL
  ELSE ${authorized_to_translated_in_hours}
END ;;
  }

  measure: average_edited_to_published_in_hours {
    description: "Show how long takes review step. Works for simple workflow - when edit step placed before review. This can not be used for all cases."
    type: average
    drill_fields: [detail*]
    sql: CASE
  WHEN ${edited_to_published_in_hours} < 0
  THEN NULL
  ELSE ${edited_to_published_in_hours}
END ;;
  }

  measure: average_edited_to_published_in_hours_no_weekends {
    description: "Show how long takes review step withot weekends. Works for simple workflow - when edit step placed before review. This can not be used for all cases."
    type: average
    drill_fields: [detail*]
    sql: CASE
  WHEN ${edited_to_published_in_hours_no_weekends} < 0
  THEN NULL
  ELSE ${edited_to_published_in_hours_no_weekends}
END ;;
  }

  measure: total_word_count {
    type: sum
    drill_fields: [detail*]
    sql: ${word_count} ;;
  }
}
translation_velocity.view.lookml · 270 lines
source-preserved
- view: translation_velocity
  derived_table:
    sql: WITH date_lookup AS
  (
      SELECT dhour
            , EXTRACT(dow FROM dhour) AS day_of_week
            , SUM(CASE
                    WHEN EXTRACT(dow FROM dhour) NOT IN (6,0)
                    THEN 1
                    ELSE 0
                  END) OVER (ORDER BY dhour rows unbounded preceding) AS hour_seq
      FROM
      (
        SELECT DISTINCT(DATE_TRUNC('hour', DATEADD(hour, s + s2 * 10 + s3 * 100 + s4 * 1000 + s5 * 10000 + 1, (DATE_TRUNC('year', getDate()) + interval '-3 year') ))) AS dhour
                    from (SELECT 0 AS s UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 ) AS s,
                    (SELECT 0 AS s2 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 ) AS s2,
                    (SELECT 0 AS s3 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 ) AS s3,
                    (SELECT 0 AS s4 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 ) AS s4,
                    (SELECT 0 AS s5 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 ) AS s5
      )
  )
  SELECT
      authorize.site_id
    , authorize.target_locale_id
    , authorize.hashcode
    , authorize.date_authorized
    , assign.date_assigned
    , actions.date_translation
    , actions.date_edited
    , actions.date_reviewed
    , actions.date_published
    , authorize.request_url
    , str.request_id
    , str.word_count
    , authorize_lookup.hour_seq AS authorized_seq_num
    , assign_lookup.hour_seq AS assigned_seq_num
    , review_lookup.hour_seq AS reviewed_seq_num
    , edit_lookup.hour_seq AS edited_seq_num
    , published_lookup.hour_seq AS published_seq_num
    , (authorize.site_id || '|' || CAST(authorize.target_locale_id AS VARCHAR(5)) || '|' || CAST(authorize.hashcode AS VARCHAR(32))) AS action_key
  FROM
    (
      SELECT site_id, target_locale_id, hashcode, request_url, MIN(created) as date_authorized
      FROM ${TABLE}.log_authorize_translations
      GROUP BY site_id, target_locale_id, request_url, hashcode
    ) authorize
  LEFT JOIN
    (
     SELECT site_id, target_locale_id, hashcode, MIN(created) as date_assigned
     FROM ${TABLE}.log_assign_translations
     GROUP BY site_id, target_locale_id, hashcode
    ) assign
  ON assign.site_id = authorize.site_id AND assign.target_locale_id = authorize.target_locale_id AND assign.hashcode = authorize.hashcode
  LEFT JOIN
    (
     SELECT lwa.site_id, lwa.target_locale_id, lwa.hashcode
          , MIN(CASE WHEN lwa.action_type = 5 THEN lwa.created ELSE NULL END) as date_translation
          , MIN(CASE WHEN lwa.action_type = 6 THEN lwa.created ELSE NULL END) as date_reviewed
          , MIN(CASE WHEN lwa.action_type = 7 THEN lwa.created ELSE NULL END) as date_edited
          , MIN(CASE WHEN slookup.workflow_step_class_id = 5 THEN lwa.created ELSE NULL END) as date_published
     FROM ${TABLE}.log_workflow_action lwa
       INNER JOIN ${TABLE}.workflow_tracking_steps_lookup slookup
       ON slookup.workflow_tracking_step_lookup_id = lwa.target_workflow_tracking_step_lookup_id
       INNER JOIN ${TABLE}.workflow_step_classes wsc
       ON wsc.workflow_step_class_id = slookup.workflow_step_class_id
     GROUP BY lwa.site_id, lwa.target_locale_id, lwa.hashcode
    ) actions
  ON actions.site_id = authorize.site_id AND actions.target_locale_id = authorize.target_locale_id AND actions.hashcode = authorize.hashcode
  INNER JOIN ${TABLE}.strings str
  ON str.site_id = authorize.site_id AND str.hashcode = authorize.hashcode
  LEFT JOIN date_lookup as authorize_lookup
  ON authorize_lookup.dhour = DATE_TRUNC('hour', date_authorized)
  LEFT JOIN date_lookup as assign_lookup
  ON assign_lookup.dhour = DATE_TRUNC('hour', date_assigned)
  LEFT JOIN date_lookup as review_lookup
  ON review_lookup.dhour = DATE_TRUNC('hour', date_reviewed)
  LEFT JOIN date_lookup as edit_lookup
  ON edit_lookup.dhour = DATE_TRUNC('hour', date_edited)
  LEFT JOIN date_lookup as published_lookup
  ON published_lookup.dhour = DATE_TRUNC('hour', date_published)
  LEFT JOIN ${TABLE}.log_smart_match lsm
  ON lsm.site_id = authorize.site_id AND lsm.target_locale_id = authorize.target_locale_id AND lsm.hashcode = authorize.hashcode
  LEFT JOIN
    (
      SELECT site_id, hashcode, MAX(created) as last_action_date
      FROM ${TABLE}.log_string_active_history
      GROUP BY site_id, hashcode
    ) lsah
  ON lsah.site_id = authorize.site_id AND lsah.hashcode = authorize.hashcode
  WHERE lsm.log_match_id IS NULL
    AND (lsah.last_action_date IS NULL OR lsah.last_action_date < authorize.date_authorized)
  fields:
  - dimension: translation_key
    sql: ${TABLE}.translation_key
  - dimension: site_id
    type: int
    sql: ${TABLE}.site_id
  - dimension: target_locale_id
    sql: ${TABLE}.target_locale_id
  - dimension: hashcode
    sql: ${TABLE}.hashcode
  - dimension: authorized_to_published_in_hours
    type: number
    sql: DATEDIFF(hour, ${TABLE}.date_authorized, ${TABLE}.date_published)
  - dimension: authorized_to_published_in_hours_no_weekends
    type: number
    sql: ${TABLE}.published_seq_num - ${TABLE}.authorized_seq_num
  - dimension: authorized_to_assigned_in_hours
    type: number
    sql: DATEDIFF(hour, ${TABLE}.date_authorized, ${TABLE}.date_assigned)
  - dimension: authorized_to_translated_in_hours
    type: number
    sql: DATEDIFF(hour, ${TABLE}.date_authorized, ${TABLE}.date_translation)
  - dimension: assigned_to_published_in_hours
    type: number
    sql: DATEDIFF(hour, ${TABLE}.date_assigned, ${TABLE}.date_published)
  - dimension: assigned_to_published_in_hours_no_weekends
    type: number
    sql: ${TABLE}.published_seq_num - ${TABLE}.assigned_seq_num
  - dimension: assigned_to_translated_in_hours
    type: number
    sql: DATEDIFF(hour, ${TABLE}.date_assigned, ${TABLE}.date_translation)
  - dimension: translated_to_edited_in_hours
    type: number
    sql: DATEDIFF(hour, ${TABLE}.date_translation, ${TABLE}.date_edited)
  - dimension: edited_to_reviwed_in_hours
    type: number
    sql: DATEDIFF(hour, ${TABLE}.date_edited, ${TABLE}.date_reviewed)
  - dimension: edited_to_published_in_hours
    type: number
    sql: DATEDIFF(hour, ${TABLE}.date_edited, ${TABLE}.date_published)
  - dimension: edited_to_published_in_hours_no_weekends
    type: number
    sql: ${TABLE}.published_seq_num - ${TABLE}.edited_seq_num
  - dimension: reviewed_to_published_in_hours
    type: number
    sql: DATEDIFF(hour, ${TABLE}.date_reviewed, ${TABLE}.date_published)
  - dimension: reviewed_to_published_in_hours_no_weekends
    type: number
    sql: ${TABLE}.published_seq_num - ${TABLE}.reviewed_seq_num
  - dimension: word_count
    sql: ${TABLE}.word_count
  - dimension: request_url
    sql: ${TABLE}.request_url
  - dimension: request_id
    type: int
    sql: ${TABLE}.request_id
  - dimension_group: authorized
    type: time
    timeframes:
    - time
    - date
    - week
    - month
    - dow_num
    - dom
    - hod
    sql: ${TABLE}.date_authorized
  - dimension_group: assigned
    type: time
    timeframes:
    - time
    - date
    - week
    - month
    - dow_num
    - dom
    - hod
    sql: ${TABLE}.date_assigned
  - dimension_group: translation
    type: time
    timeframes:
    - time
    - date
    - week
    - month
    - dow_num
    - dom
    - hod
    sql: ${TABLE}.date_translation
  - dimension_group: published
    type: time
    timeframes:
    - time
    - date
    - week
    - month
    - dow_num
    - dom
    - hod
    sql: ${TABLE}.date_published
  - measure: average_authorized_to_published_in_hours
    type: average
    drill_fields:
    - detail*
    sql: CASE
  WHEN ${authorized_to_published_in_hours} < 0
  THEN NULL
  ELSE ${authorized_to_published_in_hours}
END
  - measure: average_authorized_to_published_in_hours_no_weekends
    type: average
    drill_fields:
    - detail*
    sql: CASE
  WHEN ${authorized_to_published_in_hours_no_weekends} < 0
  THEN NULL
  ELSE ${authorized_to_published_in_hours_no_weekends}
END
  - measure: average_authorized_to_assigned_in_hours
    type: average
    drill_fields:
    - detail*
    sql: CASE
  WHEN ${authorized_to_assigned_in_hours} < 0
  THEN NULL
  ELSE ${authorized_to_assigned_in_hours}
END
  - measure: average_assigned_to_published_in_hours
    type: average
    drill_fields:
    - detail*
    sql: CASE
  WHEN ${assigned_to_published_in_hours} < 0
  THEN NULL
  ELSE ${assigned_to_published_in_hours}
END
  - measure: average_assigned_to_published_in_hours_no_weekends
    type: average
    drill_fields:
    - detail*
    sql: CASE
  WHEN ${assigned_to_published_in_hours_no_weekends} < 0
  THEN NULL
  ELSE ${assigned_to_published_in_hours_no_weekends}
END
  - measure: average_authorized_to_translated_in_hours
    type: average
    drill_fields:
    - detail*
    sql: CASE
  WHEN ${authorized_to_translated_in_hours} < 0
  THEN NULL
  ELSE ${authorized_to_translated_in_hours}
END
  - measure: average_edited_to_published_in_hours
    type: average
    description: Show how long takes review step. Works for simple workflow - when edit step placed before review. This can not be used for all cases.
    drill_fields:
    - detail*
    sql: CASE
  WHEN ${edited_to_published_in_hours} < 0
  THEN NULL
  ELSE ${edited_to_published_in_hours}
END
  - measure: average_edited_to_published_in_hours_no_weekends
    type: average
    description: Show how long takes review step withot weekends. Works for simple workflow - when edit step placed before review. This can not be used for all cases.
    drill_fields:
    - detail*
    sql: CASE
  WHEN ${edited_to_published_in_hours_no_weekends} < 0
  THEN NULL
  ELSE ${edited_to_published_in_hours_no_weekends}
END
  - measure: total_word_count
    type: sum
    drill_fields:
    - detail*
    sql: ${word_count}

Contents

  • translation_velocity.sql
  • translation_velocity.sql
  • translation_velocity.view.lkml
  • translation_velocity.view.lookml