Forum Discussion

Anonymous's avatar
Anonymous
Not applicable
6 years ago

Dax Logic

Hola a todos,

Tengo una pregunta interesante y espero que alguien pueda responder a esto.

DISTINCTCOUNT('Date'[MonthinCalender]), donde la columna I que está contando es solo una columna de mes en una tabla de fechas. Si uno pone esta medida sobre la columna de mes se obtiene un recuento de 1 para cada mes, lo que tiene sentido, si uno pone esto en cuartos, uno obtiene 3 por cada trimestre completo y tal vez un 1 o 2 al principio o al final o que seleccionó el rango de fechas dependiendo de si incluye un trimestre completo. Pero, debido a que quería que el conteo devolviera 3 siempre cuando reportaba a lo largo de cuartos, decidí cambiar la medida de la siguiente manera,

CALCULATE(MAXX(SUMMARIZE('Dates' , 'Dates'[MonthInCalendar] , "Column12" , DISTINCTCOUNT('Dates'[MonthInCalendar])) , [Column12]) , ALLSELECTED('Dates')).
Según mi lógica, se suponía que el maxx calcularía sobre todas las fechas seleccionadas y devolviera el máximo, así que si sucede que sólo hay trimestres parciales al principio o al final, estos valores no serán el máximo, porque el máximo sería tres. Lo que uno obtiene de esto, es más bien el distinctcount sobre toda la fecha seleccionada, por lo que podría también usar CALCULATE(DISTINCTCOUNT('Date'[MonthinCalender]), ALLSELECTED('Date)). ¿Por qué la lógica de la medida dax calcularía el distinctcount sobre todas las fechas seleccionadas y no el maxx.
Para visualizarte lo que pensé que pasaría. La función de resumen creará una tabla virtual de la siguiente manera;
Q1 1
Q2 3
Q3 3
Q4 2
Cuando la selección de la fecha era tal que sólo un mes y 2 meses se incluyó en el '1o y último trimestre. Entonces la función max se vería todas las fechas seleccionadas y elegir el max, así que 3. Pero claramente el cálculo allselected está afectando el Recuento y no el maxx. No tengo ningún problema con arreglar esto, puedo escribir este fucntion de muchas maneras para hacerlo hacer lo que quiero, pero para los expertos dax por ahí. ¿Qué dice la lógica de mi medida que no me está dando la solución prevista?

6 Replies

  • Anonymous's avatar
    Anonymous
    Not applicable

    Corrección, en mi resumen funciton en realidad puse el trimestre y no el mes.

  • Anonymous's avatar
    Anonymous
    Not applicable

    Para darle una idea, la siguiente medida hace lo que quiero;

    MAXX(CALCULATETABLE('Dates' , ALLSELECTED('Dates')) , DISTINCTCOUNT('Dates'[MonthInCalendar]))
    Sólo tengo curiosidad por saber por qué mi medida anterior no hace lo que pretendo?
    • v-lid-msft's avatar
      v-lid-msft
      Icon for Community Support rankCommunity Support

      Hola @Kaldorr ,

      Al generar una tabla de resumen, el contexto "ALLSELECTED()" también evaluado, por lo que la tabla de resumen debe ser el siguiente: (si se selecciona entre el 1 de marzo y el 31 de noviembre)

      A continuación, la función MAXX calcula el mismo valor más grande 3 para cada fila, cada fila tiene el mismo resultado porque el contexto ALLSELECTED. Si desea obtener el valor de Coulmn12 para el trimestre actual, necesitamos filtrar la tabla de resumen.


      Saludos

      • Anonymous's avatar
        Anonymous
        Not applicable

        No estoy seguro de que entienda mi problema, porque lo que está explicando es lo que esperaba que la medida hiciera. Es exactamente lo que quería, quería que el maxx evaluara sobre allselected para que devuelva 3 siempre. Pero, esto no es lo que mi medida hizo, el allselected resumió el conteo total por lo que, en mi caso hay 10 cuartos seleccionados, por lo que mi medida devuelve 10 por cada trimestre seleccionado. Así que parece que el allselected hizo que el Maxx se comportara como un sumx sobre todas las fechas seleccionadas.