Compare el valor en 2 tablas diferentes y devuelva el resultado

Un usuario Pregunto ✅

mail2vjj

Hola,

Tengo un problema para comparar números en una columna con un conjunto limitado de números en una columna de tabla diferente y devolver un resultado en una nueva columna.

Por favor, eche un vistazo a las tablas a continuación, luego podré describir mi problema de una mejor manera.

La primera tabla es la tabla Ventas, que contiene la identificación del empleado y las Ventas (que es una columna calculada).

La segunda tabla es la tabla de incentivos, que contiene las losas de incentivos y el porcentaje de incentivo.

Ahora quiero calcular el porcentaje de incentivo en función de las ventas.

Tabla de ventas

ID de empleado Ventas Incentivo ganado
1 24764
2 77984
3 103161
4 63034
5 154584
6 62805
7 77631
8 122275
9 110846
10 69602

Tabla de incentivos

LOSAS HASTA INCENTIVO%
64999 1,00%
90000 1,25%
115000 2,00%
140000 2,50%
165000 3,00%
195000 3,50%
250000 4,00%
275000 4,50%
275001 5,00%

Entonces, por ejemplo, para el número de identificación de empleado 2, las ventas son 77,984, por lo que esto es mayor que 64,999 y menos de 90,000 (en la tabla de incentivos, columna ‘Losas hasta’), por lo que la columna ‘Incentivo ganado’ en la tabla de ventas debería devolver el valor 1,00%.

Para el número de identificación de empleado 5, las ventas son 154,584, por lo que la columna ‘Incentivo ganado’ muestra 2.50%.

Para el número de identificación de empleado 1, las ventas son 24,764, por lo que la columna ‘Incentivo ganado’ muestra 0%.… así sucesivamente.

Nuevamente, la columna Ventas en la Tabla de ventas es una COLUMNA CALCULADA y tiene más de 500 filas, que deben compararse con la columna ‘LOSAS HASTA’.

He creado una relación entre las ‘Ventas’ [Sales] columna y el ‘Incentivo’ [Slabs up to] columna e intenté usar la función SI y la función RELACIONADA, que solo funciona si los valores son exactamente los mismos, por ejemplo. si la columna de ventas tiene 64999, el resultado es 1%, pero si las ventas son 65000, el resultado es un espacio en blanco.

Perdón por publicar un problema durante demasiado tiempo y estaré agradecido si alguien me puede ayudar con la solución.

Gracias,

Hola @ mail2vjj,

He reproducido su escenario y obtengo el resultado esperado. Consulte la siguiente solución paso a paso.

1. Cree una columna de cálculo para obtener el incentivo máximo[SLABS UPTO] en comparación con las ventas[Sales].

Column = CALCULATE(MAX(Incentive[SLABS UPTO]),FILTER(Incentive,Incentive[SLABS UPTO]<=Sales[Sales]))

2. Cree otra nueva tabla haciendo clic en «Nueva tabla» en Modelado en la página de inicio.

Table = ALLSELECTED(Incentive)

1.PNG

3. Cree una relación entre la «Tabla» y la tabla de ventas mediante LOSAS HASTA.

2.PNG

4. Cree otra columna calculada para obtener el resultado esperado.

Incentive Earned = IF(ISBLANK(RELATED('Table'[INCENTIVE %])),0,RELATED('Table'[INCENTIVE %]))

3.png

Atentamente,
Angelia

Hola @ mail2vjj,

He reproducido su escenario y obtengo el resultado esperado. Consulte la siguiente solución paso a paso.

1. Cree una columna de cálculo para obtener el incentivo máximo[SLABS UPTO] en comparación con las ventas[Sales].

Column = CALCULATE(MAX(Incentive[SLABS UPTO]),FILTER(Incentive,Incentive[SLABS UPTO]<=Sales[Sales]))

2. Cree otra nueva tabla haciendo clic en «Nueva tabla» en Modelado en la página de inicio.

Table = ALLSELECTED(Incentive)

1.PNG

3. Cree una relación entre la «Tabla» y la tabla de ventas mediante LOSAS HASTA.

2.PNG

4. Cree otra columna calculada para obtener el resultado esperado.

Incentive Earned = IF(ISBLANK(RELATED('Table'[INCENTIVE %])),0,RELATED('Table'[INCENTIVE %]))

3.png

