經過這一輪的List(清單)實作,相信您對清單的結構、語法與特性,有些基本認識了吧!接著,我們就來看看另一個Power Query容器:Record(記錄)的特性。
建立一筆資料記錄
就像是Excel工作表橫向的資料列,在資料表的結構上,橫向便是一筆一筆的資料記錄。在Power Query裡是使用一對中括號[]來表示一筆資料記錄。藉由欄位名稱與欄位值來表達該筆資料記錄的內容,而欄位與欄位之間,則以逗點作為分隔符號。每一個欄位資料的內容,則是由一個等式來敘述,等號的左邊是欄位名稱,也就是資料行名稱,等號的右邊則是該欄位的值。欄位名稱兩側不需要雙引號,但是若欄位的值是文字資料,則必須要加上一對雙引號。因此,一筆Record(記錄)的基本撰寫語法為:
[欄位1名稱=值, 欄位2名稱=值, 欄位3名稱=值,…]
例如,建立一筆資料記錄:
=[工號="E9002",姓名="林美如",工時=87,時薪=650]
若要檢視整個M語言的程式碼,可以開啟[進階編輯器]而一目了然。

既然是Record(記錄),在Power Query查詢編輯器視窗頂端即顯示著[記錄工具],而底下[轉換]索引標籤裡的[轉換]群組內提供了[成為資料表]命令按鈕,可以協助使用者將Record轉換成Table(資料表)。

將一筆記錄轉化成表格,可顯示出該資料記錄有哪些欄位名稱(Name資料行)以及各欄位的值(Value)。這時候在[套用的步驟]底下也新增了一個查詢步驟,轉換後的查詢輸出是預設為[已轉換為資料表]的查詢步驟,此查詢輸出結果包含2個欄位、4個資料列的Table資料型態了。

其實,只要懂得M語言的使用,也是可以自行撰寫程式碼來完成所需的查詢步驟。例如:我們想要導出Record裡每一個欄位(Field)的值(Value),則可以使用Record.FieldValues()函數。所以,在來源步驟的下方添增一行程式碼,例如自行輸入:
輸出 = Record.FieldValues(來源)
您也會發覺在進階編輯器裡輸入程式碼的過程中,Power Query都會適度的彈跳出相關的語法說明,提醒我們也讓我們學習到相關函數的用途與語法。譬如:此範例中的Record.FieldValues(來源)函數,小括號裡的來源參數其資料型態必須是Record,而此函數傳回的查詢結果是List資料型態。

一次建立多筆資料記錄
我們可以藉由建立List(清單)的形式來建立多筆Record(記錄),也就是每一筆Record視為List裡的元素,撰寫在一對大括號裡:
{Record,Record,Record,….}
例如:
={[工號="E9003",姓名="陳孝天",工時=102,時薪=480],[工號="E9005",姓名="邱玉嬪",工時=76,時薪=720],[工號="E9008",姓名="林世賢",工時=92,時薪=1020]}
輸入List語法建立多筆Record的函數編碼。

將List轉換成Table
List的內容既然是Record,那麼自然將List轉化成Table也不是難事。例如:以剛剛建立多筆Record的List為例,可以點按[清單工具]底下[轉換]索引標籤裡的[到表格]命令按鈕,開啟[到表格]對話方塊,根據清單內容建立資料表,不用點選對話方塊裡的任何選項,直接點按[確定]按鈕。

List轉換為表格的函數是:
Table.FromList()
語法為:
= Table.FromList(來源, Splitter.SplitByNothing(), null, null, ExtraValues.Error)
立即產生一個名為[已轉換為資料表]的查詢步驟。此範例轉換成功的資料表裡有1個名為[Column1]的資料行、3個資料列,其內容都是(Record)。點按[Column1]資料行的展開按鈕,即可展開此資料行裡的Record。

展開Record內容的選單,選取所有的資料行(所有的資料欄位),取消[使用原始資料行名稱做為前置詞]核取方塊的勾選,然後點按[確定]按鈕。

將Table(表格)裡含有Record內容的資料行進行展開的操作,相對應的M語言函數是= Table.ExpandRecordColumn()函數。您不要看密密麻麻的程式編碼就感到害怕,其實,瞭解一些電腦與資料庫相關領域的專有名詞,也都不難揣測出這函數與其參數裡的意義。例如:展開Table裡Record資料型態的資料行,其函數 Table.ExpandRecorlColumn() ,其中Table是資料表;Expand是展開之意;Record是資料記錄;Column是資料行,不是都名符其實嗎!

綜觀,在記錄的處理上,我們經常會將Record轉換成List或Table來處理。而相關的函數是Record.ToList()函數、Record.FieldValues()函數。此外,不但Record可以轉換成Table,Table也可以轉換成Record。Record也可以進行合併,例如:可合併List中的多筆Record。
前一篇:<<Power Query三大容器實作系列 - (5/7) – 關於List的索引值>>
下一篇:<<Power Query三大容器實作系列 - (7/7) Table(資料表格)的建立編輯與轉換>>