Análisis con la segunda fecha en Tableau Desktop

Esta es la segunda fase del tutorial y se da por hecho que se han seguido los pasos de la primera fase, Buscar la segunda fecha con Tableau Prep.

En la primera fase hemos tomado nuestro conjunto de datos original y le hemos dado forma para responder a las siguientes preguntas:

  1. ¿Cuántos días transcurrieron entre la primera y la segunda infracción de cada conductor?

  2. Compare los importes de las multas correspondientes a la primera y a la segunda infracción. ¿Existe alguna correlación entre ellos?

  3. En total, ¿qué conductor pagó más? ¿Quién pagó menos?

  4. ¿Cuántos conductores cometieron varios tipos de infracciones?

  5. ¿Cuál fue el importe de multa medio de los conductores que nunca habían asistido a un curso de seguridad vial?

A medida que exploramos estas preguntas, queda claro que existen algunos pros y contras para la primera estructura de datos que hemos creado. Volveremos a Tableau Prep Builder y haremos algunas modificaciones adicionales, y luego veremos cómo afecta al mismo análisis en Tableau Desktop. Por último, veremos un enfoque único de Tableau Desktop del análisis utilizando expresiones de nivel de detalle (LOD) con los datos originales.

El objetivo de este tutorial es presentar varios conceptos en el contexto de un escenario real y tratar varias opciones, sin establecer preceptivamente cuál es la mejor. Al final, debería tener una idea más clara de cómo afecta la estructura de datos a los cálculos y análisis, así como un mejor conocimiento de distintos aspectos de Tableau Prep y de los cálculos en Tableau Desktop.

Nota: para llevar a cabo las tareas de este tutorial, deberá descargar los datos y tener instalado Tableau Prep Builder y, opcionalmente, Tableau Desktop.

Para instalar Tableau Prep y Tableau Desktop antes de continuar con este tutorial, consulte Guía de implementación de Tableau Desktop y Tableau Prep(El enlace se abre en una ventana nueva). También puede descargar las versiones de prueba gratuitas de Tableau Prep(El enlace se abre en una ventana nueva) y Tableau Desktop(El enlace se abre en una ventana nueva).

El conjunto de datos es el resultado del libro de trabajo Driver Infractions.tflx, tal y como se ha creado en la primera fase.

Análisis en Tableau Desktop

Ahora que tenemos los datos configurados, los vamos a trasladar a Tableau Desktop. Algunas de las preguntas son fáciles de responder, pero hay otras que implican algunos (o muchos) cálculos. Pruebe con las siguientes preguntas; puede desplegarlas para obtener información básica sobre cómo proceder si se atasca.

Nota: puede descargar el libro de trabajo Driver Infractions.twbx(El enlace se abre en una ventana nueva) para consultar las soluciones en contexto. Tenga presente que puede haber métodos alternativos de interpretar el análisis o de debatir las respuestas.

1. ¿Cuántos días transcurrieron entre la primera y la segunda infracción de cada conductor?
  1. Para responder a esta pregunta en Tableau Desktop utilizaremos la función DATEDIFF, que consta de tres argumentos: la parte de fecha, la fecha de inicio y la fecha de fin. Como lo que queremos saber son los días que hay entre estos eventos, utilizaremos la parte de fecha "day" (día). Las fechas de inicio y de fin figuran en el conjunto de datos como Fecha de la 1.ª infracción y Fecha de la 2.ª infracción.

  2. El cálculo es el siguiente:

    Tiempo transcurrido entre una infracción y otra = DATEDIFF('day', [1st Infraction Date], [2nd Infraction Date])

  3. Podemos trazarlo en ID de conductor como gráfico de barras. Tenga en cuenta que hay siete conductores que no han cometido una segunda infracción, por lo que habrá siete valores nulos.

    Gráfico de barras de controladores por tiempo entre infracciones

2. Compare los importes de las multas correspondientes a la primera y a la segunda infracción. ¿Existe alguna correlación entre ellos?
  1. Para responder a esta pregunta en Tableau Desktop, crearemos un diagrama de dispersión de Importe de la 1.ª multa y de Importe de la 2.ª multa. Si trasladamos ID de conductor al estante Detalle de la tarjeta Marcas, podemos crear una marca para cada conductor.

  2. Para añadir una línea de tendencia, utilice la pestaña Análisis del panel izquierdo y saque una línea de tendencia lineal. Al pasar el cursor sobre la línea de tendencia, podemos ver que el valor R-cuadrado es prácticamente cero y que el valor p está muy por encima de cualquier valor de corte. Podemos determinar que no hay ninguna correlación entre el primer y el segundo importe de las multas.

    Si tuviéramos que usar este diagrama de dispersión en un dashboard, la línea de tendencia debería eliminarse.

Diagrama de dispersión de la primera y segunda multa por ID de conductor, con la descripción emergente de la línea de tendencia que muestra

3. En total, ¿qué conductor pagó más? ¿Quién pagó menos?

Si queremos profundizar en nuestro análisis, es posible que debamos crear algunos cálculos.

  1. Para responder a esta pregunta en Tableau Desktop, debemos añadir las multas de ambas infracciones en un único campo. Como es posible que algunos conductores no hayan cometido una segunda infracción, tenemos que utilizar la función cero nulo ZN para convertir todos los valores nulos de Importe de la 2.ª multa en ceros. Si no lo hace, se producirán valores NULL si no hay una segunda multa.

  2. El cálculo es el siguiente:

    Importe total pagado = [1st Fine Amount] + ZN([2nd Fine Amount])

  3. Podemos trazar Importe total pagado en ID de conductor y ordenar el gráfico de barras.

Gráfico de barras de la cantidad pagada por ID de conductor, con el editor de cálculo que muestra la cantidad pagada

