Semana Acumulada del Año Anterior

  • Gabriela
    Participante

      Espero que esten bien.

       

      Les escribo ya que estoy intentando calcular una fórmula en DAX. La idea es que calcule las ventas de la misma semana de este año y las compare con el año anterior, de manera acumulada. Esto implica sumar las ventas de la semana actual y los días correspondientes de la misma semana del año anterior, considerando siempre un período de siete días. Por ejemplo, si el primer y segundo día de la semana 19 del año 2024 caen el 6 y 7 de mayo (tomando en cuenta el lunes como primer día de la semana), y en el año anterior (2023) cayeron el 1 y 2 de mayo, deseo que se acumulen dos días de ventas, sin importar las fechas exactas, sino únicamente el número de días transcurridos.

      Adicionalmente, me encuentro con otro problema relacionado con los filtros. Estos están establecidos en base al año 2024, ya que se trata de un informe de comparación del año actual con el anterior y el presupuesto del año actual.

       

      Logre formularla, pero estoy forzando los datos, me gustaria que se hiciera automaticamente...

      Semana AA Acumulada =
      VAR DiasSeleccionados = SELECTEDVALUE('Calendar'[#DíaSemana])

      RETURN
      CALCULATE(
      [Ventas],
      FILTER(
      ALL('Calendar'),
      'Calendar'[#Año] = 2023 &&
      'Calendar'[#SemanaAño] = SELECTEDVALUE('Calendar'[#SemanaAño]) &&
      'Calendar'[#DíaSemana] IN {1, 2, 3}
      )

       

      Les agradezco su ayuda...

       

    • dlom
      Participante

        Hola Gabriela! Mira adecúa esta fórmula a las columnas de tu tabla calendario y te va a a servir:

         

        ----------------------------------------

        Fórmula:

        Venta MSAA =
        VAR _CurrentYear = YEAR(MAX('Calendar'[Date]))
        VAR _PreviousYear = _CurrentYear - 1
        VAR _DiaSemanaMax = IF(SELECTEDVALUE('Calendar'[WeekCompleted]) = TRUE(), 8, CALCULATE(MAX('Calendar'[DayOfWeek]), 'Calendar'[IsAfterToday] = FALSE()))

        RETURN
        CALCULATE([Venta],
        ALL('Calendar'),
        'Calendar'[Year] = _PreviousYear,
        'Calendar'[NumSemana] = SELECTEDVALUE('Calendar'[NumSemana]),
        'Calendar'[DayOfWeek] < _DiaSemanaMax
        )

        ----------------------------------------

         

        Aquí está calculando el año para cada semana, el año previo y, lo que hace la diferencia para que considere la semana actual y que NO sume los días de la misma semana del año previo que aún no han pasado en esta semana, es la variable _DiaSemanaMax.

         

        Esta variable _DiaSemanaMax evalúa si la semana actual ya terminó (con la columna WeekCompleted de la tabla calendario, la puedes hacer con Power Query). Si ya terminó la semana, usa el 8 para considerar toda la semana (del día 1 al día 7 de la semana). Si NO ha terminado la semana, tomamos el máximo número de días de la semana actuales (con la columna IsAfterToday de la tabla calendario). La columna IsAfterToday también la puedes hacer en Power Query y básicamente el valor es TRUE si el día es antes de hoy u hoy. Y es FALSE si el valor es después de hoy.

         

        Aquí está la comprobación de que funciona correctamente. Para la semana 25 del año anterior (que actualmente es la semana 25 del año actual) SOLO me debería de sumar los primeros 5 días (del lunes al viernes, SIN contar hoy sábado porque todavía no termina y me va a dar un resultado no comparable). Este resultado debería de ser 725,427.20 (#1 en la imagen) al compararlo con la semana actual. Y NO debe de ser 1,034,803.65 (#2)

         

        Ahora vemos que el resultado es el mismo (#1 de esta imagen versus #1 de la imagen previa) y NO el valor total de la semana del año previo (#2):

         

        Además me da el total si estoy comparando semanas que ya concluyeron:

         

        Saludos!
        - dlom

         

         

         

         

         

         

         

      Viendo 1 respuesta (de un total de 1)
      • Debes estar registrado para responder a este debate.