Power BI alapok : Power Query generátorok használata ciklusként, dátum kezelésnél
Két minta :
--- xlsx naptár:
let
// Read Config Table
ConfigTable = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
YearsToAppend = Table.First(ConfigTable)[YearsToGenerate],
FinancialYearStartingMonth=Table.First(ConfigTable)[FinancialYearStartingMonth],
// Generate base table
Source = List.Dates(Date.From(Table.First(ConfigTable)[StartDate]),YearsToAppend*365,#duration(1, 0, 0, 0)),
Transformed=List.Transform(Source, each Date.ToRecord(_)),
Tabled=Table.FromList(Transformed,Record.FieldValues,{"Year","Month","Day"}),
//Add Full Date Column
FullDateAddedTable=Table.AddColumn(Tabled,"FullDateAlternateKey",each Date.FromText(Text.From([Year])&"-"&Text.From([Month])&"-"&Text.From([Day]))),
DateKeyAdded=Table.AddColumn(FullDateAddedTable,"DateKey",each ([Year]*10000)+([Month]*100)+[Day]),
FullDateNameAdded=Table.AddColumn(DateKeyAdded,"DateFullName",each
DateTime.ToText(DateTime.From([FullDateAlternateKey]),"dd MMMM yyyy")),
// Fiscal Year
FiscalYearAdded=Table.AddColumn(FullDateNameAdded,
"Fiscal Year",
each
if Date.Month([FullDateAlternateKey])>=FinancialYearStartingMonth then
Date.Year([FullDateAlternateKey])+1
else
Date.Year([FullDateAlternateKey])
),
// Fiscal Month
FiscalQuarterAdded=Table.AddColumn(FiscalYearAdded,
"Fiscal Quarter",
each
if Date.Month([FullDateAlternateKey])>=FinancialYearStartingMonth then
Number.IntegerDivide((Date.Month([FullDateAlternateKey])-
FinancialYearStartingMonth),3)+1
else
Number.IntegerDivide((12+Date.Month([FullDateAlternateKey])- FinancialYearStartingMonth),3)+1),
// Calendar Quarter
CalendarQuarterAdded=Table.AddColumn(FiscalQuarterAdded, "Calendar Quarter",
each Number.IntegerDivide(Date.Month([FullDateAlternateKey])-1,3)+1),
// Is Week Day
WeekDayAdded=Table.AddColumn(CalendarQuarterAdded, "IsWeekDay",
each
if
Date.DayOfWeek(DateTime.From([FullDateAlternateKey]))=Day.Sunday or
Date.DayOfWeek(DateTime.From([FullDateAlternateKey]))=Day.Saturday then 0 else 1 ),
// Day Of Week
DayOfWeek=Table.AddColumn(WeekDayAdded,"DayOfWeek",each Date.DayOfWeek(DateTime.From([FullDateAlternateKey]))),
// Month Name
MonthName=Table.AddColumn(DayOfWeek,"Month Name",each DateTime.ToText(DateTime.From([FullDateAlternateKey]),"MMMM")),
// Day of Week Name
DayOfWeekName=Table.AddColumn(MonthName,"Day of Week Name",each DateTime.ToText(DateTime.From([FullDateAlternateKey]),"dddd"))
in
DayOfWeekName
// Read Config Table
ConfigTable = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
YearsToAppend = Table.First(ConfigTable)[YearsToGenerate],
FinancialYearStartingMonth=Table.First(ConfigTable)[FinancialYearStartingMonth],
// Generate base table
Source = List.Dates(Date.From(Table.First(ConfigTable)[StartDate]),YearsToAppend*365,#duration(1, 0, 0, 0)),
Transformed=List.Transform(Source, each Date.ToRecord(_)),
Tabled=Table.FromList(Transformed,Record.FieldValues,{"Year","Month","Day"}),
//Add Full Date Column
FullDateAddedTable=Table.AddColumn(Tabled,"FullDateAlternateKey",each Date.FromText(Text.From([Year])&"-"&Text.From([Month])&"-"&Text.From([Day]))),
DateKeyAdded=Table.AddColumn(FullDateAddedTable,"DateKey",each ([Year]*10000)+([Month]*100)+[Day]),
FullDateNameAdded=Table.AddColumn(DateKeyAdded,"DateFullName",each
DateTime.ToText(DateTime.From([FullDateAlternateKey]),"dd MMMM yyyy")),
// Fiscal Year
FiscalYearAdded=Table.AddColumn(FullDateNameAdded,
"Fiscal Year",
each
if Date.Month([FullDateAlternateKey])>=FinancialYearStartingMonth then
Date.Year([FullDateAlternateKey])+1
else
Date.Year([FullDateAlternateKey])
),
// Fiscal Month
FiscalQuarterAdded=Table.AddColumn(FiscalYearAdded,
"Fiscal Quarter",
each
if Date.Month([FullDateAlternateKey])>=FinancialYearStartingMonth then
Number.IntegerDivide((Date.Month([FullDateAlternateKey])-
FinancialYearStartingMonth),3)+1
else
Number.IntegerDivide((12+Date.Month([FullDateAlternateKey])- FinancialYearStartingMonth),3)+1),
// Calendar Quarter
CalendarQuarterAdded=Table.AddColumn(FiscalQuarterAdded, "Calendar Quarter",
each Number.IntegerDivide(Date.Month([FullDateAlternateKey])-1,3)+1),
// Is Week Day
WeekDayAdded=Table.AddColumn(CalendarQuarterAdded, "IsWeekDay",
each
if
Date.DayOfWeek(DateTime.From([FullDateAlternateKey]))=Day.Sunday or
Date.DayOfWeek(DateTime.From([FullDateAlternateKey]))=Day.Saturday then 0 else 1 ),
// Day Of Week
DayOfWeek=Table.AddColumn(WeekDayAdded,"DayOfWeek",each Date.DayOfWeek(DateTime.From([FullDateAlternateKey]))),
// Month Name
MonthName=Table.AddColumn(DayOfWeek,"Month Name",each DateTime.ToText(DateTime.From([FullDateAlternateKey]),"MMMM")),
// Day of Week Name
DayOfWeekName=Table.AddColumn(MonthName,"Day of Week Name",each DateTime.ToText(DateTime.From([FullDateAlternateKey]),"dddd"))
in
DayOfWeekName
---- Közvetlen naptár generálás
let
// Konfigurációs értékek manuális beállítása
YearsToAppend = 5, // Pl. 5 évnyi adat
FinancialYearStartingMonth = 4, // Pénzügyi év áprilistól indul
StartDate = #date(2020,1,1), // Kezdő dátum
// Időszak generálása
Source = List.Dates(StartDate, YearsToAppend * 365, #duration(1, 0, 0, 0)),
Transformed = List.Transform(Source, each Record.FromList({Date.Year(_), Date.Month(_), Date.Day(_)}, {"Year","Month","Day"})),
Tabled = Table.FromRecords(Transformed),
// Teljes dátum oszlop
FullDateAddedTable = Table.AddColumn(Tabled, "FullDateAlternateKey", each #date([Year], [Month], [Day])),
DateKeyAdded = Table.AddColumn(FullDateAddedTable, "DateKey", each ([Year] * 10000) + ([Month] * 100) + [Day]),
FullDateNameAdded = Table.AddColumn(DateKeyAdded, "DateFullName", each Date.ToText([FullDateAlternateKey], "dd MMMM yyyy")),
// Pénzügyi év meghatározása
FiscalYearAdded = Table.AddColumn(FullDateNameAdded, "Fiscal Year", each if Date.Month([FullDateAlternateKey]) >= FinancialYearStartingMonth then Date.Year([FullDateAlternateKey]) + 1 else Date.Year([FullDateAlternateKey])),
// Pénzügyi negyedév meghatározása
// FiscalQuarterAdded = Table.AddColumn(FiscalYearAdded, "Fiscal Quarter", each Number.IntegerDivide((Date.Month([FullDateAlternateKey]) - FinancialYearStartingMonth + 12), 12, 3) + 1),
FiscalQuarterAdded = Table.AddColumn(FiscalYearAdded, "Fiscal Quarter", each Number.IntegerDivide(Number.Mod(Date.Month([FullDateAlternateKey]) - FinancialYearStartingMonth + 12, 12), 3) + 1
),
// Naptári negyedév
CalendarQuarterAdded = Table.AddColumn(FiscalQuarterAdded, "Calendar Quarter", each Number.IntegerDivide(Date.Month([FullDateAlternateKey]) - 1, 3) + 1),
// Hétköznap ellenőrzése
WeekDayAdded = Table.AddColumn(CalendarQuarterAdded, "IsWeekDay", each if List.Contains({0, 6}, Date.DayOfWeek([FullDateAlternateKey])) then 0 else 1),
// A hét napja számként
DayOfWeek = Table.AddColumn(WeekDayAdded, "DayOfWeek", each Date.DayOfWeek([FullDateAlternateKey])),
// Hónap neve
MonthName = Table.AddColumn(DayOfWeek, "Month Name", each Date.ToText([FullDateAlternateKey], "MMMM")),
// A hét napjának neve
DayOfWeekName = Table.AddColumn(MonthName, "Day of Week Name", each Date.ToText([FullDateAlternateKey], "dddd"))
in
DayOfWeekName
// Konfigurációs értékek manuális beállítása
YearsToAppend = 5, // Pl. 5 évnyi adat
FinancialYearStartingMonth = 4, // Pénzügyi év áprilistól indul
StartDate = #date(2020,1,1), // Kezdő dátum
// Időszak generálása
Source = List.Dates(StartDate, YearsToAppend * 365, #duration(1, 0, 0, 0)),
Transformed = List.Transform(Source, each Record.FromList({Date.Year(_), Date.Month(_), Date.Day(_)}, {"Year","Month","Day"})),
Tabled = Table.FromRecords(Transformed),
// Teljes dátum oszlop
FullDateAddedTable = Table.AddColumn(Tabled, "FullDateAlternateKey", each #date([Year], [Month], [Day])),
DateKeyAdded = Table.AddColumn(FullDateAddedTable, "DateKey", each ([Year] * 10000) + ([Month] * 100) + [Day]),
FullDateNameAdded = Table.AddColumn(DateKeyAdded, "DateFullName", each Date.ToText([FullDateAlternateKey], "dd MMMM yyyy")),
// Pénzügyi év meghatározása
FiscalYearAdded = Table.AddColumn(FullDateNameAdded, "Fiscal Year", each if Date.Month([FullDateAlternateKey]) >= FinancialYearStartingMonth then Date.Year([FullDateAlternateKey]) + 1 else Date.Year([FullDateAlternateKey])),
// Pénzügyi negyedév meghatározása
// FiscalQuarterAdded = Table.AddColumn(FiscalYearAdded, "Fiscal Quarter", each Number.IntegerDivide((Date.Month([FullDateAlternateKey]) - FinancialYearStartingMonth + 12), 12, 3) + 1),
FiscalQuarterAdded = Table.AddColumn(FiscalYearAdded, "Fiscal Quarter", each Number.IntegerDivide(Number.Mod(Date.Month([FullDateAlternateKey]) - FinancialYearStartingMonth + 12, 12), 3) + 1
),
// Naptári negyedév
CalendarQuarterAdded = Table.AddColumn(FiscalQuarterAdded, "Calendar Quarter", each Number.IntegerDivide(Date.Month([FullDateAlternateKey]) - 1, 3) + 1),
// Hétköznap ellenőrzése
WeekDayAdded = Table.AddColumn(CalendarQuarterAdded, "IsWeekDay", each if List.Contains({0, 6}, Date.DayOfWeek([FullDateAlternateKey])) then 0 else 1),
// A hét napja számként
DayOfWeek = Table.AddColumn(WeekDayAdded, "DayOfWeek", each Date.DayOfWeek([FullDateAlternateKey])),
// Hónap neve
MonthName = Table.AddColumn(DayOfWeek, "Month Name", each Date.ToText([FullDateAlternateKey], "MMMM")),
// A hét napjának neve
DayOfWeekName = Table.AddColumn(MonthName, "Day of Week Name", each Date.ToText([FullDateAlternateKey], "dddd"))
in
DayOfWeekName
Megjegyzések
Megjegyzés küldése