Forum Discussion

Syndicate_Admin's avatar
Syndicate_Admin
Icon for Administrator rankAdministrator
4 years ago

Problema con WeekNum ( Tabla de fechas)

Hola a todos,

Por favor, ayúdame.

Tengo un big data set que funcionó perfectamente desde el año pasado, este año tengo un problema con el WeekNum:

1. Estoy tratando de tener el "Inicio de la primera semana del año" 27.12.2021 - Semana 53-2021 y después en "Inicio de la primera semana del año" 03.01.2022 - Semana 1 2022
2. Después de eso tener el número de la semana en el mismo valor y la Semana del Año, pero es extraño porque obtengo resultados diferentes, lo intenté con ISOweeks y cualquier otro consejo, pero sigo atascado.

Aquí hay una imagen de muestra:

Capture.PNG

Se aprecia cualquier ayuda o sugerencia, incluso una fórmula de reemplazo o FI;

9 Replies

  • Hay @Alecsen ,

    He creado una muestra sencilla. Por favor, consulte para ver si le ayuda.

    wekkday_ = WEEKDAY('Table'[Date],2)
    weeknumber = WEEKNUM('Table'[Date],2)
    YearWee = YEAR('Table'[Date])&"-"&'Table'[weeknumber]
    _First start week of the year = CALCULATE(MIN('Table'[Date]),FILTER(ALL('Table'),'Table'[weeknumber]=SELECTEDVALUE('Table'[weeknumber])))

    Si he entendido mal su significado, ¿podría proporcionar su archivo pbix sin la información de privacidad y la salida deseada?

    Saludos

    Equipo de apoyo a la comunidad _ Polly

    Si esta publicación ayuda, considere Aceptarla como la solución para ayudar a los otros miembros a encontrarla más rápidamente.

    • Syndicate_Admin's avatar
      Syndicate_Admin
      Icon for Administrator rankAdministrator

      Hola @v-polly-msft ,

      Gracias por tu ayuda, bassicly es algo que describes. Pero como puedo ver en el informe anterior el valor de los días de la semana 53 en su pantalla es de 5 días y después del primero del año la semana 1 tiene solo un día.

      Me gustaría tener la semana 53 como semana 1 bassicly con 7 días.

    • Syndicate_Admin's avatar
      Syndicate_Admin
      Icon for Administrator rankAdministrator

      Hola

      He construido la tabla de datos como una consulta:

      Alecsen_0-1643658265726.png

      let fnDateTable = (StartDate como fecha, EndDate como fecha, referencia cultural opcional como texto anulable) como tabla = >
      dejar
      DayCount = Duration.Days(Duration.From(EndDate - StartDate))+1,
      Fuente = List.Dates(StartDate,DayCount,#duration(1,0,0,0)),
      TableFromList = Table.FromList(Source, Splitter.SplitByNothing()),
      ChangedType = Table.TransformColumnTypes(TableFromList,{{"Column1", escriba date}}),
      RenamedColumns = Table.RenameColumns(ChangedType,{{"Column1", "Date"}}),
      InsertYear = Table.AddColumn(RenamedColumns, "Year", cada Date.Year([Date]),type text),
      InsertQuarterNum = Table.AddColumn(InsertYear, "Quarter Num", cada Date.QuarterOfYear([Date])),
      InsertQuarter = Table.AddColumn(InsertQuarterNum, "Quarter", cada "Q" & Number.ToText([Quarter Num])),
      InsertMonth = Table.AddColumn(InsertQuarter, "Month Num", cada Date.Month([Date]), escriba texto),
      InsertStartOfMonth = Table.AddColumn(InsertMonth, "StartOfMonth", cada Date.StartOfMonth([Date]), escriba date),
      InsertEndOfMonth = Table.AddColumn(InsertStartOfMonth, "EndOfMonth", cada Date.EndOfMonth([Date]), escriba date),
      InsertDay = Table.AddColumn(InsertEndOfMonth, "DayOfMonth", cada Date.Day([Date])),
      InsertDayInt = Table.AddColumn(InsertDay, "DateInt", cada [Año]*10000 + [Month Num]*100 + [DayOfMonth]),
      InsertMonthName = Table.AddColumn(InsertDayInt, "Month", each Date.ToText([Date], "MMMM", Culture), escriba texto),
      InsertShortMonthName = Table.AddColumn(InsertMonthName, "Month short", each Date.ToText([Date], "MMM", Culture), escriba texto),
      InsertCalendarMonth = Table.AddColumn(InsertShortMonthName, "Month Year", cada [Month short]& " " & Number.ToText([Year]),escriba texto),
      InsertCalendarQtr = Table.AddColumn(InsertCalendarMonth, "Quarter Year", cada "Q" & Number.ToText([Quarter Num]) & " " & Number.ToText([Year]), escriba texto),
      InsertDayWeek = Table.AddColumn(InsertCalendarQtr, "Weekday Num", cada Date.DayOfWeek([Date])),
      InsertDayName = Table.AddColumn(InsertDayWeek, "Weekday", cada Date.ToText([Date], "dddd", Culture), escriba texto),
      InsertShortDayName = Table.AddColumn(InsertDayName, "Weekday short", cada Date.ToText([Date], "ddd", Culture), escriba texto),
      InsertWeekEnding = Table.AddColumn(InsertShortDayName , "EndOfWeek", cada Date.EndOfWeek([Date]), escriba date),
      InsertWeekNumber= Table.AddColumn(InsertWeekEnding, "Week Num", cada Date.WeekOfYear([Date])),
      InsertMonthWeekNumber= Table.AddColumn(InsertWeekNumber, "WeekOfMonth Num", cada Date.WeekOfMonth([Date])),
      InsertMonthnYear = Table.AddColumn(InsertMonthWeekNumber,"Month-YearOrder", cada [Year]*10000 + [Month Num]*100),
      InsertQuarternYear = Table.AddColumn(InsertMonthnYear,"Quarter-YearOrder", cada [Year]*10000 + [Quarter Num]*100),
      ChangedType1 = Table.TransformColumnTypes(InsertQuarternYear,{{"Quarter-YearOrder", Int64.Type},{"Week Num", Int64.Type},{"WeekOfMonth Num", Int64.Type},{"Quarter", type text},{"Year", type text},{"Month-YearOrder", Int64.Type}, {"DateInt", Int64.Type}, {"DayOfMonth", Int64.Type}, {"Month Num", Int64.Type}, {"Quarter Num", Int64.Type}, {"Weekday Num", Int64.Type}})
      en
      ChangedType1
      en
      fnDateTable

      • Syndicate_Admin's avatar
        Syndicate_Admin
        Icon for Administrator rankAdministrator

        No estoy seguro de estar entendiendo al 100%, pero he editado su función para agregar ISOWeekNumber e ISOYear.

        Hágame saber si esto funciona ...

        dejar
          fnDateTable = (StartDate como fecha, EndDate como fecha, referencia cultural opcional como texto anulable) como tabla = >
            dejar
              DayCount = Duration.Days(Duration.From(EndDate - StartDate)) + 1,
              Fuente = List.Dates(StartDate, DayCount, #duration(1, 0, 0, 0)),
              TableFromList = Table.FromList(Source, Splitter.SplitByNothing()),
              ChangedType = Table.TransformColumnTypes(TableFromList, {{"Column1", tipo date}}),
              RenamedColumns = Table.RenameColumns(ChangedType, {{"Column1", "Date"}}),
              InsertYear = Table.AddColumn(RenamedColumns, "Year", cada Date.Year([Date]), escriba texto),
              InsertQuarterNum = Table.AddColumn(InsertYear, "Quarter Num", cada Date.QuarterOfYear([Date])),
              InsertQuarter = Table.AddColumn(
                InsertQuarterNum,
                "Cuarto",
                cada "Q" & Number.ToText([Quarter Num])
              ),
              InsertMonth = Table.AddColumn(InsertQuarter, "Month Num", cada Date.Month([Date]), escriba texto),
              InsertStartOfMonth = Table.AddColumn(
                InsertarMenso,
                "StartOfMonth",
                cada Date.StartOfMonth([Fecha]),
                fecha de tipo
              ),
              InsertEndOfMonth = Table.AddColumn(
                InsertStartOfMonth,
                "EndOfMonth",
                cada Date.EndOfMonth([Fecha]),
                fecha de tipo
              ),
              InsertDay = Table.AddColumn(InsertEndOfMonth, "DayOfMonth", cada Date.Day([Date])),
              InsertDayInt = Table.AddColumn(
                InsertDay,
                "DateInt",
                cada [Año] * 10000 + [Mes Num] * 100 + [DíaDeMón]
              ),
              InsertMonthName = Table.AddColumn(
                InsertarDayInt,
                "Mes",
                cada Date.ToText([Fecha], "MMMM", Referencia cultural),
                escriba texto
              ),
              InsertShortMonthName = Table.AddColumn(
                InsertMonthName,
                "Mes corto",
                cada Date.ToText([Fecha], "MMM", Referencia cultural),
                escriba texto
              ),
              InsertCalendarMonth = Table.AddColumn(
                InsertShortMonthName,
                "Mes Año",
                cada [Corto de mes] & " " & Number.ToText([Año]),
                escriba texto
              ),
              InsertCalendarQtr = Table.AddColumn(
                InsertarCalendarMenso,
                "Trimestre de año",
                cada "Q" & Number.ToText([Quarter num]) & " " & Number.ToText([Year]),
                escriba texto
              ),
              InsertDayWeek = Table.AddColumn(InsertCalendarQtr, "Weekday Num", cada Date.DayOfWeek([Date])),
              InsertDayName = Table.AddColumn(
                InsertDayWeek,
                "Día de la semana",
                cada Date.ToText([Fecha], "dddd", Cultura),
                escriba texto
              ),
              InsertShortDayName = Table.AddColumn(
                InsertDayName,
                "Corto entre semana",
                cada Date.ToText([Fecha], "ddd", Cultura),
                escriba texto
              ),
              InsertWeekEnding = Table.AddColumn(
                InsertShortDayName,
                "EndOfWeek",
                cada Date.EndOfWeek([Fecha]),
                fecha de tipo
              ),
              InsertWeekNumber = Table.AddColumn(InsertWeekEnding, "Week Num", cada Date.WeekOfYear([Date])),
              InsertISOWeekNumber = Table.AddColumn(
                InsertWeekNumber,
                "Número de semana ISO",
                cada
                  if Number.RoundDown(
                    (Date.DayOfYear([Date]) - (Date.DayOfWeek([Date], Day.Monday) + 1) + 10) / 7
                  )
                    = 0
                  entonces
                    Number.RoundDown(
                      (
                        Date.DayOfYear(#date(Date.Year([Date]) - 1, 12, 31))
                          - (Date.DayOfWeek(#date(Date.Year([Date]) - 1, 12, 31), Day.Monday) + 1)
                          + 10
                      )
                        / 7
                    )
                  de lo contrario si (
                    Number.RoundDown(
                      (Date.DayOfYear([Date]) - (Date.DayOfWeek([Date], Day.Monday) + 1) + 10) / 7
                    )
                      = 53 y (Date.DayOfWeek(#date(Date.Year([Date]), 12, 31), Day.Monday) + 1 < 4)
                  )
                  entonces
                    1
                  más
                    Number.RoundDown(
                      (Date.DayOfYear([Date]) - (Date.DayOfWeek([Date], Day.Monday) + 1) + 10) / 7
                    )
              ),
              InsertISOYear = Table.AddColumn(
                InsertISOWeekNumber,
                "Año ISO",
                cada Date.Year(Date.AddDays([Fecha], 26 - [Número de semana ISO]))
              ),
              InsertMonthWeekNumber = Table.AddColumn(
                InsertarISOAño,
                "WeekOfMonth Num",
                cada Date.WeekOfMonth([Fecha])
              ),
              InsertMonthnYear = Table.AddColumn(
                InsertarMonthWeekNumber,
                "Mes-AñoOrden",
                cada [Año] * 10000 + [Mes Num] * 100
              ),
              InsertQuarternYear = Table.AddColumn(
                InsertMonthnYear,
                "Quarter-YearOrder",
                cada [Año] * 10000 + [Número de trimestre] * 100
              ),
              ChangedType1 = Table.TransformColumnTypes(
                InsertarCuárramoaño,
                {
                  {"Quarter-YearOrder", Int64.Type},
                  {"Número de semana", Int64.Type},
                  {"WeekOfMonth Num", Int64.Type},
                  {"Cuarto", escriba texto},
                  {"Año", escriba texto},
                  {"Month-YearOrder", Int64.Type},
                  {"DateInt", Int64.Type},
                  {"DayOfMonth", Int64.Type},
                  {"Month Num", Int64.Type},
                  {"Cuarto Num", Int64.Type},
                  {"Número de días laborables", Int64.Type}
                }
              )
            en
              ChangedType1
        en
          fnDateTable

        Si esto es lo que está buscando, deberá tener en cuenta todo lo que esté haciendo con "año" y considerar el uso de "año ISO".

        Para referencia:

        https://datacornering.com/how-to-calculate-iso-week-number-in-power-query/

        https://datacornering.com/how-to-calculate-iso-year-in-power-query/