Forum Discussion
Dax
Querida familia PBI ,
Son sólo 2 meses que he comenzado a usar power bi I como mi trabajo diario ahora
Estoy atrapado en un problema por favor considere si usted puede responder a esta pregunta para que me ayude mucho
Tengo una medida que calcula a partir de diferentes campos y me da un valor que se puede filtrar usando la segmentación de fecha.
Llamemos a esta medida como prueba
Ahora mi problema es que tengo que poner valores que obtengo de este rango de medida de prueba sabia en una tabla como por ejemplo el resultado esperado es como abajo
Nombre <0.25 0.25-0.50 0.50-0.75 >0.75
A 1 2 66 23
B 12 22 6 28
C 12 22 6 28
Actualmente lo he logrado usando un largo camino que es que estoy haciendo cuatro medidas y cada medida cuenta filas filtrando la tabla de acuerdo con el valor, por ejemplo
Para <0.25 - Countrows(Filter(test<0.25))
Leí en alguna parte con respecto a este dax de evaluación
Lo que devuelve una tabla, así que estaba pensando si es posible obtener mi resultado esperado usando evaluar
Nota : el nombre colunmn en el resultado esperado anterior es un campo de una tabla de estudiantes donde los valores son A,B y C
Por favor, proyecte algo de luz sobre mi pregunta gracias
saludos
Sujit
24 Replies
- Pragati11Super User
Hola @Sujit_Thakur ,
Lo que puede probar es crear una columna calculada que define sus categorías como <0.25 , 0.25-0.50 , 0.50-0.75, >0.75 basado en su medida TEST.
A continuación, intente usar esta columna en un objeto visual de matriz en la sección COLUMN junto con la columna Nombre en la sección ROW.
Gracias
Pragati
- Sujit_ThakurSolution Sage
Estimado cliente, agradezco su respuesta
Pero si creé una columna calculada mis valores no cambiarán cuando cambie la selección de fecha de mi segmentación de fecha
- ArklurResolver II
@Sujit_Thakur escribió:Lo que devuelve una tabla, así que estaba pensando si es posible obtener mi resultado esperado usando evaluar
No, EVALUATE no es avaialbe dentro de PBI, al menos no en este sentido. El único lugar donde se podría utilizar es importar datos de SSAS, por ejemplo.
- Sujit_ThakurSolution Sage
Estimado @Arklur ,
¿Hay alguna manera de obtener una salida como una tabla usando DAX?
Tengo dax studio instalado en mi sistema, leí en algún lugar que puedo usar evaluar usando DAX studio
- FarhanAhmedCommunity Champion
No se puede crear un grupo a medida
Desafortunadamente, usted necesita crear 4 medidas diferentes cada uno para un rango particular
a continuación, poner esas medidas en la columna y obtendrá sus resultados.
- Sujit_ThakurSolution Sage
- Greg_DecklerCommunity Champion
@Sujit_Thakur - Desde que me mencionaste voy a chime en. A menos que me lo perdiera, no tengo un buen sentido de los datos de origen. Veo la salida esperada. ¿Puede publicar una muestra de cómo se ven los datos de origen o apuntarme a dónde se publican? Gracias.
- amitchandakSuper User
@Sujit_Thakur , ver si la segmentación puede ayudar
Segmentación
https://www.daxpatterns.com/dynamic-segmentation/
https://www.daxpatterns.com/static-segmentation/
https://www.poweredsolutions.co/2020/01/11/dax-vs-power-query-static-segmentation-in-power-bi-dax-power-query/
https://radacad.com/grouping-and-binning-step-towards-better-data-visualization - AnonymousNot applicable
@Sujit_Thakur Si los segmentos son fijos, es decir (<0.25 0.25-0.50 0.50-0.75 >0.75).
Puede utilizar el patrón de tabla de parámetros.
- v-zhenbw-msftCommunity Support
Hola @Sujit_Thakur ,
Creamos una muestra. Podemos usar una tabla de matriz y una medida para satisfacer sus necesidades.
1. Cree una nueva tabla.
Table 2 = CROSSJOIN(VALUES('Table'[Name]),{"<0.25","0.25-0.5"})2. Luego podemos crear una tabla de matriz basada en la nueva tabla, crear una medida y ponerla en Valores.
Measure 2 = SWITCH( TRUE(), MAX('Table 2'[Value]) = "<0.25",CALCULATE(COUNT('Table'[Name]),FILTER('Table',[Measure]<0.25 && 'Table'[Name]=MAX('Table 2'[Name]))), MAX('Table 2'[Value]) = "0.25-0.5",CALCULATE(COUNT('Table'[Name]),FILTER('Table',[Measure]>=0.25&&[Measure]<0.5 && 'Table'[Name]=MAX('Table 2'[Name]))))Si no cumple con sus requisitos, ¿podría proporcionar una muestra de maqueta basada en datos falsos o describir los campos de cada tabla y las relaciones entre tablas simplemente?
Será útil si puede mostrarnos el resultado esperado exacto basado en las tablas.
Cargue sus archivos en OneDrive para la Empresa y comparta el enlace aquí. Por favor, no contenga ninguna Información Confidencial o Datos Reales en su respuesta.
Saludos
Equipo de apoyo a la comunidad _ zhenbw
Si este post ayuda,entonces considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.
BTW, pbix como adjunto.
- Sujit_ThakurSolution Sage
Estimado @v-zhenbw-msft @Greg_Deckler y todo ,
siguiente es pasado muestra de datos para la pregunta, tenga en cuenta la medida "Prueba" no es más que dividir (HP,OP).
Espero que después de este ejemplo de datos @v-zhenbw-msft usted puede ayudarme con su técnica previamente discutida
Fecha Nombre Hp Op 7/1/2020 A 23 22 7/2/2020 A 20 19 7/3/2020 A 20 29 7/4/2020 A 22 40 7/5/2020 A 21 100 7/1/2020 B 22 50 7/2/2020 B 21 50 7/3/2020 B 23 100 7/4/2020 B 22 23 7/5/2020 B 20 17 7/1/2020 C 23 20 7/2/2020 C 21 17 7/3/2020 C 22 15 7/4/2020 C 21 14 7/5/2020 C 23 12 - v-zhenbw-msftCommunity Support
Hola @Sujit_Thakur ,
Podemos crear una medida para satisfacer sus necesidades.
Antes de eso necesitamos crear una nueva tabla.
Table = CROSSJOIN(VALUES('Data'[Name]),{"<0.25","0.25-0.5","0.5-0.75",">0.75"})Entonces crea una medida como esta,
Measure = SWITCH( TRUE(), MAX('Table'[Value]) = "<0.25",CALCULATE(COUNT('Data'[Name]),FILTER('Data',[Test]<0.25 && 'Data'[Name]=MAX('Table'[Name]))), MAX('Table'[Value]) = "0.25-0.5",CALCULATE(COUNT('Data'[Name]),FILTER('Data',[Test]>=0.25&&[Test]<0.5 && 'Data'[Name]=MAX('Table'[Name]))), MAX('Table'[Value]) = "0.5-0.75",CALCULATE(COUNT('Data'[Name]),FILTER('Data',[Test]>=0.5&&[Test]<0.75 && 'Data'[Name]=MAX('Table'[Name]))), MAX('Table'[Value]) = ">0.75",CALCULATE(COUNT('Data'[Name]),FILTER('Data',[Test]>=0.75 && 'Data'[Name]=MAX('Table'[Name]))))Si tiene alguna pregunta, por favor pregunte aquí y trataremos de resolverlo.
Saludos
Equipo de apoyo a la comunidad _ zhenbw
Si este post ayuda,entonces considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.
BTW, pbix como adjunto.
- AnonymousNot applicable
Hola @Sujit_Thakur
Agregue esta tabla al modelo. He llamado a este HP-OP-Bounds.
Después de eso, cree dos columnas calculadas(HP/OP y Bin) como se muestra a continuación en la tabla. He nombrado esta tabla 'HP-OP'.
Las fórmulas para las columnas calculadas se muestran a continuación.
HP/OP = DIVIDE('HP-OP'[HP], 'HP-OP'[OP], 0) Bin = VAR X = 'HP-OP'[HP/OP] VAR Filtered = FILTER ( 'HP-OP-Bounds', VAR Y = 'HP-OP-Bounds'[Upper Bound] RETURN 'HP-OP-Bounds'[Lower Bound] <= X && IF ( ISBLANK ( y ), TRUE (), Y > X ) ) RETURN MAXX ( Filtered, 'HP-OP-Bounds'[Bin] )Ahora use la matriz visual como se muestra a continuación.
Espero que esto ayude.
Apreciamos con felicitaciones.
Por favor, márquelo como solución si esto resuelve su problema.
Gracias
- Sujit_ThakurSolution Sage
Estimado amigo @sparse-coder ,
¿Puedo crear este mismo uso de measure , ya que quiero usar más adelante la segmentación de fechas, usando columnas calculadas no me ayudará cuando quiero hp/OP para ser recalculado cada vez que cambio el rango de fechas .
Usted me trajo en serio mucho más cerca de ans , por favor responda cómo puedo lograr mediante el uso de HP / OP como una medida calculada, porque como se puede ver tengo columna de fecha también de la que voy a añadir la segmentación de fecha .
- AnonymousNot applicable
@Sujit_Thakur ¿Cómo pretendes usar también la cortadora de fechas?
Supongo que las fórmulas HP/OP se convierten en SUM(HP)/SUM(OP) para un rango de fechas seleccionado, ¿verdad?
- Sujit_ThakurSolution Sage
Sí @sparse-coder ,
su SUMX(Tabla,'Tabla'[HP]) / SUMX(Tabla,'Tabla'[OP])- Sujit_ThakurSolution Sage
@sparse-coder para que cada vez que corte el intervalo de fechas, HP / OP se vuelva a calcular y los valores de la tabla de salida cambien
- Sujit_ThakurSolution Sage
Estimado @v-zhenbw-msft ,
siguientes son mis datos1)La primera tabla es la tabla de índice
Id Nombre Modelo 1 A Alfa 2 B Alfa 3 C Bravo 4 D Bravo 5 E Charlie 2)Segundo es la tabla de datos
Fecha Nombre Hp Op 7/1/2020 A 23 22 7/2/2020 A 20 19 7/3/2020 A 20 29 7/4/2020 A 22 40 7/5/2020 A 21 100 7/1/2020 B 22 50 7/2/2020 B 21 50 7/3/2020 B 23 100 7/4/2020 B 22 23 7/5/2020 B 20 17 7/1/2020 C 23 20 7/2/2020 C 21 17 7/3/2020 C 22 15 7/4/2020 C 21 14 7/5/2020 C 23 12 7/1/2020 D 21 100 7/2/2020 D 22 50 7/3/2020 D 21 50 7/4/2020 D 23 100 7/5/2020 D 22 23 7/1/2020 E 20 17 7/2/2020 E 23 20 7/3/2020 E 23 17 7/4/2020 E 23 50 7/5/2020 E 23 100 Ahora lo que quiero como salida es
Recuento total del modelo <0.25 0.25-0.50 0.50-0.75 >0.75
Alfa 2 2
Bravo 2 1 1
Charlie 1 1por favor también explique su código de la función del interruptor que no entendí
- v-zhenbw-msftCommunity Support
Hola @Sujit_Thakur ,
¿Desea contar el número de modelo o el número de nombre?
Podemos crear dos medidas y utilizar las siguientes maneras de satisfacer sus requisitos.
1. Cree una columna Modelo en la tabla de datos.
Model = CALCULATE(MAX('index table'[Model]),FILTER('index table','index table'[Name]='data table'[Name]))2. Cree una nueva tabla.
Table = CROSSJOIN(VALUES('index table'[Model]),{"<0.25","0.25-0.5","0.5-0.75",">0.75","Total"})3. Si desea contar el número de Nombre,puede utilizar la siguiente medida.
Measure = var _025 = CALCULATE(COUNT('data table'[Name]),FILTER('data table',[Test]<0.25 && 'data table'[Model]=MAX('Table'[Model]))) var _025_05 = CALCULATE(COUNT('data table'[Name]),FILTER('data table',[Test]>=0.25&&[Test]<0.5 && 'data table'[Model]=MAX('Table'[Model]))) var _05_075 = CALCULATE(COUNT('data table'[Name]),FILTER('data table',[Test]>=0.5&&[Test]<0.75 && 'data table'[Model]=MAX('Table'[Model]))) var _075 = CALCULATE(COUNT('data table'[Name]),FILTER('data table',[Test]>=0.75&& 'data table'[Model]=MAX('Table'[Model]))) return SWITCH( TRUE(), MAX('Table'[Value]) = "<0.25",_025, MAX('Table'[Value]) = "0.25-0.5",_025_05, MAX('Table'[Value]) = "0.5-0.75",_05_075, MAX('Table'[Value]) = ">0.75",_075, MAX('Table'[Value]) = "Total",_025+_025_05+_05_075+_075)4. Si desea contar el número de modelo, puede utilizar la siguiente medida.
Measure 2 = var _025 = CALCULATE(DISTINCTCOUNT('data table'[Model]),FILTER('data table',[Test]<0.25 && 'data table'[Model]=MAX('Table'[Model]))) var _025_05 = CALCULATE(DISTINCTCOUNT('data table'[Model]),FILTER('data table',[Test]>=0.25&&[Test]<0.5 && 'data table'[Model]=MAX('Table'[Model]))) var _05_075 = CALCULATE(DISTINCTCOUNT('data table'[Model]),FILTER('data table',[Test]>=0.5&&[Test]<0.75 && 'data table'[Model]=MAX('Table'[Model]))) var _075 = CALCULATE(DISTINCTCOUNT('data table'[Model]),FILTER('data table',[Test]>=0.75&& 'data table'[Model]=MAX('Table'[Model]))) return SWITCH( TRUE(), MAX('Table'[Value]) = "<0.25",_025, MAX('Table'[Value]) = "0.25-0.5",_025_05, MAX('Table'[Value]) = "0.5-0.75",_05_075, MAX('Table'[Value]) = ">0.75",_075, MAX('Table'[Value]) = "Total",_025+_025_05+_05_075+_075)La función SWITCH significa que cuando la columna actual es igual a un valor determinado,genere el valor correspondiente.
Por ejemplo, cuando Table[Value] á "<0.25", el valor se ajusta a <0.25.
Si no cumple con sus requisitos, ¿podría mostrar el resultado esperado exacto basado en la tabla que ha compartido?
Saludos
Equipo de apoyo a la comunidad _ zhenbw
Si este post ayuda,entonces considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.
BTW, pbix como adjunto.
- Sujit_ThakurSolution Sage
Gracias @v-zhenbw-msft
Usted me ha ayudado mucho .
Una última duda,
¿Qué pasa si mis datos crecen, obstaculizará la velocidad de cálculo de visualización?
Como ahora tengo sólo 5 nombres, ¿qué pasa si mañana obtengo datos para 5000 nombres entonces la tabla de cruces tendría un tamaño de casi 25000 filas ? Sólo quería preguntar si esto obstaculizará la eficiencia de mis modelos ? ¿Sobre cuánto espacio se necesitará?
Por favor, ayuda