Forum Discussion

Syndicate_Admin's avatar
Syndicate_Admin
Administrator
5 years ago
Solved

Reg: DMT

hola Equipo,

Necesitamos una solución para el DMT

Ejemplo

si selecciono cualquier fecha ex:(18/08/2021) de slicer debe considerar el inicio de la semana que es (15/08/2021-domingo), por lo que debe volver (15/08/2021-18/08/2021).

amablemente ayúdame en esto

gracias

Gladis

  • No @gladies123

    Creo que necesita crear una tabla de fechas y agregar una columna weeknum personalizada y una columna de año personalizada en ella por dax. Si usa la función weeknum directamente, obtendrá un número de semana incorrecto al final del año anterior y al comienzo del año siguiente.

    Por ejemplo:

    En mi muestra dejé que la semana comenzara el domingo.

    2020/12/31,2021/01/01,2021/01/02 están en el mismo weeknum, pero la función weeknum te dará 53 en 2020 y 1 en 2021. Es un resultado equivocado.

    En primer lugar, cree una tabla de calendario por dax.

    Date = 
    ADDCOLUMNS (
        CALENDAR ( DATE ( 2019, 01, 01 ), DATE ( 2021, 12, 31 ) ),
        "Year", YEAR ( [Date] ),
        "Month", MONTH ( [Date] ),
        "WeekNum", WEEKNUM ( [Date], 1 ),
        "WeekDay", WEEKDAY ( [Date], 1 ),
        "MonthName", FORMAT ( [Date], "MMMM" ),
        "DayName", FORMAT ( [Date], "DDDD" )
    )

    Agregue columnas calculadas para obtener el número de semana y el año correctos.

    ISO 8601 WeekNum = 
    VAR _COUNT0 =
        CALCULATE (
            COUNTROWS ( 'Date' ),
            FILTER (
                'Date',
                'Date'[Year] = EARLIER ( 'Date'[Year] )
                    && 'Date'[WeekNum] - 1 = 0
            )
        )
    VAR _BASENUM1 =
        IF ( _COUNT0 < 7, 'Date'[WeekNum] - 1, 'Date'[WeekNum] )
    VAR _ISO_8601_WeekNum =
        IF (
            WEEKDAY ( DATE ( 'Date'[Year] - 1, 01, 01 ) ) <> 1
                && 'Date'[Year] = 'Date'[Year]
                && _BASENUM1 = 0,
            WEEKNUM ( DATE ( MIN ( 'Date'[Year] ), 12, 31 ), 1 ) - 1,
            _BASENUM1
        )
    RETURN
        _ISO_8601_WeekNum
    ISO WeekYear = 
    VAR _COUNT0 =
        CALCULATE (
            COUNTROWS ( 'Date' ),
            FILTER (
                'Date',
                'Date'[Year] = EARLIER ( 'Date'[Year] )
                    && 'Date'[WeekNum] - 1 = 0
            )
        )
    VAR _BASENUM1 =
        IF ( _COUNT0 < 7, 'Date'[WeekNum] - 1, 'Date'[WeekNum] )
    RETURN
    IF(_BASENUM1 = 0,'Date'[Year] -1,'Date'[Year])

    Cree una relación entre esta tabla y la tabla de datos.

    A continuación, cree una medida para calcular el DMT.

    WTD =
    VAR _SELECTISOYEAR =
        SELECTEDVALUE ( 'Date'[ISO WeekYear] )
    VAR _SELECTISOWEEKNUM =
        SELECTEDVALUE ( 'Date'[ISO 8601 WeekNum] )
    RETURN
        CALCULATE (
            SUM ( Data[Value] ),
            FILTER (
                ALL ( 'Date' ),
                'Date'[ISO 8601 WeekNum] = _SELECTISOWEEKNUM
                    && 'Date'[ISO WeekYear] = _SELECTISOYEAR
            )
        )

    El resultado es la suma entre 2021/08/15 - 2021/08/21.

    1.png

    1.png

    Saludos
    Rico Zhou

    Si esta publicación ayuda, entonces por favor considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

2 Replies

  • No @gladies123

    Creo que necesita crear una tabla de fechas y agregar una columna weeknum personalizada y una columna de año personalizada en ella por dax. Si usa la función weeknum directamente, obtendrá un número de semana incorrecto al final del año anterior y al comienzo del año siguiente.

    Por ejemplo:

    En mi muestra dejé que la semana comenzara el domingo.

    2020/12/31,2021/01/01,2021/01/02 están en el mismo weeknum, pero la función weeknum te dará 53 en 2020 y 1 en 2021. Es un resultado equivocado.

    En primer lugar, cree una tabla de calendario por dax.

    Date = 
    ADDCOLUMNS (
        CALENDAR ( DATE ( 2019, 01, 01 ), DATE ( 2021, 12, 31 ) ),
        "Year", YEAR ( [Date] ),
        "Month", MONTH ( [Date] ),
        "WeekNum", WEEKNUM ( [Date], 1 ),
        "WeekDay", WEEKDAY ( [Date], 1 ),
        "MonthName", FORMAT ( [Date], "MMMM" ),
        "DayName", FORMAT ( [Date], "DDDD" )
    )

    Agregue columnas calculadas para obtener el número de semana y el año correctos.

    ISO 8601 WeekNum = 
    VAR _COUNT0 =
        CALCULATE (
            COUNTROWS ( 'Date' ),
            FILTER (
                'Date',
                'Date'[Year] = EARLIER ( 'Date'[Year] )
                    && 'Date'[WeekNum] - 1 = 0
            )
        )
    VAR _BASENUM1 =
        IF ( _COUNT0 < 7, 'Date'[WeekNum] - 1, 'Date'[WeekNum] )
    VAR _ISO_8601_WeekNum =
        IF (
            WEEKDAY ( DATE ( 'Date'[Year] - 1, 01, 01 ) ) <> 1
                && 'Date'[Year] = 'Date'[Year]
                && _BASENUM1 = 0,
            WEEKNUM ( DATE ( MIN ( 'Date'[Year] ), 12, 31 ), 1 ) - 1,
            _BASENUM1
        )
    RETURN
        _ISO_8601_WeekNum
    ISO WeekYear = 
    VAR _COUNT0 =
        CALCULATE (
            COUNTROWS ( 'Date' ),
            FILTER (
                'Date',
                'Date'[Year] = EARLIER ( 'Date'[Year] )
                    && 'Date'[WeekNum] - 1 = 0
            )
        )
    VAR _BASENUM1 =
        IF ( _COUNT0 < 7, 'Date'[WeekNum] - 1, 'Date'[WeekNum] )
    RETURN
    IF(_BASENUM1 = 0,'Date'[Year] -1,'Date'[Year])

    Cree una relación entre esta tabla y la tabla de datos.

    A continuación, cree una medida para calcular el DMT.

    WTD =
    VAR _SELECTISOYEAR =
        SELECTEDVALUE ( 'Date'[ISO WeekYear] )
    VAR _SELECTISOWEEKNUM =
        SELECTEDVALUE ( 'Date'[ISO 8601 WeekNum] )
    RETURN
        CALCULATE (
            SUM ( Data[Value] ),
            FILTER (
                ALL ( 'Date' ),
                'Date'[ISO 8601 WeekNum] = _SELECTISOWEEKNUM
                    && 'Date'[ISO WeekYear] = _SELECTISOYEAR
            )
        )

    El resultado es la suma entre 2021/08/15 - 2021/08/21.

    1.png

    1.png

    Saludos
    Rico Zhou

    Si esta publicación ayuda, entonces por favor considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.