4. ¿Cuántos conductores cometieron varios tipos de infracciones?
  1. Para responder a esta pregunta en Tableau Desktop, tenemos que hacer un cálculo IF más elaborado en el que se comparará si el tipo de la primera y el de la segunda infracción son iguales. Si lo son, se asignará el valor "1". Si no lo son, se asignará el valor "2". Dado que solo nos preocupamos por varios tipos de infracción, cualquier otro resultado, como un segundo tipo de infracción nulo, se asignará con el valor "1".

  2. El cálculo es el siguiente:

    Número de tipos de infracción =

    IF [1st Infraction Type]=[2nd Infraction Type] THEN 1 
    ELSEIF [1st Infraction Type]!= [2nd Infraction Type] THEN 2 
    ELSE 1 END
  3. Luego, podemos trazar Número de tipos de infracción en ID de conductor y ordenar el gráfico de barras.

Gráfico de barras de la cantidad de tipos de infracción por ID de conductor, con el editor de cálculo que muestra la cantidad de tipos de infracción

5. ¿Cuál fue el importe de multa medio de los conductores que nunca habían asistido a un curso de seguridad vial?
  1. Para responder a esta pregunta en Tableau Desktop no podemos dividir por dos el importe total de las multas, ya que algunos conductores solo han cometido una infracción. Tampoco podemos calcular la multa media por conductor y aplicar la media de estos valores, porque hacer medias de medias puede generar incongruencias. En lugar de ello, debemos calcular el importe total que han pagado los conductores que no han asistido nunca a un curso sobre seguridad vial y, después, dividirlo por el número total de infracciones asociadas a estas multas.

    1. En primer lugar, debemos determinar si todos los conductores han cometido una segunda infracción. Podemos aprovechar que la información de todos los campos relacionados con un "2.o" elemento será inexistente si no ha habido una segunda infracción y empezar a crear el cálculo:

      IFNULL([2nd Infraction Type], 'no')

      Se indicará un tipo de infracción (en caso de que haya alguna) o "no" si no ha habido una segunda infracción.

    2. A continuación, debemos convertir esta información en el número de infracciones: 1 o 2. Si el resultado del cálculo IFNULL es "no", se debería indicar que al conductor se le ha impuesto una multa. Si se da cualquier otro resultado, se debería indicar que se le han impuesto dos multas. El cálculo es el siguiente:

      Número de infracciones =

      IF IFNULL([2nd Infraction Type], 'no') = 'no' THEN 1 
      ELSE 2 
      END
    3. Ahora debemos tener en cuenta el importe total de las multas. De forma parecida a la pregunta 3, sumaremos el importe de la primera y de la segunda multa con una función ZN en la segunda multa. No obstante, como queremos que se calcule a nivel de todo el conjunto de datos, como práctica recomendada se deberían especificar las agregaciones, SUM, en el cálculo en cuestión. El cálculo es el siguiente: 

      SUM([1st Fine Amount]) + SUM( ZN([2nd Fine Amount]) )

    4. Para sumarlo todo, tomaremos este importe total de las multas y lo dividiremos por el nuevo campo calculado Número de infracciones para determinar el importe medio de las multas:

      Importe medio de las multas = ( SUM([1st Fine Amount]) + SUM( ZN([2nd Fine Amount]) ) ) / SUM([Number of Infractions])

  2. También debemos filtrar a los conductores que han asistido alguna vez a un curso sobre seguridad vial (esta información también se almacena en dos campos).

    1. Tableau es muy eficiente con los cálculos numéricos. Lo expresaremos con cifras para facilitar la presentación lo máximo posible. Para combinar estos dos campos, crearemos un cálculo para cada uno de ellos que indique "Yes = 1" ("Sí = 1") y "No = 0" (los valores nulos también deberían ser 0 para aquellos conductores que no han cometido una segunda infracción). Si sumamos el resultado de estos cálculos, todos los conductores que tengan un valor total de 0 no han asistido nunca a un curso sobre seguridad vial, mientras que los valores 1 y 2 representan las veces que han asistido a uno. Luego, podemos aplicar un filtro para mantener solamente aquellos conductores que tengan el valor 0.

    2. Esta vez utilizaremos una instrucción CASE en lugar de IF. Su funcionamiento es muy parecido, pero tienen sintaxis diferentes. El inicio del cálculo debería ser algo así:

      CASE [1st Traffic School]
      WHEN 'Yes' THEN 1
      WHEN 'No' THEN 
      ELSE 0
      END
    3. Y luego haremos lo mismo para "2.o curso sobre seguridad vial". Podemos añadir ambos elementos al mismo cálculo colocando cada instrucción CASE entre paréntesis y añadiendo un signo más entre ellos. Si eliminamos algunos de los saltos de línea, se ve así:

      Número de cursos sobre seguridad vial a los que se ha asistido =

      (CASE [1st Traffic School] WHEN 'Yes' THEN 1 WHEN 'No' THEN 0 ELSE 0 END)
      +
      (CASE [2nd Traffic School] WHEN 'Yes' THEN 1 WHEN 'No' THEN 0 ELSE 0 END)
      
    4. Si arrastramos Número de cursos sobre seguridad vial a los que se ha asistido al área Dimensiones del panel de datos (sobre la línea), los valores 0–2 se convertirán en discretos.

    5. Ahora, si filtramos por Número de cursos sobre seguridad vial a los que se ha asistido, podemos seleccionar 0 y sabremos que nos saldrán los conductores que nunca han asistido a un curso sobre seguridad vial.

  3. Para responder a la pregunta inicial, lo único que tenemos que hacer es desplazar Importe medio de las multas al estante Texto de la tarjeta Marcas.

    Como hemos creado las agregaciones en el cálculo, la agregación del fragmento será AGG y no se puede modificar (este es el comportamiento previsto).