Atentamente,
Angelia

mail2vjj

En respuesta a v-huizhn-msft

Hola @ v-huizhn-msft

En primer lugar, gracias por su respuesta, su solución funcionó y obtuve el resultado deseado, pero tuve que modificar un poco su solución.

Así que ahora tengo un par de preguntas, si es tan amable de responderlas por mí.

Le mostraré el problema que enfrenté y un pequeño ajuste que funcionó, también agradecería mucho si pudiera explicarme la segunda fórmula que utilizó y cómo funciona la función ISBLANK.

1.

Intenté crear una nueva tabla, usé la función ALLSELECTED y me dio la misma tabla con una fila adicional. Verifiqué mi archivo de Excel y no había una fila en blanco y probablemente por eso me dio un error cuando intenté crear una relación entre las ‘Ventas’ [Column] y la ‘Tabla’ [Slabs Upto]. (Por alguna razón, no puedo insertar la captura de pantalla).

Entonces, para resolver esto, acabo de crear una nueva tabla de referencia a partir de la tabla de incentivos y obtuve la relación.

2.

Intenté usar una función IF simple, sin crear una nueva tabla, entonces, ¿por qué no funcionó, ya que existe una relación entre la tabla de Ventas y la tabla de Incentivos?

Incentive Earned = IF ('Sales' [Column] = (Related('Incentive' [Slabs])), RELATED('Incentive'[Incentive %]),0))

…… mi paréntesis podría estar equivocado.

¿Por qué tuvimos que crear una tabla completamente nueva y crear una relación?

3.

¿Puede explicar cómo funciona su fórmula y cómo funciona ISBLANK en esta fórmula?

Incentive Earned = IF(ISBLANK(RELATED('Table'[INCENTIVE %])),0,RELATED('Table'[INCENTIVE %]))

Como ya se habrá imaginado, soy bastante nuevo en Power BI y realmente lo agradecería si pudiera ayudarme con esto.

Muchas gracias por la solución.

En respuesta a mail2vjj

Hola @ mail2vjj,

1. Edite su tabla de recursos y compruebe si hay alguna operación, consulte la línea resaltada en rojo.

1.PNG

2. Si no hay relación entre dos tablas, la función RELACIONADA no se puede utilizar. Si no creamos una nueva tabla, no se puede crear la relación. Debido a que la columna proviene de la tabla de incentivos, si crea una relación con Incentivo, es fácil de reconocer, al igual que crear una relación por mí mismo.

3.

Incentive Earned = IF(ISBLANK(RELATED('Table'[INCENTIVE %])),0,RELATED('Table'[INCENTIVE %]))

La función ESBLANCO se usa para juzgar si está RELACIONADO (‘Tabla'[INCENTIVE %] está en blanco. Si está en blanco, la prueba_lógica devuelve Verdadero, el resultado es 0. Si el prueba_lógica return Falso, el resultado es RELACIONADO (‘Tabla'[INCENTIVE %].

Además, marque la respuesta como respuesta si le resulta útil. Muchas gracias.

Atentamente,
Angelia

mail2vjj

En respuesta a v-huizhn-msft

Hola @ v-huizhn-msft,

Gracias por su respuesta, sin embargo, todavía estoy un poco confundido.

Para 1.

Sí, verifiqué mi consulta y tiene el paso ‘Tipo cambiado’ en la sección de pasos aplicados.

Captura de pantalla (5) .png

La fila adicional en la nueva tabla con la función 'AllSelected'La fila adicional en la nueva tabla con la función ‘AllSelected’

Para 2.

Esto es lo que entendí de su respuesta. Creamos una nueva tabla porque sin ella, poner las fórmulas se convertiría en una especie de referencia circular.

Para 3.

¿Por qué estamos comprobando si la columna% de incentivo está en blanco o no? La columna no está en blanco, por lo que no debería devolver el valor falso.

Además, en lugar de marcar la columna% de incentivo, ¿no deberíamos marcar la nueva columna que creamos y usarla para obtener el resultado en la columna de Incentivo ganado?

La nueva columna llamada 'Columna'La nueva columna llamada ‘Columna’

Nuevamente, gracias por su solución, funciona y me da el resultado deseado, pero solo estoy tratando de entender la lógica detrás de esto y en qué me equivoqué en mi solución / modelado.

Gracias,

Vishesh

Deja un comentario

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