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

Get Fabric Certified for FREE during Fabric Data Days. Don't miss your chance! Learn more

Reply
Syndicate_Admin
Administrator
Administrator

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 9
Syndicate_Admin
Administrator
Administrator

Hola @Alecsen , ¿puedes publicar el código que usaste para crear esta tabla de fechas? Nos facilitará ayudarte.

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

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/

Syndicate_Admin
Administrator
Administrator

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])))

vpollymsft_0-1643177884827.png

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.

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
Administrator
Administrator

Por favor, vea si este artículo es útil.

Calendario 445 con años de 53 semanas – Hoosier BI

Palmadita

Syndicate_Admin
Administrator
Administrator

@Alecsen,

Echa un vistazo a este post...

https://community.powerbi.com/t5/Desktop/Incorrect-week-number-at-year-end-beginning/td-p/1474033

Creo que encontrarás lo que necesitas allí.

@KNP Lo intento sin ninguna ayuda. Tengo los mismos resultados.

Syndicate_Admin
Administrator
Administrator

@amitchandak alguna sugerencia?

Helpful resources

Announcements
Fabric Data Days Carousel

Fabric Data Days

Advance your Data & AI career with 50 days of live learning, contests, hands-on challenges, study groups & certifications and more!

October Power BI Update Carousel

Power BI Monthly Update - October 2025

Check out the October 2025 Power BI update to learn about new features.

FabCon Atlanta 2026 carousel

FabCon Atlanta 2026

Join us at FabCon Atlanta, March 16-20, for the ultimate Fabric, Power BI, AI and SQL community-led event. Save $200 with code FABCOMM.