Foro Empleos Academia Blog
Recursos
  • Ejemplos de dashboards
  • DatData Games
  • Alumnos destacados
  • Torneos pasados
Search Icon Iniciar sesión Inscribirme
Back arrow

Power Query

hace 2 semanas

Combinación de consultas

OctavioSomonte850

Buenas tardes a todos, tengo una situación que me gustaría oír sus opiniones sobre posibles soluciones.

En una consulta tengo una tabla que tiene por cada registro la entrada de mercadería al sistema según ordenes de compra. Cada entrada es una "Suposición" asociada a una posición (sería como un ítem) dentro de una orden de compra. Va a haber posiciones de ordenes de compra que no tengan ingresos y esas tendrán un solo registro con suposición = 0.

Cada posición de orden de compra tiene una persona (Activador) asignado que hará el seguimiento. Pero esta persona a lo largo del tiempo puede ir cambiando. Por lo que hice una tabla auxiliar que tiene 3 columnas: OC-Pos (que es la concatenación de la orden de compra y posición, campo que se vincula con la consulta principal), Activador asignado (con el nombre del nuevo responsable) y Fecha de cambio. También hay que considerar que puede haber más de un cambio y se tiene que respetar cada periodo.

Mi desafío es poder modificar la columna de Activador asignado en la consulta principal para que coloque el nombre correcto según la fecha de ingreso de la mercadería y la fecha de cambio del activador.

Si no hubo cambios se mantiene el activador original que ya se encuentra en la tabla principal. Si hubieron cambios se deberán ver reflejado a partir de la fecha de cambio de la consulta auxiliar.

No se cual sería la mejor práctica para lograr esto.

Saludos!
0 Votos
4
Respuestas
Respuestas

AsistenteVirtualDatdata

hace 2 semanas

🤖 Esta respuesta fue generada automáticamente por nuestra inteligencia artificial local. Es un intento único de ayudarte al instante. No responderá a mensajes posteriores en este hilo.

Hola, ¡gracias por tu consulta!

Comprendo la complejidad de este escenario. Efectivamente, necesitas actualizar el 'Activador asignado' en tu tabla principal basándote en un historial de cambios por fecha, respetando el período de validez de cada asignación.

La mejor práctica para manejar este tipo de "atributos que cambian en el tiempo" (slowly changing dimensions type 2, en cierto sentido) en Power BI es utilizando una **columna calculada en DAX** en tu tabla principal, la cual lookup el activador correcto de la tabla auxiliar basándose en la fecha.

Aquí te propongo una estructura de medida en DAX que puedes usar como columna calculada en tu tabla principal:

Activador Correcto = 
VAR _CurrentOCPos = 'TuTablaPrincipal'[OC-Pos]
VAR _CurrentEntryDate = 'TuTablaPrincipal'[Fecha de Ingreso]  // Asegúrate de usar el nombre correcto de tu columna de fecha en la tabla principal

// Encontrar la última fecha de cambio en la tabla auxiliar que sea menor o igual a la fecha de ingreso actual para el mismo OC-Pos
VAR _LatestRelevantChangeDate = 
    CALCULATE (
        MAX ( 'TuTablaAuxiliarCambios'[Fecha de cambio] ),
        FILTER (
            'TuTablaAuxiliarCambios',
            'TuTablaAuxiliarCambios'[OC-Pos] = _CurrentOCPos          // Filtrar por el mismo OC-Pos
                                                    
                                                    // Filtrar cambios que ocurrieron en o antes de la fecha de ingreso
            'TuTablaAuxiliarCambios'[Fecha de cambio] <= _CurrentEntryDate
        )
    )

// Si se encontró una fecha de cambio relevante, buscar el activador correspondiente en la tabla auxiliar.
// Si no se encontró (LatestRelevantChangeDate es BLANK), significa que el activador es el original de la tabla principal.
VAR _ActivadorFromAux = 
    IF (
        NOT ISBLANK ( _LatestRelevantChangeDate ),
        LOOKUPVALUE (
            'TuTablaAuxiliarCambios'[Activador asignado],  // Columna a obtener
            'TuTablaAuxiliarCambios'[OC-Pos], _CurrentOCPos,            // Criterio 1: Mismo OC-Pos
            'TuTablaAuxiliarCambios'[Fecha de cambio], _LatestRelevantChangeDate // Criterio 2: La última fecha de cambio relevante
        )
    )

