Forum Discussion
Problema con WeekNum ( Tabla de fechas)
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/