首頁>技術>

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函式的學習過程。

16
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 「Python科學計算」2.5