Cómo medir el tiempo empleado en rellenar un formulario


Lo que sigue surgió como un entretenimiento al hilo de un tuit de @eneko_fc, que preguntaba por una forma de registrar el momento en que un usuario ha comenzado a rellenar un formulario de Google.


La pregunta dio paso a un animado cruce de tuits.. que si scripts, que si subir un archivo, que si qsrh, que si Timify... El caso es que dos de los participantes apuntaron una idea simple pero efectiva...



...y fácilmente implementable, sin tocar una línea de código, usando funciones de la hoja de cálculo. Si prefieres la versión telegráfica de todo esto la encontrarás en este hilo de Twitter (donde por cierto se deslizó un error en su momento, a ver si lo encuentras). Si por el contrario te inclinas por una explicación más reposada del tinglado (sin errores, espero), sigue leyendo.

Como apuntaban Marcos y José Manuel, la idea feliz consiste en forzar que el usuario pase por un primer formulario (#1) en el que solo se rellenen, por ejemplo, ciertos datos de identificación (o ni eso, podría simplemente contener un mensaje de bienvenida, instrucciones. etc.). Tras hacer clic en Enviar se le facilita en el texto del mensaje de confirmación el enlace del formulario real (#2), que contendrá las preguntas relevantes. Puesto que se registran las marcas de tiempo asociadas al envío de cada formulario, bastará con restarlas para obtener una estimación del tiempo empleado en cumplimentar el segundo.

Para articular todo esto configuraremos ambos formularios de modo que vuelquen las respuestas a una hoja de cálculo, por comodidad preferiblemente la misma, aunque en distintas pestañas. A continuación solo habrá que restar las marcas de tiempo que se registran automáticamente en los formularios #1 y #2 correspondientes a un mismo usuario (email) para aproximar con razonable exactitud el ínterin. Para relacionar ambas respuestas en ambos formularios utilizaremos la dirección de email del usuario que los rellena, aunque se podría emplear cualquier otro dato único registrado en ambos (DNI, NIA, etc.) que actuase como clave de enlace. Más o menos esto:

La "idea feliz".

Evidentemente este cálculo no deja de ser una aproximación. Si alguien envía el primer formulario pero se entretiene contando ovejitas antes de seguir el enlace y comenzar a rellenar el segundo, la resta de los valores de tiempo devolverá un valor notablemente mayor que el real. Pero teniendo en cuenta que el tinglado nos sale gratis, tampoco está tan mal ¿no te parece?

Vamos con el formulario #1. No tiene misterio. Activaremos la opción de Recopilar direcciones de correo electrónico. En su Mensaje de confirmación se indicará la URL del formulario que contendrá realmente las preguntas que nos interesan.

Formulario #1.

La secuencia se ha capturado en una cuenta de Google personal, por tanto aparecerá una pregunta específica para recoger este dato en el formulario. En una de G Suite, que lo captura automáticamente, podríamos simplemente mostrar algún tipo de mensaje con las instrucciones pertinentes, como sugería hace un momento.

Como era de esperar, el formulario deberá volcar las respuestas recibidas en una hoja de cálculo.

El formulario #2 tampoco tiene nada de especial. Deberá identificar del mismo modo al usuario por medio de su correo electrónico, puesto que es esta información la que usaremos posteriormente para conectar ambas respuestas en la hoja de cálculo de destino. Yo he incluido una sola pregunta, en plan prueba, pero lógicamente podemos añadir todas las que nos vengan en gana, como en cualquier formulario del mundo mundial.

Formulario #2.

Para mantener la cosa compacta y, por otro lado, evitar el uso de la función IMPORTRANGE() posteriormente, ambos formularios deberán llevar sus respuestas a la misma hoja de cálculo. Esto se consigue seleccionando la ya vinculada previamente a uno de los formularios como destino de las respuestas del otro.


Al vincular ambos formularios con la misma hoja de cálculo comprobarás que en ella se dispone de una pestaña para las respuestas recibidas de cada uno de ellos. Renómbralas a tu gusto.


Ahora es cuando intervienen las fórmulas. Añadiremos una columna en la pestaña de respuestas del formulario #2 (columna D, en mi caso), en la que introduciremos esta expresión en la celda D2:

=SI.ERROR( A2 - BUSCARV(B2 ; {'Respuestas: tiempo inicio'!$B$2:$B \ 'Respuestas: tiempo inicio'!$A$2:$A} ; 2 ; FALSO) ; "")

La fórmula, mediante la función BUSCARV(), rastrea en la hoja de respuestas del formulario #1 la fila en la que se encuentra una determinada dirección de correo electrónico y toma su marca de tiempo, que se sustrae de la correspondiente en la hoja de respuestas del formulario #2. La única minisofisticación la encontramos en el uso del operador barra invertida (\) utilizado para montar una matriz de búsqueda { ... } concatenando las columnas de la hoja de respuestas del formulario #1 en el orden que exige BUSCARV(). La cosa queda así en acción:

La hoja de respuestas con el cálculo del tiempo.

Para que la fórmula se aplique a las respuestas por debajo de la celda D2 tenemos tres posibilidades:
  1. Arrastrarla a media que lo necesitemos.
  2. Tunearla de modo que pase a ser una expresión matricial que se extienda verticalmente de modo automático. Te lo dejo como ejercicio.
  3. Utilizar mi complemento Form Response Control para copiar la fórmula hacia abajo a medida que se vayan recibiendo respuestas.
Además, el formato aplicado sobre una celda tampoco se propaga a las respuestas que llegan posteriormente y se sitúan en filas inferiores.


Y eso hace que las celdas que muestran el tiempo transcurrido (resta de valores de tiempo) se vean extremadamente rarunas hasta que les apliquemos formato manualmente. Y no, un ARRAYFORMULA() no lo solventa. Por esta razón yo opto por la tercera propuesta, dado que FRC también extiende el formato.

FRC en acción.

Aquí los formularios y la hoja de cálculo utilizados en el artículo, por si quieres hacerte una copia y desmenuzarlos tranquilamente, aunque como has visto, desde una perspectiva técnica la cosa no es excesivamente compleja.

Formularios y hoja de cálculo.

¿Mejoras?

Bueno, no supondría gran esfuerzo añadir una segunda columna en la hoja de respuestas del formulario #2 que mostrara el valor del tiempo de inicio tomado del formulario #1 junto a la diferencia calculada. La fórmula es muy similar (nuevo ejercicio planteado).

Por otro lado, si una persona enviara más de una respuesta (quizás lo impidamos configurando adecuadamente el formulario) se duplicarían emails. En ese caso solo se tendría en cuenta en el cálculo la marca de tiempo más temprana que se hallara en el formulario #1 correspondiente a cada una de dichas respuestas. Que esto sea aceptable o no ya dependerá del caso. ¿Se te ocurre como modificar la fórmula para contemplar y tratar adecuadamente esta posibilidad?

Y eso es todo. Con este cierro una serie de tres artículos (bueno, cuatro si incluimos la minicrónica de GEG Valencia 2019), publicados a lo largo de los últimos días, que tenía guardados en el horno a medio cocer.

Ahora me vuelvo a mi cueva a ponerme con otras cosas.

Comentarios