Forum Discussion

Sujit_Thakur's avatar
Sujit_Thakur
Solution Sage
6 years ago

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

@nickyvv

saludos

Sujit

24 Replies

  • 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_Thakur's avatar
      Sujit_Thakur
      Solution 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


  • @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_Thakur's avatar
      Sujit_Thakur
      Solution 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

      • FarhanAhmed's avatar
        FarhanAhmed
        Community 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.

    • Greg_Deckler's avatar
      Greg_Deckler
      Community 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.

  • Anonymous's avatar
    Anonymous
    Not 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-msft's avatar
    v-zhenbw-msft
    Community 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"})

    DAX1.jpg

    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]))))

    DAX2.jpg

    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.

  • 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

    FechaNombreHpOp
    7/1/2020A2322
    7/2/2020A2019
    7/3/2020A2029
    7/4/2020A2240
    7/5/2020A21100
    7/1/2020B2250
    7/2/2020B2150
    7/3/2020B23100
    7/4/2020B2223
    7/5/2020B2017
    7/1/2020C2320
    7/2/2020C2117
    7/3/2020C2215
    7/4/2020C2114
    7/5/2020C2312
    • v-zhenbw-msft's avatar
      v-zhenbw-msft
      Community 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"})

      DAX3.jpg

      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]))))

      DAX4.jpgDAX5.jpg

      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.

  • Anonymous's avatar
    Anonymous
    Not applicable

    Hola @Sujit_Thakur

    Agregue esta tabla al modelo. He llamado a este HP-OP-Bounds.

    HP-OP Bounds.PNG

    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'.

    HP-OP.PNG

    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.

    Matrix.PNG

    Espero que esto ayude.

    Apreciamos con felicitaciones.

    Por favor, márquelo como solución si esto resuelve su problema.

    Gracias

    • Sujit_Thakur's avatar
      Sujit_Thakur
      Solution 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 .

  • Anonymous's avatar
    Anonymous
    Not 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?

  • Estimado @v-zhenbw-msft ,

    siguientes son mis datos

    1)La primera tabla es la tabla de índice

    IdNombreModelo
    1AAlfa
    2BAlfa
    3CBravo
    4DBravo
    5ECharlie

    2)Segundo es la tabla de datos

    FechaNombreHpOp
    7/1/2020A2322
    7/2/2020A2019
    7/3/2020A2029
    7/4/2020A2240
    7/5/2020A21100
    7/1/2020B2250
    7/2/2020B2150
    7/3/2020B23100
    7/4/2020B2223
    7/5/2020B2017
    7/1/2020C2320
    7/2/2020C2117
    7/3/2020C2215
    7/4/2020C2114
    7/5/2020C2312
    7/1/2020D21100
    7/2/2020D2250
    7/3/2020D2150
    7/4/2020D23100
    7/5/2020D2223
    7/1/2020E2017
    7/2/2020E2320
    7/3/2020E2317
    7/4/2020E2350
    7/5/2020E23100

    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 1

    por favor también explique su código de la función del interruptor que no entendí

    • v-zhenbw-msft's avatar
      v-zhenbw-msft
      Community 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]))

      D1.jpg

      2. Cree una nueva tabla.

      Table = CROSSJOIN(VALUES('index table'[Model]),{"<0.25","0.25-0.5","0.5-0.75",">0.75","Total"})

      D2.jpg

      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)

      D3.jpg

      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)

      D4.jpg

      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_Thakur's avatar
        Sujit_Thakur
        Solution 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