Forum Discussion

Syndicate_Admin's avatar
Syndicate_Admin
Icon for Administrator rankAdministrator
5 years ago
Solved

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:

  1. 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);
  2. 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ónFecha ME
131-ago-21
231-ago-21
331-ago-21
431-ago-21
531-ago-21
631-ago-21
731-ago-21
831-ago-21
931-ago-21
1031-ago-21

Datos de Vendor1 y Vendor2 Data (tablas separadas)

Proveedor 1 Proveedor 2
ID de transacciónFecha MEID de proveedor ID de transacciónFecha MEID de proveedor
131-ago-21Proveedor 1 231-ago-21Proveedor 2
331-ago-21Proveedor 1 431-ago-21Proveedor 2
531-ago-21Proveedor 1 631-ago-21Proveedor 2
731-ago-21Proveedor 1 831-ago-21Proveedor 2
931-ago-21Proveedor 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:

Proveedor1 Rec =
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 ()
)
¿Cuál es la sintaxis correcta para usar para lo anterior, y cómo se vería para lograr mi 2º requisito donde necesito encontrar las transacciones que no aparecen en ninguno de los archivos del proveedor (es decir, el ID de transacción 10 no está en ninguno de los archivos)?

Gracias.
  • 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's avatar
      Syndicate_Admin
      Icon for Administrator rankAdministrator

      @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's avatar
        Syndicate_Admin
        Icon for Administrator rankAdministrator

        @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.

  • 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 ()
    )