// Retornar el activador encontrado en la auxiliar, o el original de la tabla principal si no hubo cambios relevantes.
RETURN
    COALESCE ( _ActivadorFromAux, 'TuTablaPrincipal'[Activador Original] )

Asegúrate de reemplazar los nombres de tabla y columnas (`'TuTablaPrincipal'`, `'TuTablaAuxiliarCambios'`, `[OC-Pos]`, `[Fecha de Ingreso]`, `[Activador asignado]`, `[Fecha de cambio]`, `[Activador Original]`) por los nombres exactos que usas en tu modelo de datos.

Esta columna calculada evaluará fila por fila en tu tabla principal, determinará cuál fue el último cambio de activador *antes o en* la fecha de ingreso de esa fila para ese mismo OC-Pos, y asignará el activador de ese último cambio. Si no encuentra ningún cambio relevante en la tabla auxiliar (porque la fecha de ingreso es anterior a cualquier cambio o no hay cambios para ese OC-Pos), usará el activador original que ya tienes en la tabla principal.

Este enfoque es robusto y te permitirá analizar tus datos con el activador correcto según el momento del ingreso de la mercadería.

Te sugiero visitar:

https://www.datdata.com/cursos

- Asistente Virtual de Datdata

0 Votos

SaraiRabago

hace 1 semana

Hola Octavio, 

La asignación del activador, ¿La quieres realizar desde power query o por medio de DAX? 

¡Saludos!
0 Votos

OctavioSomonte850

hace 6 días

Buenos días Sarai, la idea es solucionarlo con Power Query, ya que por el momento estoy tratando los datos en Excel.
Actualmente el problema lo tengo solucionado con una tabla auxiliar y una formula.
0 Votos

SaraiRabago

hace 5 días

Entiendo, podrías combinar ambas tablas mandando llamar la columna de fecha en que se asigna el activador y el nombre del activador, y agregar una columna condicional que coloque el nombre del activador si cumple con la condición (Utilizando la fecha de entrada de tu tabla de hechos y la fecha de asignación del activador), de manera que si la condición no se cumple, el campo quedaría en blanco y podrías eliminar esas filas.

Considero que algunas clases de este curso te podrían ayudar con tu duda:
https://www.datdata.com/powerquery

¡Saludos!
0 Votos
Es necesario estar inscrito para dejar tu duda, comentario y/o respuesta

Sobre el alumno

OctavioSomonte850

Octavio Somonte

Cursos completados

Imagen del curso Aprende Power BI con proyectos sencillos
Imagen del curso Aprende más Power BI con proyectos intermedios
Imagen del curso Certificación oficial por Microsoft de Power BI
Imagen del curso Especialización en Transformación de Datos con Power Query

Más preguntas sobre el tema

Manejo de datos con Power query + Data entry manual

OctavioSomonte850

donde descargr las fuentes de datos de las grabaciones de las clases en vivo

victoralfonso101

Error en ejercicio 11 columna dinamica

LuisGrau539

Proceso ETL

MartinFreire739

Plegado no se mantiene en Consulta MYSQL

JuanRicardo909

Recursos
  • Foro
  • Inscribirse
  • Blog
  • Ejemplos de dashboards
Cursos
  • Aprende Power BI con Proyectos
  • Análisis de Datos con Power BI y Excel
  • Especialización en Power Query
  • Certificación de Power BI
  • Tu Portafolio de Dashboards
Legales
  • Términos del servicio
  • Política de privacidad
  • Política de cookies
  • Contacto
  • Acerca
Canal de YouTube de datdata Cuenta de Linkedin de datdata Cuenta de Instagram de datdata Página de Facebook de datdata Cuenta de TikTok de datdata
© 2025 © datdata - Todos los derechos reservados