1. 程式人生 > >M 語言實戰小例:建立一個自增長日曆

M 語言實戰小例:建立一個自增長日曆

在資料分析中時間是一個很重要的向量,很多分析表單都需要使用時間點進行建立。例如統計銷售情況時就要按照日期進行統計;公司的財務表單也離不開時間軸。在用Power BI進行資料分析時常會建立一個單獨的日曆表單,這個日曆表單通常以天為單位,從一個特定時間開始,到當前日期結束。並且隨著時間的推移,表單截止日期也會相應的變化。例如當設定日曆以每天為單位進行增長時,10號那天日曆表單的最後一項是10日,當11號那天開啟表單後,最後一天就變成了11日。

在Power BI中要建立這個表單就需要使用M語言。具體方法如下:

let
    Source = #date(1970,1,1),
    CreateDateList = List.Dates(Source, Number
.From(DateTime.LocalNow())- Number.From(Source) ,#duration(1,0,0,0)), #"Converted to Table" = Table.FromList(CreateDateList, Splitter.SplitByNothing(), null, null, ExtraValues.Error), #"Renamed Columns" = Table.RenameColumns(#"Converted to Table",{{"Column1", "Date"}}) in #"Renamed Columns"

在這段指令碼中:


  • Source定義了一個時間量#date,代表這個表單的起始時間是1970年1月1日。
  • CreateDateList使用了List.Dates函式是用來建立一個時間列,使用格式為:
List.Dates(start as date, count as number, step as duration)


    • 第一個引數start意思是時間列的起始值,在腳本里面使用的是Source下面的時間量,也就是#date中的1970年1月1日。
    • 第二個引數count是指這個時間列一共含有多少值。在腳本當中count值是由Number.From(DateTime.LocalNow())- Number.From(Source)獲得,也就是當前本地日期和Source日期的間隔數。
    • 第三個引數#duration定義了列中值的自增長方式。在示例中#duration(1,0,0,0)代表以1天為單位進行增長.

  • #”Converted to Table”的目的是將獲得的CreateDateList列轉換成表單。
  • #”Renamed Columns” 的目的則是將新生成的日曆表單表頭名改成Date,以方便以後使用。預設情況下,轉換成table後生成的列名是Column1,沒有實際的使用意義。

這裡寫圖片描述

這個獨立的日曆表單建立完畢後就可以用來與其他帶有日期記錄的表單建立關聯關係,然後將其作為時間軸,計算不同物件在同一時間點的數值情況。例如下面的例子中有一個FileInfo的表單分別含有一系列檔案的建立時間,修改時間以及最後訪問時間。如果想建立一個圖表去檢視某一天有多少檔案被建立,修改或者訪問,單憑這個FileInfo表單是無法實現的。原因是這三個數值都是以單獨按照自己的時間點進行的統計,而非基於同一時間進行,導致無法將這幾個數值在同一個圖表中提現。
這裡寫圖片描述

要實現這個需求就要建立一個自增的日曆,實現所有資料都以同一時間軸進行統計,這樣就可以將這些資料放到同一個圖表中進行顯示了。
這裡寫圖片描述