Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Earn a 50% discount on the DP-600 certification exam by completing the Fabric 30 Days to Learn It challenge.

Reply
Syndicate_Admin
Administrator
Administrator

Ayuda para crear Dax Measure

Estimados usuarios avanzados,

Tengo un modelo como se muestra a continuación. También tengo una tabla desconectada que actúa como segmentación de datos para mi valor (MTD, QTD, YTD). Quiero calcular una medida basada en las rebanadoras. Actualmente estoy usando esta fórmula:

Medida =

INTERRUPTOR(VERDADERO(),
SELECTEDVALUE(Valor de la segmentación de datos) = "MTD", CALCULAR(SUMA(«CORPDW TRIALBALANCE»[Amount_in_Transaction_Currency]), FECHAS ENTRE('CORPDW FISCALYEARROLLINGPERIOD'[Día], MIN(«CORPDW FISCALYEARROLLINGPERIOD»[MTD_START_DATE]), MÁXIMO(«CORPDW FISCALYEARROLLINGPERIOD»[MTD_END_DATE])) ,'CUENTA CORPDW'[AccType] = "Gasto"),

SELECTEDVALUE('Cortadoras de período'[Cortadora de período]) = "QTD", CALCULAR(SUMA(«CORPDW TRIALBALANCE»[Amount_in_Transaction_Currency]), FECHAS ENTRE('CORPDW FISCALYEARROLLINGPERIOD'[Día], MIN(«CORPDW FISCALYEARROLLINGPERIOD»[QTD_START_DATE]), MÁXIMO(«CORPDW FISCALYEARROLLINGPERIOD»[QTD_END_DATE])) ,'CUENTA CORPDW'[AccType] = "Gasto"),

SELECTEDVALUE('Cortadoras de período'[Cortadora de período]) = "YTD", CALCULAR(SUMA(«CORPDW TRIALBALANCE»[Amount_in_Transaction_Currency]), FECHAS ENTRE('CORPDW FISCALYEARROLLINGPERIOD'[Día], MIN(«CORPDW FISCALYEARROLLINGPERIOD»[YTD_START_DATE]), MÁXIMO(«CORPDW FISCALYEARROLLINGPERIOD»[YTD_END_DATE])) ,'CUENTA CORPDW'[AccType] = "Gasto"),


""
)

El problema es que no importa que seleccione MTD, QTD O YTD, me muestra el mismo valor. Por favor, ayuda!!!

11 REPLIES 11
Syndicate_Admin
Administrator
Administrator

@sufiyanakhtar oye, implementaste la lógica no de la manera clásica tan difícil de decir lo que está pasando.
Debe leer y familiarizarse con las técnicas de mejores prácticas para estos patrones de inteligencia del tiempo:
https://www.daxpatterns.com/time-patterns/

Otra pregunta importante: Veo que usaste la columna 'CORPDW FISCALYEARROLLINGPERIOD'[Día]
en sus medidas. ¿Es un dato o un número de día entre 1 y 31?
Tiene que ser una fecha, tal vez ese sea todo el tema.
De todos modos, limpié un poco su código y también agregué REMOVEFILTERS solo para estar seguro, pero en caso de que sea un
'CORPDW FISCALYEARROLLINGPERIOD'[Día] columna de fecha que no es necesaria. Entonces, esta es la pregunta más importante, ¿qué es esa columna?

Measure1 =
VAR _slicr_value =
    SELECTEDVALUE ( 'Period Slicers'[Period Slicer] )
