Haga coincidir varias columnas y encuentre los valores correspondientes usando DAX

Un usuario Pregunto ✅

VHosamane

Este es el escenario que tengo y necesito ayuda con la sintaxis de campo calculado DAX para llegar con los dos campos en la tabla de transacciones.

Tengo una tabla de búsqueda como se muestra, que tiene filas distintas con una combinación de ClientName y ProjectName.

Tabla de búsqueda

Nombre del cliente Nombre del proyecto Tipo de proyecto Producto
Cliente1 Proyecto 1 tecnología SAAS
Cliente2 Proyecto2 Servicio ESO
Cliente1 Proyecto2 tecnología I+D
Cliente2 Proyecto 1 Servicio ESO
Cliente3 Proyecto3 Ambos SAAS
Cliente3 Proyecto 1 Servicio I+D

Tabla de transacciones

Cliente

Nombre

Proyecto

Nombre

Proyecto

Costo

Emp

Nombre

Buscar

EmpType

Hoja de tiempo

Fecha

Aporte

Hora

Buscar

Tasa Emp.

Calcular

EmpCost

Calcular

Producto

Calcular

Tipo de proyecto

Cliente1 Proyecto 1 $9,999,999 EmpA Emp 2-ene 4 $100 $400 SAAS tecnología
Cliente1 Proyecto 1 $9,999,999 EmpB Contrato 2-ene 4 $200 $800 SAAS tecnología
Cliente1 Proyecto 1 $9,999,999 EmpC Emp 2-ene 4 $100 $400 SAAS tecnología
Cliente1 Proyecto 1 $9,999,999 EmpD Emp 2-ene 4 $100 $400 SAAS tecnología
Cliente1 Proyecto2 $1,000,000 EmpA Emp 9 de febrero 8 $100 $800 I+D tecnología
Cliente1 Proyecto2 $1,000,000 EmpB Contrato 9 de febrero 8 $200 $1,200 I+D tecnología
Cliente2 Proyecto 1 $5,000,000 EmpM Emp 2-ene 8 $100 $800 ESO Servicio
Cliente2 Proyecto 1 $5,000,000 EmpM Emp 12-ene 8 $100 $800 ESO Servicio
Cliente4 Proyecto 1 $7,500,000 Emp A Emp 10-abr 8 $100 $800 N / A N / A
Cliente1 Proyecto7 $100,000 EmpA Emp 2 de febrero 8 $100 $800 N / A

N / A

Según ClientName y Project name en Transaction-Table, debe buscar ProjectType & Product en la tabla de búsqueda y obtener el valor en Transaction-Table, Calc-Product y Calc-ProjectType respectivamente. Si la combinación de ClientName y ProjectName no existe, ingrese N/A en ambas columnas.

¿Puede ayudarme con la sintaxis del campo calculado DAX en la tabla de transacciones? ¿Sería posible sin unir/vincular las dos tablas?

picante

Use Power Query, combine las consultas en ClientName y ProjectName usando una unión IZQUIERDA (con la tabla de transacciones primero).

Expanda la columna ‘Tabla’ para devolver Producto y Tipo de proyecto.

Reemplace cualquier valor nulo con N/A

Anónimo

Sí, es posible, pero lo haría en Power Query como lo sugiere @HotChilli. Si su tabla de transacciones es realmente grande, entonces crear columnas calculadas como esta es NO-NO.

Pero una de las columnas sería (no recomiendo hacerlo de esta manera, TT – tabla de transacciones, LT – tabla de búsqueda):

Calc-Product =
var __client = TT[Client Name]
var __proj = TT[Project Name]
var __product = 
	CALCULATE(
		VALUES( LT[Product] ),
		TREATAS(
			{__client, __proj},
			LT[Client Name],
			LT[Project Name]
		),
	)
return
	if( __product = blank(), "N/A", __product )

Si esta expresión falla en alguna parte, significa que VALUES( LT[Product] ) devuelve más de 1 valor y tiene un problema con la duplicación en el LT. Tenga en cuenta que esto funcionará bien cuando NO HAY RELACIONES entre las dos tablas. Si los hay, entonces debe usar la función RELACIONADO.

Mejor

Darek

VHosamane

En respuesta a Anónimo

¿Qué hay de malo en la sintaxis de la fórmula calculada?

Anónimo

En respuesta a VHosamane

Elimina la coma antes del paréntesis que termina en CALCULATE.

Mejor

Darek

VHosamane

En respuesta a Anónimo

Gracias @Anónimo y @HotChilli. Probé ambas soluciones y opté por la solución mencionada por @HotChilli. Como @Anonymous mencionó correctamente en la nota, la solución funcionaría solo si no hay una relación. Así que es muy importante ir a través de los detalles. Muchas gracias a los dos.

VHosamane

En respuesta a Anónimo

Hola Darek,

Calc-Product = 
var __client = TT[Client_Name]
var __proj = TT[Project_Name]
var __product =
    CALCULATE(
            VALUES(LT[Product]),
            TREATAS(
                {__client, __proj},
                LT[ClientName],
                LT[ProjectName]
                ),
            )
return
    IF(__product = BLANK(), "N/A", __product)

Intenté este código, pero aparece este error: Se requiere el argumento ‘3’ en la función CALCULATE.

picante

Use Power Query, combine las consultas en ClientName y ProjectName usando una unión IZQUIERDA (con la tabla de transacciones primero).

Expanda la columna ‘Tabla’ para devolver Producto y Tipo de proyecto.

Reemplace cualquier valor nulo con N/A

calero

En respuesta a picante

Hola @HotChilli,

Muchas gracias por esta respuesta, no sabía que era posible hacer uniones anidadas, es decir, fusionar dos tablas con más de una columna clave.

Estupendo,

¡feliz aprendizaje!

Fernando

Deja un comentario

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