Función DAX VAR

Un usuario Pregunto ✅

JP8991

Hola a todos,

Estoy tratando de que funcione una fórmula VAR para evitar tener múltiples medidas para calcular el volumen de negocios.

Actualmente tengo cinco medidas para calcular la rotación (ver más abajo), espero reducir eso a una con VAR.

  • Plantilla central
  • Plantilla central 12MTD Promedio
  • Terminaciones del centro
  • Terminaciones del centro 12MTD
  • Rotación del centro

Invidualmente, todos funcionan, sin embargo, cuando los pongo en una fórmula, obtengo un 0%.

Así es como hice mi medida de prueba:

TEST = 
VAR CentreHeadcount = CALCULATE(COUNT('Centre Employees'[Employee ID]),'Calendar'[Month Offset]>0)
VAR CentreTerminations = CALCULATE(DISTINCTCOUNT('Centre Terminations'[Employee ID]),'Calendar'[Month Offset]>0)

return

VAR Terminations12MTD = CALCULATE(CentreTerminations,DATESINPERIOD('Calendar'[Date],LASTDATE('Calendar'[Date]),-12, MONTH),'Calendar'[Month Offset]>0)
VAR Headcount12MTD = CALCULATE(AVERAGEX(ALLSELECTED('Calendar'),CentreHeadcount),DATESINPERIOD('Calendar'[Date],LASTDATE('Calendar'[Date]),-12, MONTH),'Calendar'[Month Offset]>0)

return

CALCULATE(IF(DIVIDE(Terminations12MTD,Headcount12MTD)=BLANK(),0,DIVIDE(Terminations12MTD,Headcount12MTD)),'Calendar'[Month Offset]>0)

Como se mencionó, cada uno de estos pasos funciona por sí solo, sin embargo, una vez incluidos en una ecuación, no es así.

JP8991

@Greg_Deckler @Anónimo

¿Alguna sugerencia sobre cómo puedo mejorar estas medidas?

Mi objetivo es reducirlos de 5 a 1 y abstenerme de usar ALLSELECTED si eso no es aconsejable. Proporcioné un archivo de muestra en una publicación anterior.

Anónimo

Hola. Lea esto sobre ALLSELECTED: https://www.sqlbi.com/articles/the-definitive-guide-to-allselected/

Le dará una idea sobre la función y por qué debe usarse con prudencia.

Mejor
D

Anónimo

Hola.

Primero me gustaría preguntarle amablemente: No cree fórmulas monstruosas. No es divertido, se lo aseguro, especialmente para aquellos que tendrán que mantener ese código. Además, formatee sus medidas cuando las publique en el foro. Respete el tiempo de sus lectores. Gracias.

Ahora te diré por qué tu monstruo no funciona. Es porque las variables a las que ha asignado valores son ESTÁTICAS. No se pueden cambiar. Aquí está su medida formateada (www.daxformatter.com😞

TEST =
VAR CentreHeadcount =
    CALCULATE (
        COUNT ( 'Centre Employees'[Employee ID] ),
        'Calendar'[Month Offset] > 0
    )
VAR CentreTerminations =
    CALCULATE (
        DISTINCTCOUNT ( 'Centre Terminations'[Employee ID] ),
        'Calendar'[Month Offset] > 0
    )
VAR Terminations12MTD =
    CALCULATE (
        CentreTerminations, -- STATIC VALUE!!!
        DATESINPERIOD ( 'Calendar'[Date], LASTDATE ( 'Calendar'[Date] ), -12, MONTH ),
        'Calendar'[Month Offset] > 0
    )
VAR Headcount12MTD =
    CALCULATE (
        AVERAGEX ( ALLSELECTED ( 'Calendar' ), CentreHeadcount ), -- = CENTREHEADCOUNT always or BLANK
        DATESINPERIOD ( 'Calendar'[Date], LASTDATE ( 'Calendar'[Date] ), -12, MONTH ),
        'Calendar'[Month Offset] > 0
    )
RETURN
    CALCULATE (
        IF (
            DIVIDE ( Terminations12MTD, Headcount12MTD ) = BLANK (),
            0,
            DIVIDE ( Terminations12MTD, Headcount12MTD )
        ),
        'Calendar'[Month Offset] > 0
    )

Además, no es necesario tener múltiples DEVOLUCIONES allí. Esto solo oscurece el código.

Por cierto, ALLSELECTED es una función muy compleja. La función más compleja de todo DAX. ¿Entiendes completamente lo que hace? ¿Sabes qué es el contexto de sombra? Le daré una pista que le salvará la vida: por favor, nunca use en su código algo cuya funcionalidad no comprenda completamente. Si lo usa, tendrá innumerables errores, muchos de los cuales ni siquiera será consciente.

Mejor

D

Greg_Deckler

Muy difícil de solucionar sin datos de muestra. Consulte esta publicación sobre cómo obtener una respuesta rápida a su pregunta: https://community.powerbi.com/t5/Community-Blog/How-to-Get-Your-Question-Answered-Quickly/ba-p/38490.

Dicho esto, cambiaría su declaración para probar las distintas partes de su fórmula, como:

TEST = 
VAR CentreHeadcount = CALCULATE(COUNT('Centre Employees'[Employee ID]),'Calendar'[Month Offset]>0)
VAR CentreTerminations = CALCULATE(DISTINCTCOUNT('Centre Terminations'[Employee ID]),'Calendar'[Month Offset]>0)

return

VAR Terminations12MTD = CALCULATE(CentreTerminations,DATESINPERIOD('Calendar'[Date],LASTDATE('Calendar'[Date]),-12, MONTH),'Calendar'[Month Offset]>0)
VAR Headcount12MTD = CALCULATE(AVERAGEX(ALLSELECTED('Calendar'),CentreHeadcount),DATESINPERIOD('Calendar'[Date],LASTDATE('Calendar'[Date]),-12, MONTH),'Calendar'[Month Offset]>0)

return
Terminations12MTD
//CALCULATE(IF(DIVIDE(Terminations12MTD,Headcount12MTD)=BLANK(),0,DIVIDE(Terminations12MTD,Headcount12MTD)),'Calendar'[Month Offset]>0)

Entonces, vea si ese valor está EN BLANCO y si lo es, eso explicaría por qué está obteniendo un 0% de regreso

JP8991

En respuesta a Greg_Deckler

Hola @Greg_Deckler

Gracias por tu respuesta, perdón por la respuesta tardía. Estuve fuera este fin de semana.

He creado un archivo ficticio que debería ser útil.

Prueba de volumen de negocios

Mi objetivo es reducir el KPI de rotación del centro a una sola medida en lugar de tener cinco.

@Anónimo no, no estoy completamente al tanto de ALLSELECTED y sus limitaciones, así que estoy más que feliz de que se ajuste.

Deja un comentario

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