Advance your Data & AI career with 50 days of live learning, dataviz contests, hands-on challenges, study groups & certifications and more!
Get registeredGet Fabric Certified for FREE during Fabric Data Days. Don't miss your chance! Learn more
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:
Se aprecia cualquier ayuda o sugerencia, incluso una fórmula de reemplazo o FI;
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:
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/
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.
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.
Por favor, vea si este artículo es útil.
Calendario 445 con años de 53 semanas – Hoosier BI
Palmadita
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í.
Advance your Data & AI career with 50 days of live learning, contests, hands-on challenges, study groups & certifications and more!
Check out the October 2025 Power BI update to learn about new features.