Retos de entrevista con Power Query

Retos de entrevista con Power Query

Tres pruebas técnicas reales de las que caen en procesos de selección para puestos de datos, resueltas paso a paso con Power Query. Sirven igual para preparar una entrevista que para medir tu nivel.

Los retos

Diferencia de horas excluyendo fines de semana
Calcular el tiempo transcurrido entre dos marcas de tiempo descontando sábados y domingos. Suena trivial y no lo es: hay que partir el intervalo por días y decidir qué pasa con las fracciones del primer y del último día.

Cálculo de porcentajes (Stars Job Interview)
Porcentajes sobre el total y sobre el grupo dentro de la misma consulta. El fallo típico es agrupar y perder el detalle que necesitas después.

El desafío de Uber en sus entrevistas
El más exigente de los tres. Un enunciado corto con una trampa de modelado: la solución directa da un número plausible pero equivocado.

Cómo aprovecharlos

Intenta cada uno por tu cuenta antes de ver la solución. En una entrevista técnica lo que se valora no es que salga el número, sino que sepas explicar por qué has elegido ese camino y qué habría pasado con el otro.

Por qué una prueba técnica de Power Query no va de saber funciones

En un proceso de selección para un puesto de datos casi nunca te piden que recites funciones. Te ponen un enunciado corto, aparentemente sencillo, y observan cómo lo desmontas. La diferencia entre un candidato y otro rara vez está en el resultado: está en si sabe explicar por qué ha elegido ese camino y qué habría pasado con el otro.

Estos tres retos son de los que caen de verdad. Sirven igual para preparar una entrevista que para medir tu nivel real con Power Query.

Reto 1: diferencia de horas excluyendo fines de semana

El enunciado suena trivial: tienes una fecha y hora de inicio, otra de fin, y quieres las horas transcurridas sin contar sábados ni domingos.

La parte fácil se resuelve con el asistente: una columna personalizada con final menos inicio devuelve una duración, y desde el menú Duración la conviertes en total de horas. Eso te da las horas literales.

El problema empieza cuando hay que descontar los fines de semana, porque eso ya no es una resta: hay que recorrer el intervalo día a día. La solución pasa por escribir una función propia en el editor avanzado que reciba las dos marcas de tiempo y devuelva las horas netas.

La estructura del cálculo, paso a paso:

  1. Horas totales con Duration.TotalHours sobre la diferencia entre final e inicio.
  2. Quedarse solo con la parte de fecha de ambas marcas, porque para contar días la hora sobra.
  3. Días totales con Duration.TotalDays sobre esas dos fechas, sumando 1. Ese 1 no es un adorno: si inicio y fin caen el mismo día, ese día tiene que contar.
  4. Generar la lista de días del intervalo con List.Dates, pasándole la fecha de inicio, el número de días y un paso de un día. Es el equivalente en lenguaje M a la función SECUENCIA.
  5. Traducir cada fecha a día de la semana con List.Transform y Date.DayOfWeek. Aquí está el detalle que se falla en la entrevista: el resultado es numérico y 5 y 6 son sábado y domingo, porque la cuenta arranca en lunes igual a 0.
  6. Marcar los findes con un condicional dentro de la misma transformación: si el día de la semana es mayor que 4, devuelve 1; si no, 0.
  7. Sumar esos unos con List.Sum y restar al total: horas totales menos días de fin de semana por 24.

Un truco de método que se ve en el vídeo y que merece la pena robar: en lugar de escribir el let con variables sueltas, se construye un registro con todos los pasos dentro. Al invocar la función ves el desglose completo del cálculo en una sola pantalla, y depurar deja de ser adivinar. Solo al final se le dice a la función que devuelva el campo resultado.

Reto 2: porcentajes sobre el total y sobre el grupo

El enunciado pide porcentajes en dos niveles distintos dentro de la misma consulta. El fallo típico es agrupar de primeras y descubrir después que has perdido el detalle que necesitabas para el segundo cálculo.

La lectura correcta es que no es un problema de agrupación, es un problema de orden: se calculan las agregaciones por separado y se recombinan, en vez de destruir el detalle en el primer paso.

Reto 3: el desafío de Uber

El más exigente de los tres, y el que mejor separa a quien entiende el modelado de quien solo sabe hacer clics. El enunciado es corto y esconde una trampa: la solución directa devuelve un número plausible pero equivocado. Si no te paras a cuestionar el planteamiento, no hay nada en el resultado que te avise de que está mal.

Cómo sacarles partido

Inténtalos por tu cuenta antes de mirar la solución, aunque tardes. Y cuando la mires, no te quedes en el "ah, vale": pregúntate qué pasaría si la fuente creciera a un millón de filas, o si el intervalo cruzara un festivo además del fin de semana.

Funciones clave

  • Duration.TotalHours y Duration.TotalDays: convierten una duración en el número que quieres, sin pasar por conversiones manuales.
  • List.Dates: genera la lista de fechas de un intervalo a partir de inicio, número de elementos y paso.
  • List.Transform: itera sobre una lista aplicando una expresión a cada elemento, referenciado con el guion bajo.
  • Date.DayOfWeek: devuelve el día de la semana como número. Ojo al criterio de inicio de semana.
  • List.Sum: suma la lista de marcas para obtener el conteo de fines de semana.

Conclusión

Este reto salió de una conversación en el grupo de WhatsApp de la comunidad y acabó convertido en vídeo porque enseña dos cosas a la vez: cómo resolver un cálculo que sale una y otra vez en entregas y plazos comprometidos, y cómo piensa Power Query cuando trabajas con listas. Esa segunda parte es la que de verdad se nota en una entrevista.

Más casos con estas funciones

Más contenido de Excel en InflueXcel