Haga coincidir el valor de la tabla A con B

Un usuario Pregunto ✅

Anónimo

Hola a todos,

Estoy tratando de escribir una medida para hacer coincidir el uso en la tabla A con el precio en la tabla B.

Cuadro A:

Nombre del cliente Escribe uso Clasificación de nivel precios
A Estándar 20 ? ?
B Estándar 55 ? ?
C Ejecutivo 55 ? ?
D Ejecutivo 126 ? ?

Cuadro B:

Escribe Clasificación de nivel Min Max precios
Estándar 1 0 5 0,00 $
Estándar 2 6 15 50,00 $
Estándar 3 dieciséis 35 48,00 $
Estándar 4 36 70 $ 45.88
Estándar 5 71 125 43,63 $
Estándar 6 126 205 $ 41.25
Ejecutivo 1 0 5 $ 100,00
Ejecutivo 2 6 15 $ 95.00
Ejecutivo 3 dieciséis 35 $ 90,00
Ejecutivo 4 36 70 $ 85.00
Ejecutivo 5 71 125 $ 80,00
Ejecutivo 6 126 205 75,00 $

La medida de DAX que necesito calcular es el «Ranking de nivel» y el «Precio» en la tabla A; coincidiría el uso de acuerdo con los valores mínimo y máximo de la tabla B para decidir en qué nivel se encuentra un cliente y cuánto se le debe cobrar.

Entonces el resultado debería ser así:

Nombre del cliente Escribe uso Clasificación de nivel precios
A Estándar 20 3 48,00 $
B Estándar 55 4 $ 45.88
C Ejecutivo 55 4 $ 85.00
D Ejecutivo 126 6 75,00 $

He intentado usar muchas funciones IF pero no funciona. ¡Agradezco mucho cualquier consejo y ayuda!

Gracias a todos,

jdbuchanan71

Hola @Anónimo

Si los valores mínimos de la tabla B son estáticos, puede agregar una columna calculada para obtener el objetivo mínimo de la tabla A según el uso.

MinValue = 
VAR RowUsage = TableA[usage]
RETURN
SWITCH (
    TRUE (),
    RowUsage < 6, 0,
    RowUsage < 16, 6,
    RowUsage < 36, 16,
    RowUsage < 71, 36,
    RowUsage < 126, 71,
    126)

Entonces son solo un par de columnas LOOKUPVALUE para obtener Tier y Pricing

Tier Ranking = 
LOOKUPVALUE ( TableB[Tier ranking], TableB[Type], TableA[Type], TableB[Min], TableA[MinValue] )
Pricing = 
LOOKUPVALUE ( TableB[pricing], TableB[Type], TableA[Type], TableB[Min], TableA[MinValue] )

pricelookup.jpg

jdbuchanan71

En respuesta a Anónimo

Hola @Anónimo,

No podemos crear fácilmente una columna calculada en la tabla A porque el uso es un recuento distinto de la tabla A. Sin embargo, esta medida extraerá el precio según el uso y el nivel.

Pricing = 
VAR Tier = SELECTEDVALUE ( TableA[Tier Type] )
RETURN
CALCULATE(
    MAX(TableB[pricing]),
            FILTER(
                TableB,
                TableB[Type] = tier &&
                [usage] >= TableB[Min]
                && [usage] <= TableB[Max] )
    )

precios.jpg

Ashish_Mathur

Hola,

Puede descargar mi archivo PBI desde aquí.

Espero que esto ayude.

Untitled.png

jdbuchanan71

Hola @Anónimo

Si los valores mínimos de la tabla B son estáticos, puede agregar una columna calculada para obtener el objetivo mínimo de la tabla A según el uso.

MinValue = 
VAR RowUsage = TableA[usage]
RETURN
SWITCH (
    TRUE (),
    RowUsage < 6, 0,
    RowUsage < 16, 6,
    RowUsage < 36, 16,
    RowUsage < 71, 36,
    RowUsage < 126, 71,
    126)

Entonces son solo un par de columnas LOOKUPVALUE para obtener Tier y Pricing

Tier Ranking = 
LOOKUPVALUE ( TableB[Tier ranking], TableB[Type], TableA[Type], TableB[Min], TableA[MinValue] )
Pricing = 
LOOKUPVALUE ( TableB[pricing], TableB[Type], TableA[Type], TableB[Min], TableA[MinValue] )

pricelookup.jpg

Anónimo

En respuesta a jdbuchanan71

Hola @ jdbuchanan71, muchas gracias por tu solución. Funciona perfectamente para este modelo de muestra. Sin embargo, cuando aplico a mi modelo real, donde el «uso en la tabla A es una medida (recuento distinto de un texto), la columna calculada MinValue no funciona. Devuelve 0 para todos. No estoy seguro de cómo solucionarlo este problema. Muchas gracias por su ayuda.

jdbuchanan71

En respuesta a Anónimo

@Anónimo

Intente agregar el uso como una columna calculada en la Tabla A simplemente agregando una columna y poniendo =[usage measure]. ¿Eso te da lo que necesitas? Si no es así, comparta su archivo .pbix para que podamos ver cómo están realmente organizados los datos.

Anónimo

En respuesta a jdbuchanan71

Hola @ jdbuchanan71,

Intenté crear una columna y la formulé como sugirió: contar mapa único =[usage measure]. Resumiría el recuento distinto como 6 como a continuación

Capture4.JPG

Mi medida de uso es: uso = DISTINCTCOUNT (TableA[Maps])

Si hago el recuento (distinto) de «mapas» en los valores, contará correctamente como «uso», pero no puedo usarlo como una columna calculada.

¿Existe alguna forma de crear una columna calculada que funcione como la medida de «uso»?

Gracias, espero explicártelo bien.

jdbuchanan71

En respuesta a Anónimo

@Anónimo

No sé cómo se ve su medida de «uso». ¿Puede compartir su archivo .pbix?

Anónimo

En respuesta a jdbuchanan71

Hola @ jdbuchanan71, mi La medida de uso es simple, esto es: uso = DISTINCTCOUNT (TableA[Maps]).

No sé cómo compartir un archivo .pbix aquí en el foro. ¿Puedes guiarme?

Agradezco mucho su rápida respuesta.

jdbuchanan71

En respuesta a Anónimo

Puede simplemente cargar el archivo en OneDrive o DropBox y luego compartir el enlace aquí.

Anónimo

En respuesta a jdbuchanan71

Hola @ jdbuchanan71

Este es mi archivo .pbix aquí

Intenté crear una columna calculada que funcione igual que la medida «uso», de modo que pueda usar el DAX que sugirió para MinValue, pero no ha tenido éxito hasta ahora.

Entonces, en última instancia, en la TablaA necesito crear columnas calculadas para BUSCAR «Clasificación de nivel» y «Precios» de la Tabla B.

Muchas gracias por su ayuda,

jdbuchanan71

En respuesta a Anónimo

Hola @Anónimo,

No podemos crear fácilmente una columna calculada en la tabla A porque el uso es un recuento distinto de la tabla A. Sin embargo, esta medida extraerá el precio según el uso y el nivel.

Pricing = 
VAR Tier = SELECTEDVALUE ( TableA[Tier Type] )
RETURN
CALCULATE(
    MAX(TableB[pricing]),
            FILTER(
                TableB,
                TableB[Type] = tier &&
                [usage] >= TableB[Min]
                && [usage] <= TableB[Max] )
    )

precios.jpg

Anónimo

En respuesta a jdbuchanan71

muchas gracias @ jdbuchanan71!

Deja un comentario

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