Vista de número único del importe promedio pagado con el editor de cálculo abierto para mostrar el número de asistencias a la escuela de tráfico

Ir más allá: datos de tabla dinámica

Si bien los datos con los que hemos estado trabajando están bien estructurados para abordar preguntas de forma concreta en torno a las infracciones primera y segunda, no es la estructura estándar recomendada para utilizar con Tableau Desktop. Cuanto más diverja nuestro análisis de las preguntas básicas en torno a las fechas de las infracciones, más complejos serán nuestros cálculos para combinar la información relevante de modo que se pueda utilizar.

Generalmente, cuando los datos se almacenan con varias columnas para el mismo tipo de datos (por ejemplo, dos columnas para la fecha, dos columnas para el importe de las multas, etc.) y la información única se almacena en el nombre de campo (por ejemplo, si es la primera o la segunda infracción), es un indicio de que los datos deben ser de tabla dinámica.

Este caso se puede manejar muy bien creando una tabla dinámica múltiple en Tableau Prep Builder. Podemos trabajar desde el final del flujo de Tableau Prep de Infracción de conductor creado en el tutorial anterior Buscar la segunda fecha con Tableau Prep.

Consejo: Asegúrese de que vuelve a usar Tableau Prep para realizar los pasos siguientes.

  1. En el paso de limpieza final, añada un paso Tabla dinámica que cree una tabla dinámica por cada campo duplicado. Utilice el icono más situado en la esquina superior derecha del área Campos de tabla dinámica para añadir más Valores de tabla dinámica. Se debe crear una tabla dinámica conjunta para cada conjunto de campos (por ejemplo, Importe de la 1.ª multa e Importe de la 2.ª multa).

    Para obtener más información sobre las tablas dinámicas, consulte Limpiar datos y darles forma.

  2. En el área Campos de tabla dinámica, en la columna Nombres de tabla dinámica1, haga doble clic en cada valor y cambie el nombre a 1º y 2º.

    Panel de configuración de pivote 1 en Tableau Prep que muestra los cinco pivotes

Los resultados se pueden ordenar eliminando las fechas nulas, así como reordenando los campos y cambiando su nombre.

  1. Añada un paso de limpieza después de la tabla dinámica. En la columna Fecha de la infracción, haga clic con el botón derecho en la barra de valores nulos y seleccione Excluir.

  2. Haga doble clic en el nombre de campo Nombres de tabla dinámica 1 y cámbielo por Número de infracción.

  3. Arrastre los campos según convenga para reordenarlos así:

    Vista previa de los datos pivotados y limpios

  1. En los nuevos datos de tabla dinámica, cree una salida llamada Infracciones de conductores de tabla dinámica y trasládela a Tableau Desktop (no olvide ejecutar el flujo después de añadir el paso Salida).

Ahora podemos volver a ver nuestras cinco preguntas con esta estructura de datos de tabla dinámica; puede desplegarlas para obtener información básica sobre cómo proceder si se atasca.

Nota: puede descargar el archivo de flujo completo Pivoted Driver Infractions.tflx para echar un vistazo al trabajo o bien puede descargar el libro de trabajo Pivoted Driver Infractions.twbx para consultar las soluciones en contexto. Tenga presente que puede haber métodos alternativos de interpretar el análisis o de debatir las respuestas.

1. ¿Cuántos días transcurrieron entre la primera y la segunda infracción de cada conductor?
  1. Para responder a esta pregunta en Tableau Desktop, como hemos hecho con el primer conjunto de datos, utilizaremos la función DATEDIFF . Esta función precisa de una fecha de inicio y de una fecha de fin. Esta información está presente en nuestros datos, pero se encuentra toda en un campo, por lo que debemos trasladarla a dos campos.

    1. Cree dos campos calculados preliminares:

      1ª fecha de infracción = IF [Infraction Number] = "1st" THEN [Infraction Date] END

      2ª fecha de infracción = IF [Infraction Number] = "2nd" THEN [Infraction Date] END

    2. Como queremos asegurarnos de que estos dos valores se puedan comparar para todos los conductores, debemos corregirlos al nivel de ID de conductor.

      Nota: ¿no me cree? Intente hacer un cálculo DATEDIFF con estos dos campos tal cual: Tiempo transcurrido entre una infracción y otra = DATEDIFF('day', [1st Infraction Date], [2nd Infraction Date])
      Obtendrá resultados nulos por todas partes, porque Tableau está intentando comparar en una estructura de datos parecida a esta:
      tabla de texto que muestra resultados nulos
      Aquí, la fila que sabe cuál es la primera fecha no sabe cuál es la segunda fecha, y viceversa. Para solucionarlo, utilizaremos la expresión de nivel de detalle FIXED para forzar que las fechas primera y segunda estén relacionadas por ID de conductor.

    3. Edite cada cálculo del siguiente modo:

      1ª fecha de infracción = { FIXED [Driver ID] : MIN ( IF [Infraction Number] = "1st" THEN [Infraction Date] END ) }

      2ª fecha de infracción = { FIXED [Driver ID] : MIN ( IF [Infraction Number] = "2nd" THEN [Infraction Date] END ) }

      Nota: El cálculo original IF se debe agregar cuando se inserta en una expresión LOD. Podemos utilizar cualquier agregación básica que conserve el valor de fecha (las agregaciones SUM, AVG o MIN funcionarán, mientras que las agregaciones CNT o CNTD no son válidas).

      Nota: Estos cálculos también se pueden crear en Tableau Prep Builder. Para obtener más información sobre las expresiones de nivel de detalle en Prep, consulte Crear cálculos de nivel de detalle, de clasificación y de sección.

    4. Ahora podemos crear el cálculo DATEDIFF del siguiente modo:

      Tiempo transcurrido entre una infracción y otra = DATEDIFF('day', [1st Infraction Date], [2nd Infraction Date])

      • Si queremos ver semanas o meses, lo único que tiene que hacer es modificar la parte de fecha (actualmente 'day').

      • También sería posible crear un único cálculo para todo el asunto colocando los cálculos de tipo Fixed dentro de DATEDIFF directamente: 

        DATEDIFF ( 'day',

        { FIXED [Driver ID] : MIN ( IF [Infraction Number] = "1st" THEN [Infraction Date] END ) },

        { FIXED [Driver ID] : MIN ( IF [Infraction Number] = "2nd" THEN [Infraction Date] END ) }

        )

    5. Coloque Tiempo entre infracciones en columnas y Carné en filas.

