Forum Discussion
Problema con WeekNum ( Tabla de fechas)
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
- Syndicate_Admin4 years ago
Administrator
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 fnDateTableSi 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/