【问题标题】:Power Query - Fiscal Calendar 445 Current Month WeekPower Query - 会计日历 445 本月周
【发布时间】:2021-02-08 12:10:09
【问题描述】:

我正在尝试在 Power Query 中构建一个财务日历,以便将此日历作为数据流也提供给其他部门。过去,我使用过 DAX 日历,但这有其共享日历的限制,对吗? 所以,我已经有了日期、会计年度和 ISO/会计周信息,使用这个 M 脚本:

let
    StartDate        = #date (2009,1,1),
    EndDate          = #date (2024,12,31),
    ListOfDates      = List.Dates(StartDate, DurationDays, #duration(1, 0, 0, 0)),
    DurationDays     = Duration.Days (EndDate - StartDate) + 1,
    TableOfDates     = Table.FromList(ListOfDates, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    DateColText      = Table.RenameColumns(TableOfDates,{{"Column1", "Date"}}),
    DateCol          = Table.TransformColumnTypes(DateColText,{{"Date", type date}}),
    WeekdayCol       = Table.AddColumn(DateCol, "Weekday Number", each Date.DayOfWeek([Date], Day.Monday) + 1,Int64.Type),
    #"Inserted Day Name" = Table.AddColumn(WeekdayCol, "Day Name", each Date.DayOfWeekName([Date]), type text),
    IsoWeekYearCol   = Table.AddColumn(#"Inserted Day Name", "Iso Week Year", each Date.Year(Date.AddDays([Date], 4-[Weekday Number])), Int64.Type),
    IsoWeekNrCol     = Table.AddColumn(IsoWeekYearCol, "Iso Week Nummer", each (Duration.Days(Date.AddDays([Date], 4-[Weekday Number]) - #date([Iso Week Year], 1 , 7 - Date.DayOfWeek(#date([Iso Week Year],1,4), Day.Monday)))/7)+1, Int64.Type),
    IsoWeekdayExtCol = Table.AddColumn(IsoWeekNrCol, "Iso Weekday Extended", each Text.From([Iso Week Year]) & "-W" & Text.End("0" &     Text.From([Iso Week Nummer]), 2) & "-"&  Text.From([Weekday Number]))
in
    IsoWeekdayExtCol

但是我现在如何为相应的会计月份添加一个列,同时为 CurrentMonth 和 CurrentWeek 添加一个单独的列。

你会怎么做?

【问题讨论】:

  • 你的最后一个季度也会是 445 吗?还是会是454?您的财政年度是否在财政年度最后一个月的最后一个星期六结束?还是在离财政年度最后一个月末最近的星期六?您会计年度的最后一个月是几月?
  • 非常感谢您对@RonRosenfeld 的支持!这是一个 445 日历(2020 年为 446)。最后一个月是十二月。 2020 年底是 03.01.2020,2021 年底是 02.01.2022

标签: excel powerbi powerquery powerpivot


【解决方案1】:

要添加具有相应会计月份的列,您可以从周数(您已经计算过)派生它。由于月份是 4-4-5,因此可以从周数预测相关月份。

   #"Added Custom" = Table.AddColumn(IsoWeekdayExtCol, "Fiscal Month", each 
             if List.Contains({1..4},[Iso Week Nummer]) then "January"
        else if List.Contains({5..8},[Iso Week Nummer]) then "February"
        else if List.Contains({9..13},[Iso Week Nummer]) then "March"
        else if List.Contains({14..17},[Iso Week Nummer]) then "April"
        else if List.Contains({18..21},[Iso Week Nummer]) then "May"
        else if List.Contains({22..26},[Iso Week Nummer]) then "June"
        else if List.Contains({27..30},[Iso Week Nummer]) then "July"
        else if List.Contains({31..34},[Iso Week Nummer]) then "August"
        else if List.Contains({35..39},[Iso Week Nummer]) then "September"
        else if List.Contains({40..43},[Iso Week Nummer]) then "October"
        else if List.Contains({44..47},[Iso Week Nummer]) then "November"
        else "December")

对于 CurrentMonth 和 CurrentWeek,我假设您的意思是一整列都填满了今天的会计月份和今天的会计周。

您只需要添加一个查找类型的列,您可以在其中根据今天的日期确定要返回的行。所以:

    #"Added Custom1" = Table.AddColumn(#"Added Custom", "Current Month (fiscal)", each 
        Table.Column(#"Added Custom","Fiscal Month")
            {List.PositionOf(Table.Column(#"Added Custom","Date"),Date.From(DateTime.LocalNow()))}),

    #"Added Custom2" = Table.AddColumn(#"Added Custom1", "Current Week (fiscal)", each 
        Table.Column(#"Added Custom","Iso Week Nummer")
            {List.PositionOf(Table.Column(#"Added Custom","Date"),Date.From(DateTime.LocalNow()))})

【讨论】:

  • 太棒了,效果很好!如何将“当前月份(财政)”列更改为带有 TRUE/FALSE 并结合当前财政年度的布尔值?
  • @joshua 这与您提出的问题不同。但是你应该可以通过一个简单的if .. then .. else 语句来做到这一点。请务必同时考虑财政月份和年份。您可以修改Current Month (fiscal) 列或创建一个新列。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-06
相关资源
最近更新 更多