Los resultados serán iguales que el resultado con la estructura de datos sin tabla dinámica.

2. Compare los importes de las multas correspondientes a la primera y a la segunda infracción. ¿Existe alguna correlación entre ellos?
  1. Para responder a esta pregunta en Tableau Desktop, utilizaremos una lógica muy parecida a la pregunta anterior. Utilizaremos Número de Infracción para identificar si una fila determinada es la primera o la segunda infracción y, después, extraeremos el importe de la multa como corresponda.

    1. Si lo único que queremos hacer es un diagrama de dispersión, podemos omitir la parte LOD y utilizar únicamente el cálculo IF :

      Importe de la 1.ª multa = IF [Infraction Number] = "1st" THEN [Fine Amount] END

      Importe de la 2.ª multa = IF [Infraction Number] = "2nd" THEN [Fine Amount] END

    2. Sin embargo, si quisiéramos comparar y ver la diferencia de importe entre la primera y la segunda multa de un único conductor, nos encontraríamos con el mismo problema de los valores nulos que con las fechas. No es mala idea colocar estos cálculos en una expresión LOD FIXED , por lo que podría resultar conveniente hacerlo desde el principio:

      Importe de la 1.ª multa = { FIXED [Driver ID] : MIN ( IF [Infraction Number] = "1st" THEN [Fine Amount] END ) }

      Importe de la 2.ª multa = { FIXED [Driver ID] : MIN ( IF [Infraction Number] = "2nd" THEN [Fine Amount] END ) }

      Estos cálculos también se pueden crear en Tableau Prep Builder. Para obtener más información sobre las expresiones de nivel de detalle en Prep, consulte Crear cálculos de nivel de detalle, de clasificación y de sección.

    3. Cree un diagrama de dispersión con Cantidad de la 1ª multa en columnas y Cantidad de la 2ª multa en filas y cree una línea de tendencia lineal como antes.

Los resultados serán iguales que el resultado con la estructura de datos sin tabla dinámica.

3. En total, ¿qué conductor pagó más? ¿Quién pagó menos?
  1. Para responder a esta pregunta en Tableau Desktop, sería perfecto que la estructura de datos sea de tabla dinámica. Lo único que tenemos que hacer es sacar ID de conductor e Importe de la multa a un gráfico de barras. La agregación predeterminada ya es SUM, por lo que el importe total pagado por el conductor se trazará automáticamente.

Los resultados serán iguales que el resultado con la estructura de datos sin tabla dinámica.

4. ¿Cuántos conductores cometieron varios tipos de infracciones?
  1. Para responder a esta pregunta en Tableau Desktop, sería perfecto que la estructura de datos sea de tabla dinámica. Lo único que tenemos que hacer es sacar ID de conductor y un conteo definido de Tipo de infracción como gráfico de barras y tendremos nuestra respuesta.

Los resultados serán iguales que el resultado con la estructura de datos sin tabla dinámica.

