Forum Discussion
Instrucciones Multiple Condition If
Hola
Estoy intentando escribir una instrucción DAX IF con varias condiciones utilizando datos de dos tablas.
Mi conjunto de datos principal tiene una lista de ID de transacción junto con una fecha de fin de mes. Luego tengo otras dos tablas de datos relacionadas de proveedores donde enumeran un subconjunto de los ID de transacción, la misma referencia de fecha de fin de mes y una columna que denota el ID del proveedor. Quiero crear dos tipos de medidas:
- Una medida que identifica aquellas transacciones que coinciden entre el conjunto de datos primario y el de un archivo de proveedor (esto necesitará dos medidas: una por proveedor);
- Una medida que identifica cualquier transacción que no figure en ninguno de los archivos del proveedor.
Mis datos de origen se pueden representar de la siguiente manera:
Datos primarios:
| ID de transacción | Fecha ME |
| 1 | 31-ago-21 |
| 2 | 31-ago-21 |
| 3 | 31-ago-21 |
| 4 | 31-ago-21 |
| 5 | 31-ago-21 |
| 6 | 31-ago-21 |
| 7 | 31-ago-21 |
| 8 | 31-ago-21 |
| 9 | 31-ago-21 |
| 10 | 31-ago-21 |
Datos de Vendor1 y Vendor2 Data (tablas separadas)
| Proveedor 1 | Proveedor 2 | |||||
| ID de transacción | Fecha ME | ID de proveedor | ID de transacción | Fecha ME | ID de proveedor | |
| 1 | 31-ago-21 | Proveedor 1 | 2 | 31-ago-21 | Proveedor 2 | |
| 3 | 31-ago-21 | Proveedor 1 | 4 | 31-ago-21 | Proveedor 2 | |
| 5 | 31-ago-21 | Proveedor 1 | 6 | 31-ago-21 | Proveedor 2 | |
| 7 | 31-ago-21 | Proveedor 1 | 8 | 31-ago-21 | Proveedor 2 | |
| 9 | 31-ago-21 | Proveedor 1 |
En la vista "Relaciones", he vinculado los ID de la tabla principal a las dos tablas de proveedores (muchas a muchas, ambas direcciones) como el enlace activo, luego los campos de datos ME (también muchos a muchos, ambas direcciones).
Mi attemp en la fórmula DAX para extraer las transacciones coincidentes:
SI ( y(
'Datos primarios'[ID de transacción] = 'Vendor1'[ID de transacción],
RELACIONADO ( 'Datos primarios'[Fecha ME] ) = 'Proveedor1'[Fecha ME]),
'Vendor1'[ID de proveedor],
EN BLANCO ()
)
Aquí está la solución a la declaración del problema anterior. Esta es una solución de varios pasos:
Paso 1: Power Query
Edite la consulta subyacente a la tabla Datos principales creando una nueva columna y fusionando los campos "Fecha me" e "ID de transacción".=Text.Combine({Text.From([Date], "en-GB"), "-", Text.From([Transaction ID], "en-GB")})
Como este debería ser un valor único, esto se puede refinar aún más eliminando cualquier duplicado erróneo.
Repita el proceso anterior para las tablas "Vendor1" y "Vendor2".
Paso 2: Escritorio
Ahora que tenemos referencias únicas en todas las tablas de origen, podemos crear un vínculo uno a uno entre la tabla Datos primarios y las dos tablas de datos de proveedor.
Con las nuevas relaciones de tablas establecidas, ahora podemos agregar fácilmente nuevas columnas a la tabla de datos primarios utilizando DAX (una columna por tabla de datos de proveedor) utilizando la fórmula:Vendor1 Tag = RELATED('Vendor1 Data'[Vendor ID])
Podemos usar una lógica similar para crear una tercera columna para identificar cualquier elemento no igualado utilizando la siguiente fórmula DAX:Not Found = IF ( 'Primary Data'[Vendor1 Tag] = BLANK () && 'Primary Data'[Vendor2 Tag] = BLANK (), "Not found", BLANK () )
4 Replies
- Syndicate_Admin
Administrator
@G_Whit-Reino Unido Bueno, si se trata de una medida, debe usar agregaciones alrededor de las referencias de columna.
- Syndicate_Admin
Administrator
@Greg_Deckler , entonces tal vez una medida no sea la solución correcta. Tal vez necesite agregar 2 columnas a la tabla datos primarios extrayendo el ID de proveedor en las columnas respectivas, luego una 3ª columna para denotar cualquier transacción que esté en blanco.
¿Cuál sería el código DAX correcto para lograr lo anterior?
¿Gracias?
- Syndicate_Admin
Administrator
@G_Whit-Reino Unido Bueno, su otro problema es que RELATED no funcionará en una relación de muchos a muchos. Hay muchas incógnitas aquí. Le recomiendo que proporcione más datos de muestra o un PBIX de muestra que pueda replicar completamente su situación. Esa es la única manera de probar y estar realmente seguro de una solución.
- Syndicate_Admin
Administrator
Aquí está la solución a la declaración del problema anterior. Esta es una solución de varios pasos:
Paso 1: Power Query
Edite la consulta subyacente a la tabla Datos principales creando una nueva columna y fusionando los campos "Fecha me" e "ID de transacción".=Text.Combine({Text.From([Date], "en-GB"), "-", Text.From([Transaction ID], "en-GB")})
Como este debería ser un valor único, esto se puede refinar aún más eliminando cualquier duplicado erróneo.
Repita el proceso anterior para las tablas "Vendor1" y "Vendor2".
Paso 2: Escritorio
Ahora que tenemos referencias únicas en todas las tablas de origen, podemos crear un vínculo uno a uno entre la tabla Datos primarios y las dos tablas de datos de proveedor.
Con las nuevas relaciones de tablas establecidas, ahora podemos agregar fácilmente nuevas columnas a la tabla de datos primarios utilizando DAX (una columna por tabla de datos de proveedor) utilizando la fórmula:Vendor1 Tag = RELATED('Vendor1 Data'[Vendor ID])
Podemos usar una lógica similar para crear una tercera columna para identificar cualquier elemento no igualado utilizando la siguiente fórmula DAX:Not Found = IF ( 'Primary Data'[Vendor1 Tag] = BLANK () && 'Primary Data'[Vendor2 Tag] = BLANK (), "Not found", BLANK () )