RETURN
    SWITCH (
        _slicr_value,
        "MTD",
        VAR _mtd_start_date = MIN ( 'CORPDW FISCALYEARROLLINGPERIOD'[MTD_START_DATE] )
        VAR _mtd_end_date = MAX ( 'CORPDW FISCALYEARROLLINGPERIOD'[MTD_END_DATE] )
        RETURN
            CALCULATE (
                SUM ( 'CORPDW TRIALBALANCE'[Amount_in_Transaction_Currency] ),
                DATESBETWEEN (
                    'CORPDW FISCALYEARROLLINGPERIOD'[Day],
                    _mtd_start_date,
                    _mtd_end_date
                ),
                REMOVEFILTERS('CORPDW FISCALYEARROLLINGPERIOD'),
                'CORPDW ACCOUNT'[AccType] = "Expense"
            ),
        "QTD",
        VAR _qtd_start_date = MIN ( 'CORPDW FISCALYEARROLLINGPERIOD'[QTD_START_DATE] )
        VAR _qtd_end_date = MAX ( 'CORPDW FISCALYEARROLLINGPERIOD'[QTD_END_DATE] )
        RETURN    
            CALCULATE (
                SUM ( 'CORPDW TRIALBALANCE'[Amount_in_Transaction_Currency] ),
                DATESBETWEEN (
                    'CORPDW FISCALYEARROLLINGPERIOD'[Day],
                    _qtd_start_date,
                    _qtd_end_date
                ),
                REMOVEFILTERS('CORPDW FISCALYEARROLLINGPERIOD'),
                'CORPDW ACCOUNT'[AccType] = "Expense"
            ),
        "YTD",
        VAR _ytd_start_date = MIN ( 'CORPDW FISCALYEARROLLINGPERIOD'[YTD_START_DATE] )
        VAR _ytd_end_date = MAX ( 'CORPDW FISCALYEARROLLINGPERIOD'[YTD_END_DATE] )
        RETURN
            CALCULATE (
                SUM ( 'CORPDW TRIALBALANCE'[Amount_in_Transaction_Currency] ),
                DATESBETWEEN (
                    'CORPDW FISCALYEARROLLINGPERIOD'[Day],
                    _ytd_start_date,
                    _ytd_end_date
                ),
                REMOVEFILTERS('CORPDW FISCALYEARROLLINGPERIOD'),
                'CORPDW ACCOUNT'[AccType] = "Expense"
            )
    )


2022-05-19 17_30_22-Re_ Need help on DAX function with measure vs colu... - Microsoft Power BI Commu.png

Informe de presentación – Contoso by SpartaBI


SpartaBI_3-1652115470761.png SpartaBI_1-1652115142093.png SpartaBI_2-1652115154505.png

Full-Logo11.png

Hola Esparta, La columna del día es una columna de tipo de fecha. En realidad, mi arquitecto de datos ha diseñado el backend porque los datos se agregan mensualmente. Así que el día al que se refiere tiene fechas como 01/01/2020, 02/01/2020, 03/01/2020 (MM/DD/AAAA) y así sucesivamente.... Por favor, ayuda ya que he estado rompiéndome la cabeza en esto 💔

@sufiyanakhtar
Espera, ¿tienes una tabla de datos adecuada? ¿Fechas continuas y únicas o la tabla de datos está en una granularidad mensual?
P.D. ¿Revisaron mi medida de todos modos?

Amigo, tu medida funcionó!!! Permítanme verificar los valores con los valores de SQL Server y luego marcar su respuesta como solución!!! Además, si pudieras explicarme lo que estaba haciendo mal, ¡sería realmente útil!

@sufiyanakhtar mi placer 🙂
Tengo algunos sospechosos 🙂 Es tarde aquí, así que continuaremos mañana.

PD: echa un vistazo a mi informe de exhibición:
https://community.powerbi.com/t5/Data-Stories-Gallery/SpartaBI-Feat-Contoso-100K/td-p/2449543
Dale un pulgar hacia arriba si te gustó 🙂

Claro Esparta, pero por favor hágamelo saber para que yo entienda esto mejor 🙂

@sufiyanakhtar así que como dije, tengo un sospechoso, pero primero necesito hacer algunas pruebas para verificar mi suposición.
Ejecute esta medida y dígame si aún obtiene el resultado correcto o el mismo que el resultado incorrecto original:

Measure1 =
VAR _slicr_value =
    SELECTEDVALUE ( 'Period Slicers'[Period Slicer] )
