Power Query 補齊缺少的日期
將缺少的日期補上:
結果如下:
有兩種思路:
新增日期列表,展開列表,自建日期表,查詢後填充新增日期列表:以本行日期為起始日期,與下一行的日期的天數,建立日期列表:
如果是最後一行,列表就只有這行的這一天。
if [Date]=List.Last(源[Date]) then {[Date]} else List.Dates([Date],Duration.Days(源[Date]{List.PositionOf(源[Date],_[Date])+1}-[Date]),#duration(1,0,0,0))
然後我們展開日期列表:
擴充套件到新行,就得到我們想要的結果了。
也可以把上面的步驟直接整合成一句:
= Table.ExpandListColumn(Table.RemoveColumns(Table.AddColumn(源,"date",each if List.Last(源[Date])=_[Date] then {List.Last(源[Date])} else List.Dates(_[Date],Duration.Days( 源[Date]{List.PositionOf(源[Date],_[Date])+1}-_[Date]),#duration(1,0,0,0))),"Date"),"date")
自建日期表
使用第一個日期與最後一個日期建立一個日期表:
然後轉換成表,合併查詢源:
然後展開:
向下填充:
就能得到結果:
這個過程有一個需要注意的地方,源是每個查詢中都有的,為了在合併查詢的時候能夠正常查詢出結果,需要修改其中一個的名稱:
修改本查詢的第一個源為源1,或者直接把源表的名稱修改為別的名稱。
例子中我們是修改了本查詢中的第一步中的源為源1。
上面的所有的過程,同樣可以合併成一句:
= Table.FillDown(Table.ExpandTableColumn(Table.NestedJoin(Table.FromList(List.Dates(List.First(源[Date]),Duration.Days(List.Last(源[Date])-List.First(源[Date]))+1,#duration(1,0,0,0)),Splitter.SplitByNothing(),{"Date"}),{"Date"}, 源, {"Date"}, "源", JoinKind.LeftOuter),"源", {"Quantity"}, {"Quantity"}),{"Quantity"})
我們初學者對M函式並不熟悉,所以可以透過分步的處理,得到結果後,再透過分步的函式再合併起來。這個過程本身也是對M函式的學習過程。
最新評論