5. ¿Cuál fue el importe de multa medio de los conductores que nunca habían asistido a un curso de seguridad vial?
  1. Para responder a esta pregunta en Tableau Desktop no podemos dividir por dos el importe total de las multas, ya que algunos conductores solo han cometido una infracción. Tampoco podemos calcular la multa media por conductor y aplicar la media de estos valores, porque hacer medias de medias puede generar incongruencias. En lugar de ello, debemos calcular el importe total que han pagado los conductores que no han asistido nunca a un curso sobre seguridad vial y, después, dividirlo por el número total de infracciones asociadas a estas multas.

    1. En primer lugar, debemos determinar si todos los conductores han cometido una segunda infracción. Podemos aprovechar que Fecha de la 2.ª infracción será nulo si no ha habido una segunda infracción y empezar a crear el cálculo:

      IFNULL(STR([2nd Infraction Date]), 'no')

      Se indicará la fecha de la segunda infracción (en caso de que haya alguna) o "no" si no ha habido una segunda infracción.

      Nota: el elemento STR de este cálculo es necesario porque en los argumentos de IFNULL debe haber coherencia en el tipo de datos. Como queremos indicar la cadena "no" para los valores nulos, también tendremos que convertir la fecha en una cadena.

    2. A continuación, debemos convertir esta información en el número de infracciones: 1 o 2. Si el resultado del cálculo IFNULL es "no", se debería indicar que al conductor se le ha impuesto una multa. Si se da cualquier otro resultado, se debería indicar que se le han impuesto dos multas. El cálculo es el siguiente:

      Número de infracciones =

      IF IFNULL(STR([2nd Infraction Date]), 'no')= 'no' THEN 1 
      ELSE 2 
      END
      
    3. Ahora debemos tener en cuenta el importe medio de las multas. Ya disponemos de un campo único para Importe de la multa. Lo único que tenemos que hacer es dividirlo por el nuevo campo Número de infracciones, incluyendo ambos elementos en SUM

      Importe medio de las multas = (SUM([Fine Amount]) / SUM([Number of Infractions])

  2. También debemos filtrar a los conductores que han asistido a un curso sobre seguridad vial. Parece que podríamos usar el campo Traffic School y filtrar Traffic School = no. Sin embargo, esto filtraría las infracciones no asociadas con la escuela de tráfico, personas que no son conductores todavía que nunca asistieron a la escuela de tráfico. Si un conductor fue a la escuela de tráfico por una infracción pero no por la otra, no queremos que se considere ninguna de las infracciones aquí, ese conductor ha ido a la escuela de tráfico y, por lo tanto, no se ajusta a los parámetros de la pregunta.

    Lo que queremos hacer es filtrar a todos los conductores que hayan asistido a un curso sobre seguridad vial. En términos de datos, queremos filtrar cualquier conductor que tenga un "Yes" ("Sí") en Curso sobre seguridad vial en cualquier fila, sin importar la infracción cometida. Creemos el cálculo por etapas, utilizando una vista simple para hacer un seguimiento de lo que sucede:

    1. Primero, queremos saber si un conductor tiene un "Yes" ("Sí") en Curso sobre seguridad vial. Arrastre ID de conductor a Filas y Curso sobre seguridad vial a Columnas. Obtendremos una tabla de texto con el marcador de posición "Abc" que indica los valores relevantes para cada conductor.

    2. A continuación, vamos a crear un cálculo que identificará si el valor de Curso sobre seguridad vial es "Yes" ("Sí"). La primera fase del cálculo es la siguiente:

      Asistencia a cursos sobre seguridad vial = CONTAINS([Traffic School), 'Yes')

      Si trasladamos Asistencia a cursos sobre seguridad vial al estante Color de la tarjeta Marcas, veremos que etiqueta con precisión "Falso" para todas las marcas de la columna "No" y "Verdadero" para todas las marcas de la columna "Yes" ("Sí").

    3. Sin embargo, lo que realmente queremos es esta información a nivel del conductor, y no de la infracción. Una expresión LOD es un ajuste natural cuando se trata de calcular un resultado a un nivel de detalle diferente a la estructura básica de los datos. La convertiremos en una expresión LOD FIXED pero, como sabemos, la parte de la expresión agregada de una expresión LOD debe estar agregada. Antes hemos utilizado MIN. ¿Funcionará aquí? Modificaremos el cálculo del siguiente modo: 

      Asistencia a cursos sobre seguridad vial = { FIXED [Driver ID] : MIN( CONTAINS([Traffic School], 'Yes'))}

      Una vista de "ID de conductor" por "Curso sobre seguridad vial", con "Asistencia a cursos sobre seguridad vial" en "Color"

      Con ese cambio aplicado en la vista, vemos lo opuesto a lo que queremos. Todos los conductores que tengan un "No" se marcarán como "Falso" de forma generalizada. En lugar de ello, queremos que "Yes" ("Sí") sea "Verdadero" para todos los registros de ese conductor. ¿Cuál es la función de MIN en este caso? Selecciona la primera respuesta alfabéticamente; es decir, "No".

    4. ¿Qué pasaría si la cambiásemos por MAX? ¿Se seleccionaría la última respuesta alfabéticamente? Modificaremos el cálculo del siguiente modo: 

      Asistencia a cursos sobre seguridad vial = { FIXED [Driver ID] : MAX ( CONTAINS( [Traffic School], 'Yes') ) }

      Una vista de "ID de conductor" por "Curso sobre seguridad vial", con "Asistencia a cursos sobre seguridad vial" en "Color"

      Y aquí lo tenemos: si un conductor tiene "Yes" ("Sí") en alguna parte de los datos, se marcarán como "Verdadero" por haber asistido a un curso sobre seguridad vial, incluso en el caso de la infracción que no implicó la asistencia a un curso.

    5. Si movemos Asistencia a cursos sobre seguridad vial al estante Filtros y seleccionamos solo "Falso", nos quedarán solo los conductores que nunca han asistido a un curso sobre seguridad vial.

  3. Para responder a la pregunta inicial, lo único que tenemos que hacer es, con nuestro filtro aplicado, desplazar Importe medio de las multas al estante Texto de la tarjeta Marcas. Como hemos creado las agregaciones en el cálculo, la agregación del campo será AGG y no se puede modificar (este es el comportamiento previsto).

Los resultados serán iguales que el resultado con la estructura de datos sin tabla dinámica.

Ventajas de los datos de tabla dinámica

Podríamos quedarnos con la estructura de datos original del tutorial si sabemos que solo tendríamos que responder a preguntas que son fáciles de responder con esa estructura. Sin embargo, el formato de datos de tabla dinámica es más flexible. A pesar de que requiere hacer algunos cálculos, una vez aplicados, el conjunto de datos resultante es adecuado para responder a preguntas más amplias.

Ir aún más allá: solo cálculos

¿Qué pasa si no tiene acceso a Tableau Prep Builder? ¿Está gafado si se ha quedado atascado con los datos originales? ¡Para nada!

Tableau Desktop y las expresiones LOD pueden responder a todas nuestras preguntas analíticas. Si nos conectamos al archivo Traffic Violations.xlsx(El enlace se abre en una ventana nueva) original, se parece mucho al conjunto de datos de tabla dinámica: lo único que no tiene es el campo esencial Número de infracción. Tendremos que imitar el resultado de los pasos de agregación mediante expresiones LOD.

Nota: puede descargar el libro de trabajo LOD Driver Infractions.twbx(El enlace se abre en una ventana nueva) para consultar las soluciones en contexto. Tenga presente que puede haber métodos alternativos de interpretar el análisis o de debatir las respuestas.

1. ¿Cuántos días transcurrieron entre la primera y la segunda infracción de cada conductor?
  1. Para responder a esta pregunta en Tableau Desktop, volveremos a utilizar la función DATEDIFF . Esta función precisa de una fecha de inicio y de una fecha de fin. Esta información está presente en nuestros datos, pero se encuentra toda en un campo, por lo que debemos trasladarla a dos campos. Como queremos asegurarnos de que estos dos valores se puedan comparar para todos los conductores, debemos corregirlos al nivel de ID de conductor.

    1. Para buscar la fecha de la primera infracción, utilizaremos el siguiente cálculo:

      1.ª infracción = { FIXED [Driver ID] : MIN ( [Infraction Date] ) } 

    2. Haremos la fecha de la segunda infracción por etapas.

      1. Para empezar, tenemos que observar únicamente las fechas que son posteriores a la primera fecha:

        IF [Infraction Date] > [1st Infraction] THEN [Infraction Date] END

      2. Pero esto nos dará todas las infracciones después de la primera, y solo queremos la segunda. Entonces, queremos la más temprana de estas fechas. Indíquelo todo en MIN:

        MIN( IF [Infraction] : [1st Infraction] THEN [Infraction Date] END )

      3. También queremos recalcular la fecha de la segunda infracción de cada conductor. Ahí es donde entran en juego las expresiones LOD. La fijaremos a nivel de ID de conductor:

        2.ª infracción = { FIXED [Driver ID] : MIN ( IF [Infraction Date] > [1st Infraction] THEN [Infraction Date] END ) }

    3. Y ahora podemos crear el cálculo DATEDIFF :

      Tiempo transcurrido entre una infracción y otra = DATEDIFF('day', [1st Infraction], [2nd Infraction])

Los resultados serán iguales que los resultados con las otras dos estructuras de datos.

2. Compare los importes de las multas correspondientes a la primera y a la segunda infracción. ¿Existe alguna correlación entre ellos?
  1. Para responder a esta pregunta en Tableau Desktop, utilizaremos una lógica parecida a la versión de los datos de tabla dinámica de esta pregunta. Utilizaremos los campos 1.ª infracción y 2.ª infracción que hemos creado para la pregunta 1 para identificar si una fila determinada es la primera o la segunda infracción y, después, extraeremos el importe de la multa como corresponda.

    1. Si lo único que queremos hacer es un diagrama de dispersión, podemos omitir la parte LOD y utilizar únicamente un cálculo IF :

      Importe de la 1.ª multa = IF [1st Infraction] = [Infraction Date] THEN [Fine Amount] END

      Importe de la 2.ª multa = IF [2nd Infraction] = [Infraction Date] THEN [Fine Amount] END

    2. Sin embargo, si queremos comparar y ver la diferencia de importe entre la primera y la segunda multa de un único conductor, nos encontraríamos con problemas en los valores nulos, al igual que en la primera estructura de datos. No es mala idea colocar estos cálculos en una expresión LOD FIXED, por lo que podría resultar conveniente hacerlo desde el principio:

      Importe de la 1.ª multa = { FIXED [Driver ID] : MIN ( IF [1st Infraction] = [Infraction Date] THEN [Fine Amount] END ) }

      Importe de la 2.ª multa = {FIXED [Driver ID] : MIN( IF [2ndInfraction] = [Infraction Date] THEN [Fine Amount] END ) }

Los resultados serán iguales que los resultados con las otras dos estructuras de datos.

3. En total, ¿qué conductor pagó más? ¿Quién pagó menos?
  1. Para responder a esta pregunta en Tableau Desktop, primero tenemos que ser conscientes de algo sobre el método exclusivo de LOD: ambos métodos, con Tableau Prep, filtran los registros que no sean la primera o la segunda infracción de un conductor. El método LOD de Tableau Desktop mantiene todos los registros. Esto significa que, si tuviéramos que crear una visualización de SUM(Importe pagado) por ID de conductor, la versión exclusiva de Tableau Desktop mostraría importes superiores para los conductores que hayan cometido más de dos infracciones. Para obtener un valor de Importe total pagado de los datos completos que coinciden con los otros métodos, en lugar de utilizar el campo Importe de la multa original, tendremos que sumar la primera y la segunda multa como hemos hecho con la primera estructura de datos.

  2. Usando los campos que creamos para la pregunta 2, sumaremos las dos multas. ZN  es necesario para evitar un resultado nulo para los conductores que solo tuvieron una infracción. El cálculo es el siguiente: 

    Importe total pagado = [1st Fine Amount] + ZN([2nd Fine Amount])

Los resultados serán iguales que los resultados con las otras dos estructuras de datos.

4. ¿Cuántos conductores cometieron varios tipos de infracciones?
  1. Para responder a esta pregunta en Tableau Desktop, no basta con sacar ID de conductor y un conteo definido de Tipo de infracción. Como este conjunto de datos contiene infracciones más allá de la segunda, puede que algunos conductores tengan más de dos tipos de infracción. Para que los resultados coincidan con los otros métodos, tenemos que limitar el alcance a solo las dos primeras infracciones.

  1. Podemos sacar el primer y el segundo tipo de infracción, incluirlos en expresiones LOD para que sean FIXED para el conductor y, después, utilizar un cálculo IF para contar los tipos:

    1. 1.er tipo de infracción = { FIXED [Driver ID] : MIN ( IF [1st Infraction] = [Infraction Date] THEN [Infraction Type] END ) }

    2. 2.o tipo de infracción = { FIXED [Driver ID] : MIN ( IF [2nd Infraction] = [Infraction Date] THEN [Infraction Type] END ) }

    3. Número de tipos de infracción =

      IF [1st Infraction Type] = [2nd Infraction Type] THEN 1 
      ELSEIF [1st Infraction Type] != [2nd Infraction Type] THEN 2
      ELSE 1 END 

      Nota: también se pueden crear muchos de estos cálculos como un solo campo anidando los cálculos iniciales directamente en el cálculo más grande. En este caso, el cálculo combinado se vería así:
      IF
      {FIXED [Driver ID] : MIN(IF [1st Infraction]=[Infraction Date] THEN [Infraction Type] END)}
      =
      {FIXED [Driver ID] : MIN(IF [2nd Infraction]=[Infraction Date] THEN [Infraction Type] END)}
      THEN 1

      ELSEIF
      {FIXED [Driver ID] : MIN(IF [1st Infraction]=[Infraction Date] THEN [Infraction Type] END)}
      !=
      {FIXED [Driver ID] : MIN(IF [2nd Infraction]=[Infraction Date] THEN [Infraction Type] END)}
      THEN 2

      ELSE 1
      END


      Esto es un poco más difícil de entender, pero es otra opción viable. (tenga en cuenta que los saltos de línea y algunos espacios no afectan a la interpretación del cálculo por parte de Tableau).

  2. Luego, podemos trazar Número de tipos de infracción en ID de conductor y ordenar el gráfico de barras.

Los resultados serán iguales que los resultados con las otras dos estructuras de datos.

5. ¿Cuál fue el importe de multa medio de los conductores que nunca habían asistido a un curso de seguridad vial?
  1. Para responder a esta pregunta en Tableau Desktop no podemos dividir por dos el importe total de las multas, ya que algunos conductores solo han cometido una infracción. Tampoco podemos calcular la multa media por conductor y aplicar la media de estos valores, porque hacer medias de medias puede generar incongruencias. En lugar de ello, debemos calcular el importe total que han pagado los conductores que no han asistido nunca a un curso sobre seguridad vial y, después, dividirlo por el número total de infracciones asociadas a estas multas.

    1. En primer lugar, debemos determinar si todos los conductores han cometido una segunda infracción. Podemos aprovechar que la información de todos los campos relacionados con un "2.o" elemento será inexistente si no ha habido una segunda infracción y empezar a crear el cálculo:

      IFNULL([2nd Infraction Type], 'no')

      Se indicará un tipo de infracción (en caso de que haya alguna) o "no" si no ha habido una segunda infracción.

    2. A continuación, debemos convertir esta información en el número de infracciones: 1 o 2. Si el resultado del cálculo IFNULL es "no", se debería indicar que al conductor se le ha impuesto una multa. Si se da cualquier otro resultado, se debería indicar que se le han impuesto dos multas. El cálculo es el siguiente:

      Número de infracciones =

      IF IFNULL([2nd Infraction Type], 'no') = 'no' THEN 1
      ELSE 2
      END
    3. Para el importe total pagado, podemos utilizar el cálculo de la pregunta 3. Para sumarlo todo, tomaremos este importe total de las multas y lo dividiremos por el nuevo campo calculado Número de infracciones para determinar el importe medio de las multas:

      Importe medio de las multas = SUM([Total Amount Paid]) / SUM([Number of Infractions])

  2. También debemos filtrar a los conductores que han asistido a un curso sobre seguridad vial. Como este conjunto de datos contiene algunos conductores que han cometido una tercera o una cuarta infracción, no podemos utilizar el mismo método que en la estructura de datos de tabla dinámica. En lugar de ello, seguiremos el mismo método que en los datos sin tabla dinámica, que se resume a continuación:

    1. En primer lugar, tenemos que crear dos cálculos que identifiquen si la primera y la segunda infracción han implicado o no la asistencia a un curso sobre seguridad vial: 

      1.er curso sobre seguridad vial = { FIXED [Driver ID] : MIN (IF [1st Infraction] = [Infraction Date] THEN [Traffic School] END ) }

      2.o curso sobre seguridad vial = { FIXED [Driver ID] : MIN (IF [2nd Infraction] = [Infraction Date] THEN [Traffic School] END ) }

    2. Luego sumaremos esos valores para obtener el número total de cursos sobre seguridad vial a los que se ha asistido: 

      Número de cursos sobre seguridad vial a los que se ha asistido =

      (CASE [1st Traffic School] WHEN 'Yes' THEN 1 WHEN 'No' THEN 0 ELSE 0 END)
      +
      (CASE [2nd Traffic School] WHEN 'Yes' THEN 1 WHEN 'No' THEN 0 ELSE 0 END)
    3. Si arrastramos Número de cursos sobre seguridad vial a los que se ha asistido al área Dimensiones del panel Datos, los valores 0–2 se convertirán en discretos.

    4. Ahora, si filtramos por Número de cursos sobre seguridad vial a los que se ha asistido, podemos seleccionar 0 y sabremos que nos saldrán los conductores que nunca han asistido a un curso sobre seguridad vial.

  3. Para responder a la pregunta inicial, lo único que tenemos que hacer es desplazar Importe medio de las multas al estante Texto de la tarjeta Marcas. Como hemos creado las agregaciones en el cálculo, la agregación del campo será AGG y no se puede modificar (este es el comportamiento previsto).

Los resultados serán iguales que los resultados con las otras dos estructuras de datos.

Es importante recordar que esta solución tiene muchos cálculos anidados y expresiones LOD. Dependiendo del tamaño del conjunto de datos y la complejidad de los datos, el rendimiento podría ser un problema.

Reflexión sobre los métodos

Entonces, ¿qué ruta debe seguir? Eso dependerá completamente de usted y de las herramientas que tenga a su disposición.

  • Si quiere alejarse de las expresiones LOD, existe una solución de configuración de datos, aunque es posible que deba hacer cálculos para algunos análisis (Análisis en Tableau Desktop).

  • Si puede dar forma a los datos y está familiarizado con los cálculos (así como con las expresiones LOD), la opción intermedia ofrece la mejor flexibilidad (Ir más allá: datos de tabla dinámica).

  • Si está familiarizado con las expresiones LOD, hay un impacto mínimo en el rendimiento o no tiene acceso a Tableau Prep, resolverlo solo con expresiones LOD es una opción viable (Ir aún más allá: solo cálculos).

Como mínimo, es útil saber cómo están interrelacionadas la agregación en Tableau Prep y las expresiones de nivel de detalle en Tableau Desktop y cómo afectan al análisis de datos. Como en la mayoría de las cosas en Tableau, hay más de una forma de hacer algo. Explorar todas las opciones le puede ayudar a agrupar conceptos y facilitarle la elección de la mejor solución para usted.

Cálculos utilizados:

Infracciones de conductores

  • Tiempo transcurrido entre una infracción y otra = DATEDIFF('day', [1st Infraction Date], [2nd Infraction Date])

  • Importe total pagado = [1st Fine Amount] + ZN([2nd Fine Amount])

  • Número de tipos de infracción = IF [1st Infraction Type]=[2nd Infraction Type] THEN 1 ELSEIF [1st Infraction Type]!= [2nd Infraction Type] THEN 2 ELSE 1 END

  • Número de infracciones = IF IFNULL([2nd Infraction Type], 'no') = 'no' THEN 1 ELSE 2 END

  • Importe medio de las multas = ( SUM([1st Fine Amount]) + SUM( ZN([2nd Fine Amount]) ) ) / SUM([Number of Infractions])

  • Número de cursos sobre seguridad vial a los que se ha asistido = (CASE [1st Traffic School] WHEN 'Yes' THEN 1 WHEN 'No' THEN 0 ELSE 0 END) + (CASE [2nd Traffic School] WHEN 'Yes' THEN 1 WHEN 'No' THEN 0 ELSE 0 END)

Infracciones de conductores de tabla dinámica

  • 1.ª infracción = {FIXED [Driver ID] : MIN(IF [Infraction Number] = "1st" THEN [Infraction Date] END)}

  • 2.ª infracción = {FIXED [Driver ID] : MIN(IF [Infraction Number] = "2nd" THEN [Infraction Date] END)}

  • Tiempo transcurrido entre una infracción y otra = DATEDIFF('day', [1st Infraction], [2nd Infraction])

  • Importe de la 1.ª multa = {FIXED [Driver ID] : MIN( IF [Infraction Number] = "1st" THEN [Fine Amount] END ) }

  • Número de infracciones = IF IFNULL(STR([2nd Infraction]), 'no')= 'no' THEN 1 ELSE 2 END

  • Importe medio de las multas = SUM([Fine Amount])/SUM([Number of Infractions])

  • Asistencia a cursos sobre seguridad vial = { FIXED [Driver ID] : MAX( CONTAINS([Traffic School], 'Yes'))}

Infracciones de conductores de nivel de detalle

  • 1.ª infracción = {FIXED [Driver ID] : MIN([Infraction Date])}

  • 2.ª infracción = { FIXED [Driver ID] : MIN( IF [Infraction Date] > [1st Infraction] THEN [Infraction Date] END ) }

  • Tiempo transcurrido entre una infracción y otra = DATEDIFF('day', [1st Infraction], [2nd Infraction])

  • Importe de la 1.ª multa = {FIXED [Driver ID] : MIN( IF [1st Infraction] = [Infraction Date] THEN [Fine Amount] END ) }

  • Importe de la 2.ª multa = {FIXED [Driver ID] : MIN( IF [2nd Infraction] = [Infraction Date] THEN [Fine Amount] END ) }

  • Importe total pagado = [1st Fine Amount] + ZN([2nd Fine Amount])

  • 1.er tipo de infracción = {FIXED [Driver ID] : MIN( IF [1st Infraction] = [Infraction Date] THEN [Infraction Type] END ) }

  • 2.o tipo de infracción = {FIXED [Driver ID] : MIN( IF [2nd Infraction] = [Infraction Date] THEN [Infraction Type] END ) }

  • Número de tipos de infracción = IF [1st Infraction Type]=[2nd Infraction Type] THEN 1 ELSEIF [1st Infraction Type]!= [2nd Infraction Type] THEN 2 ELSE 1 END

  • Número de infracciones = IF IFNULL([2nd Infraction Type], 'no') = 'no' THEN 1 ELSE 2 END

  • Importe medio de las multas = SUM ([Total Amount Paid]) / SUM([Number of Infractions])

  • 1.er curso sobre seguridad vial = {FIXED [Driver ID] : MIN (IF [1st Infraction] = [Infraction Date] THEN [Traffic School] END ) }

  • 2.o curso sobre seguridad vial = {FIXED [Driver ID] : MIN (IF [2nd Infraction] = [Infraction Date] THEN [Traffic School] END ) }

  • Número de cursos sobre seguridad vial a los que se ha asistido = (CASE [1st Traffic School] WHEN 'Yes' THEN 1 WHEN 'No' THEN 0 ELSE 0 END) + (CASE [2nd Traffic School] WHEN 'Yes' THEN 1 WHEN 'No' THEN 0 ELSE 0 END)

Nota: damos las gracias especialmente a Ann Jackson por el tema Do Customers Spend More on Their First or Second Purchase?(El enlace se abre en una ventana nueva) (¿Los clientes gastan más en la primera o en la segunda compra?) de Workout Wednesday y a Andy Kriebel por el consejo de Tableau Prep Returning the First and Second Purchase Dates(El enlace se abre en una ventana nueva) (Indicar la primera y la segunda fecha de compra), que han servido de inspiración para este tutorial. Al hacer clic en estos enlaces, saldrá del sitio web de Tableau. Tableau no asume responsabilidad alguna por la exactitud de las páginas de las que se encargan los proveedores externos ni garantiza que estén actualizadas. Póngase en contacto con los propietarios si tiene alguna pregunta relacionada con su contenido.

¡Gracias por sus comentarios!Sus comentarios se han enviado correctamente. ¡Gracias!