Replicar una fórmula ÍNDICE/COINCIDIR usando múltiples variables

Un usuario Pregunto ✅

Anónimo

Tengo dos tablas de datos.

1. Datos de la llamada: los campos importantes aquí son «ID DE LA LLAMADA», «AGENTE», «HORA DE INICIO DE LA LLAMADA», «HORA DE FINALIZACIÓN DE LA LLAMADA»

2. Registros de interacción: los campos importantes aquí son «AGENTE», «ID DE REGISTRO», «HORA DE CREACIÓN»

Hago coincidir los registros de interacción con las llamadas en función de que sea el mismo AGENTE y el TIEMPO DE CREACIÓN se encuentre entre los tiempos de INICIO DE LLAMADA / FIN DE LLAMADA y luego agrego la ID DE LLAMADA al Registro de interacción. Puede haber múltiples registros de interacción que coincidan con una sola llamada. Además, es posible que una llamada no tenga registros de interacción coincidentes o que un registro de interacción no tenga llamadas coincidentes.

Me gustaría mover la coincidencia a POWERBI en lugar de hacerlo en Excel antes de cargar porque estoy tratando con millones de registros. En este momento, la matriz de Excel que uso es:

{=IFERROR(ÍNDICE(‘Datos de llamadas’!$A:$A,COINCIDIR(1,IF(IR-AGENT=’Datos de llamadas’!$R:$R,IF(HORA DE CREACIÓN>=’Datos de llamadas’!$ C:$C,IF(HORA DE CREACIÓN<='Datos de llamada'!$E:$E,1))),0)),0)}

¿Cómo puedo replicar esto en Power BI?

@Anónimo

Puedes intentar hacer eso en Power Query.

Cheque

let  
    Call=  Table.FromRows({{1,	1,	"3/1/2017",	"4/1/2017"},{2,	2,	"3/1/2017",	"4/1/2017"},{3,	3,	"3/1/2017",	"4/1/2017"},{4,4,	"3/1/2017",	"4/1/2017"}}, {"CALL ID", "AGENT","CALL START TIME","CALL END TIME"}),

    Interaction=Table.FromRows({{1,1,"3/2/2017"},{1,2,"3/3/2017"},{2,3,"3/3/2017"},{5,4,"3/3/2017"}},{"AGENT" , "RECORD ID", "CREATION TIME"}),
 
 
    #"Merged Queries" = Table.NestedJoin(Interaction,{"AGENT"},Call,{"AGENT"},"NewColumn",JoinKind.LeftOuter),
    #"Expanded NewColumn" = Table.ExpandTableColumn(#"Merged Queries", "NewColumn", {"CALL ID", "AGENT", "CALL START TIME", "CALL END TIME"}, {"NewColumn.CALL ID", "NewColumn.AGENT", "NewColumn.CALL START TIME", "NewColumn.CALL END TIME"}),
    #"Filtered Rows" = Table.SelectRows(#"Expanded NewColumn", each ([CREATION TIME] >= [NewColumn.CALL START TIME] and [CREATION TIME] <=[NewColumn.CALL END TIME]) or ([NewColumn.CALL ID] = null))
in
    #"Filtered Rows"

dear watson

Como señaló Eric, puede hacer la unión con bastante facilidad en Power Query, lo hago mucho para conciliaciones.

Aquí está la versión sin código:

Abra el Editor de consultas y seleccione una de las tablas, luego use «Combinar consultas» en la parte superior derecha de la ventana del Editor de consultas.

Captura.PNG

Está buscando una «unión externa completa» en AGENTE que le proporcione registros coincidentes y no coincidentes.

Expanda la columna y elija la columna CALLID para agregarla a los registros, esto le dará un montón de registros adicionales ya que cada llamada coincidente se agregará como una fila.

Deberías poder resolverlo desde allí.

dear watson

Como señaló Eric, puede hacer la unión con bastante facilidad en Power Query, lo hago mucho para conciliaciones.

Aquí está la versión sin código:

Abra el Editor de consultas y seleccione una de las tablas, luego use «Combinar consultas» en la parte superior derecha de la ventana del Editor de consultas.

Captura.PNG

Está buscando una «unión externa completa» en AGENTE que le proporcione registros coincidentes y no coincidentes.

Expanda la columna y elija la columna CALLID para agregarla a los registros, esto le dará un montón de registros adicionales ya que cada llamada coincidente se agregará como una fila.

Deberías poder resolverlo desde allí.

@Anónimo

Puedes intentar hacer eso en Power Query.

Cheque

let  
    Call=  Table.FromRows({{1,	1,	"3/1/2017",	"4/1/2017"},{2,	2,	"3/1/2017",	"4/1/2017"},{3,	3,	"3/1/2017",	"4/1/2017"},{4,4,	"3/1/2017",	"4/1/2017"}}, {"CALL ID", "AGENT","CALL START TIME","CALL END TIME"}),

    Interaction=Table.FromRows({{1,1,"3/2/2017"},{1,2,"3/3/2017"},{2,3,"3/3/2017"},{5,4,"3/3/2017"}},{"AGENT" , "RECORD ID", "CREATION TIME"}),
 
 
    #"Merged Queries" = Table.NestedJoin(Interaction,{"AGENT"},Call,{"AGENT"},"NewColumn",JoinKind.LeftOuter),
    #"Expanded NewColumn" = Table.ExpandTableColumn(#"Merged Queries", "NewColumn", {"CALL ID", "AGENT", "CALL START TIME", "CALL END TIME"}, {"NewColumn.CALL ID", "NewColumn.AGENT", "NewColumn.CALL START TIME", "NewColumn.CALL END TIME"}),
    #"Filtered Rows" = Table.SelectRows(#"Expanded NewColumn", each ([CREATION TIME] >= [NewColumn.CALL START TIME] and [CREATION TIME] <=[NewColumn.CALL END TIME]) or ([NewColumn.CALL ID] = null))
in
    #"Filtered Rows"

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *