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] )
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] ) )
Ashish_Mathur
Hola,
Puede descargar mi archivo PBI desde aquí.
Espero que esto ayude.
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] )
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
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] ) )
Anónimo
En respuesta a jdbuchanan71
muchas gracias @ jdbuchanan71!