Como multiplicar dos tablas (una de ellas se va filtrando)

Hola a todos! Soy algo nuevo en este tema de Power BI y DAX , pero tengo un issue con un cálculo que estoy intentando realizar: Necesito multiplicar dos tablas que comparten variables categóricas (cualitativas) con base en valores filtrados de una de esas tablas. El detalle a continuación

Tengo varias marcas de productos en una tabla en la que cada fila corresponde al resultado de una marca frente un indicador específico (en porcentaje), mes y año. En resumen, para cada marca tengo un valor distinto por indicador para cada mes (y distintos años a su vez), es decir valores distintos para el mismo indicador de una marca de acuerdo a un periodo específico. TABLA 1

- Por otro lado, tengo una tabla con los indicadores (en esta tabla no se repiten los indicadores...hay un solo registro por cada indiciador) y para cada uno de ellos un peso relativo. TABLA 2

- El cálculo entre ambas tablas es que cada vez que filtre una marca, año y mes, el valor de cada indicador en la TABLA 1 se multiplique por el peso relativo de cada indicador de la TABLA 2 (ambas tablas se cruzan por indicador) y se muestre dicho valor. Aquí el filtro de marca, año y mes es el que va cambiando para rehacer el cálculo

La verdad estoy confundido, les agradezco mucho su ayuda!

Hola Diego_San,

a ver si lo he entendido bien (he hecho un mockup en Power BI): Tienes una tabla con las marcas, año, mes... indicador y su porcentaje, sea lo que sea que represente este número:

Tabla marcas

Y tienes otra con indicadores, cada uno acompañado de un peso, sea lo que sea que representa :)

Tabla indicadores

Si es así, y suponiendo que haya un campo común (el indicador) lo que podrías hacer es, tras comprobar que el contexto ha reducido a uno la marca, el año, etc, para lo que puedes usar la función HASONEVALUE, crear una tabla haciendo un "join" entre ambas, usando NATURALLEFTOUTERJOIN. Te quedaría algo así:

NATURALLEFTOUTERJOIN

(yo he creado una tabla calculada. En función de lo que quieras hacer después con ella tal vez no te resulte necesario).

Ves en la parte inferior de la anterior imagen que en el resultado aparecen los campos que haya añadido (solo la marca y el peso, pero podría haber más) y el indicador. Y una vez que tienes el peso y el porcentaje, etc. puedes crear nuevas columnas (con ADDCOLUMNS) en las que operes con los campos que quieras (peso x porcentaje, por ejemplo).

Espero que lo que necesites vaya por aquí... Un saludo

Muchas gracias LightVader

Ya estoy aplicando lo que sugieres y tengo la tercera tabla, sin embargo aún no lo logro con el cálculo resultante, por lo que me surgen dos dudas:

- Cuando te refieres a "tras comprobar que el contexto ha reducido a uno la marca, el año, etc" ¿es algo adicional en la fórmula? ó ¿es algo implícito cuando se hace una segmentación de datos normal?

- ¿Cómo entra en juego la funición HASONEVALUE?

De nuevo mil gracias

Hola Diego_San,

te sugería lo del HASONEVALUE porque comentabas en tu mensaje que "El cálculo entre ambas tablas es que cada vez que filtre una marca, año y mes...". Entendí que si no se filtraba, no querías hacer el cálculo. Tal y como yo te lo sugería (afortunadamente no eliminé el mockup que hice el otro día), tendrías que hacer algo como:

1. Creas la tabla intermedia con los campos que te interesen, por ejemplo aquí tienes la tabla que creé con algunos campos más:

Nueva tabla

2. Añades una nueva columna con el cálculo que desees. Por ejemplo, aquí creo una columna "Producto" que multiplica dos de las columnas anteriores:

Campo producto

Y aquí es donde entraría el uso de HASONEVALUE, de forma que el cálculo anterior se devuelva solo si se hubiese filtrado...lo que sea, el año por ejemplo. O que compruebes si sobre la columna "Año" de la tabla Marcas hay un filtro directo o no usando ISFILTERED... no sé, tendrías varias opciones.

Pero si no necesitas hacer esta comprobación, te bastaría con lo anterior para hacer el cálculo (vaya, si entendí bien lo que querías)

Saludos

Enviado por Diego_San el Mié, 27/03/2019 - 17:40