RETURN
    SWITCH (
        _slicr_value,
        "MTD",
        VAR _mtd_start_date = MIN ( 'CORPDW FISCALYEARROLLINGPERIOD'[MTD_START_DATE] )
        VAR _mtd_end_date = MAX ( 'CORPDW FISCALYEARROLLINGPERIOD'[MTD_END_DATE] )
        RETURN
            CALCULATE (
                SUM ( 'CORPDW TRIALBALANCE'[Amount_in_Transaction_Currency] ),
                DATESBETWEEN (
                    'CORPDW FISCALYEARROLLINGPERIOD'[Day],
                    _mtd_start_date,
                    _mtd_end_date
                ),
                'CORPDW ACCOUNT'[AccType] = "Expense"
            ),
        "QTD",
        VAR _qtd_start_date = MIN ( 'CORPDW FISCALYEARROLLINGPERIOD'[QTD_START_DATE] )
        VAR _qtd_end_date = MAX ( 'CORPDW FISCALYEARROLLINGPERIOD'[QTD_END_DATE] )
        RETURN    
            CALCULATE (
                SUM ( 'CORPDW TRIALBALANCE'[Amount_in_Transaction_Currency] ),
                DATESBETWEEN (
                    'CORPDW FISCALYEARROLLINGPERIOD'[Day],
                    _qtd_start_date,
                    _qtd_end_date
                ),
                'CORPDW ACCOUNT'[AccType] = "Expense"
            ),
        "YTD",
        VAR _ytd_start_date = MIN ( 'CORPDW FISCALYEARROLLINGPERIOD'[YTD_START_DATE] )
        VAR _ytd_end_date = MAX ( 'CORPDW FISCALYEARROLLINGPERIOD'[YTD_END_DATE] )
        RETURN
            CALCULATE (
                SUM ( 'CORPDW TRIALBALANCE'[Amount_in_Transaction_Currency] ),
                DATESBETWEEN (
                    'CORPDW FISCALYEARROLLINGPERIOD'[Day],
                    _ytd_start_date,
                    _ytd_end_date
                ),
                'CORPDW ACCOUNT'[AccType] = "Expense"
            )
    )


Además, no olvide marcar el mensaje con la medida que funcionó como una solución para la visabilidad comunitaria.



Hola Esparta,

Ambos producen el mismo resultado, lo cual es impactante tbh porque probé la misma fórmula que la más reciente y no funcionó antes. de todos modos, ambos producen el mismo resultado

@sufiyanakhtar es extraño.
Así que estás diciendo que ambos funcionaron, pero esto (tu original) no lo hizo:

Measure1 =
SWITCH (
    TRUE (),
    SELECTEDVALUE ( 'Period Slicers'[Period Slicer] ) = "MTD",
        CALCULATE (
            SUM ( 'CORPDW TRIALBALANCE'[Amount_in_Transaction_Currency] ),
            DATESBETWEEN (
                'CORPDW FISCALYEARROLLINGPERIOD'[Day],
                MIN ( 'CORPDW FISCALYEARROLLINGPERIOD'[MTD_START_DATE] ),
                MAX ( 'CORPDW FISCALYEARROLLINGPERIOD'[MTD_END_DATE] )
            ),
            'CORPDW ACCOUNT'[AccType] = "Expense"
        ),
    SELECTEDVALUE ( 'Period Slicers'[Period Slicer] ) = "QTD",
        CALCULATE (
            SUM ( 'CORPDW TRIALBALANCE'[Amount_in_Transaction_Currency] ),
            DATESBETWEEN (
                'CORPDW FISCALYEARROLLINGPERIOD'[Day],
                MIN ( 'CORPDW FISCALYEARROLLINGPERIOD'[QTD_START_DATE] ),
                MAX ( 'CORPDW FISCALYEARROLLINGPERIOD'[QTD_END_DATE] )
            ),
            'CORPDW ACCOUNT'[AccType] = "Expense"
        ),
    SELECTEDVALUE ( 'Period Slicers'[Period Slicer] ) = "YTD",
        CALCULATE (
            SUM ( 'CORPDW TRIALBALANCE'[Amount_in_Transaction_Currency] ),
            DATESBETWEEN (
                'CORPDW FISCALYEARROLLINGPERIOD'[Day],
                MIN ( 'CORPDW FISCALYEARROLLINGPERIOD'[YTD_START_DATE] ),
                MAX ( 'CORPDW FISCALYEARROLLINGPERIOD'[YTD_END_DATE] )
            ),
            'CORPDW ACCOUNT'[AccType] = "Expense"
        ),
    BLANK ()
)

¿Puede verificar esto de nuevo?

LOL, sí!!! 😀

@sufiyanakhtar puede compartir una muestra de la tabla de dimensiones de fecha.
Además, ¿qué columna está conectada con el hecho? 'Día' o 'Fecha' y tienes ambos en caso de que 'Día' sea en realidad 'Fecha'

Helpful resources

Announcements
LearnSurvey

Fabric certifications survey

Certification feedback opportunity for the community.