Power Query實作資料庫系列:(5/6)建立符合專長需求的員工名單

萬事具備了,我們就開始來建立選取專長項目後的名冊輸出,以顯示出到底有哪些員工符合我們的專長需求囉!因此,再度進入Power Query編輯器,以[員工專長列表]查詢結果來進行這項任務。

建立符合專長需求的查詢

請以滑鼠右鍵點按[員工專長列表]查詢,從展開的快顯功能表中點選[參考]功能選項。

隨即產生一個名為[員工專長列表 (2)]的新查詢,而此查詢僅有一個查詢步驟,描述其來源是來自[員工專長列表]查詢的結果。從公式列中也可以看到此查詢步驟的M語言為「=員工專長列表」,因此,一旦[員工專長列表]查詢的結果有變化,此查詢也會同步受到影像。

我們就開始進行專長項目的篩選囉!譬如:點按[專長]資料行名稱右側倒三角形的排序/篩選按鈕,此次,我們先暫時僅勾選「Excel」這個專長項目即可。

沒錯,查詢結果立即呈現員工的專長項目僅符合「Excel」專長的只有2位員工,分別是工號EM092與EM095。而從公式列上也可以看到M語言的公式為:

= Table.SelectRows(來源, each ([專長] = "Excel"))

即便我們不是很熟悉無中生有的撰寫M語言,但從字裡行間的遣詞用字,這個Table.SelectRows的M語言函數,的確是篩選資料列(也就是資料紀錄)的運作,而篩選的準則即是函數小括弧裡的參數設定:

each ([專長] = "Excel")

可以解讀成每一個[專長]資料行裡的內容值是字串"Excel"的資料列。還記得我們從經建立過一個名為[已選擇的專長項目]查詢嗎!這是一個清單型態的查詢,裡面正記錄著在工作表範圍B3:B7裡一共選擇了幾種已被移除重複項的專長項目。此刻的法想便是[專長]資料行的比對,就不是僅跟上述的字串"Excel" 相比對了,而是應該跟整個[已選擇的專長項目]查詢的內容相比對才是。所以,在此我們就以人工編輯修改此公式的方式,直接將上述的each語法改寫成:

each List.Contains(已選擇的專長項目,[專長])

意思是每一個[專長]資料行裡的內容值與名為[已選擇的專長項目]清單(List)裡的內容相符的資料列。完整的公式為:

= Table.SelectRows(來源, each List.Contains(已選擇的專長項目,[專長]))

此時公式中[已選擇的專長項目]清單(List)裡的內容正是我們先前透過工作表上的B3:B7範圍,經由下拉式選單所挑選的2個專長項目:[日文]與[資料分析]。因此,修改此查詢步驟的公式後,查詢結果立即呈現員工的專長項目是符合「日文」專長及「資料分析」專長的員工列表。

不過,這還不是我們要的最終查詢結果,因為,我們想要呈現的結果是同時具有「日文」專長及「資料分析」專長的員工,若僅符合其中一項專長,並不是我們所要的人選。所以,我們就需要判別並篩選同時符合多少專長項目的員工,才是我們最終的人選。

判別並篩選多項專長項目的員工

此刻我們可以針對目前的查詢結果,再加碼進行後續的查詢步驟,那就是在目前的查詢結果中,摘要統計[工號]資料行裡的內容,同一[工號]出現過2次者,就是我們所要的成員了。所以,請點按[常用]索引標裡的[分組依據]命令按鈕,開啟[分組依據]對話方塊後,使用預設的[基本]分組依據選項,指定的分組依據資料行為[工號]。至於新資料行名稱的文字方塊裡,維持預設的[計數];作業選項也是採用預設的[計算列數]。

完成[分組依據]對話方塊的操作後,您會發覺目前的查詢結果產生了名為[計數]資料行,其內容不就是[工號]資料行裡工號出現的次數嗎?

接著,便是點按[計數]資料行名稱右側倒三角形的排序/篩選按鈕,再展開的功能選單中點選[數字篩選],並在從展開的副選單中點選[大於或等於]選項。

隨即開啟[選資料列]對話方塊,設定篩選條件是[大於或等於],而右側文字方塊裡則鍵入數字「2」。

從篩結果可以看出,同時符合具備[日文]與[資料分析]這2個專長項目的員工,僅有工號EM088與EM097。而公式列裡也可以看到非常容易解讀的M語言的程式碼:

= Table.SelectRows(已群組資料列, each [計數] >= 2)

當然,查詢的選項是靈活的、可變的,或許要查詢的員工專長項目不是[日文]與[資料分析]這2項,甚可以僅查詢某單項專長,或同時具備3項專長、…。所以,我們先前準備的[已選擇的專長項目數]查詢(還記得嗎?這是一個整數值的查詢結果),在這裡就配得上用場了!我們將公式列裡的公式尾端「>2」改成「>已選擇的專長項目數」就十分完美了,修改後的程式碼如下:

= Table.SelectRows(已群組資料列, each [計數] >= 已選擇的專長項目數)

此外,我們並非只想顯示員工工號而已,員工姓名與其所隸屬的部門也要一併呈現在查詢結果裡,這就得透過[合併查詢]來幫忙了。此時請點按[常用]索引標籤裡的[合併查詢]命令按鈕。

開啟[合併查詢]對話方塊,對話上方是目前使用中的查詢,對話下方的下拉式選單則可以選擇另一個查詢,此例請選擇要合併的查詢是[員工基本資料]。合併兩個查詢的聯結種類是屬於左方外部(第一個的所有資料列、第二個的相符資料列)。

此[合併]對話方塊裡的第一個查詢包含了2個資料行,請點選[工號]資料行,而要併入的第二個查詢包含了3個資料行,也請點選其[工號]資料行,並完成此對話方塊的操作。

合併後的查詢結果,產生了[員工基本資料]資料行,資料行裡每一個資料列內容屬性都是Table型態的容器。意即儲存著每一位員工的基本資料。在[員工基本資料]資料行名稱的左側,可以看到此資料行的資料型態是資料表類型的表格圖示,而是資料行名稱的右側則並非您常見代表篩選/排序的倒三角形圖示,而是展開資料表內容的功能圖示。

在點按[員工基本資料]資料行的資料表展開按鈕後,在展開的資料行名稱清單裡,僅勾選[姓名]與[部門]這兩個資料行,然後,取消[使用原始資料行名稱做為前置詞]核取方塊的勾選。

完成的查詢結果後,將此查詢名稱改為較直白的[員工專長查詢結果],然後,點按[常用]索引標籤裡[關閉並載入]命令按鈕的下半部按鈕,並從展開的下拉式功能選單中點選[關閉並載入至…]功能選項。

開啟[匯入資料]對話方塊後,點按[表格]功能選項,並選擇將查詢結果放在[專長查詢]工作表的儲存格E2處。

從此範例結果可看出同時具備[資料分析]與[日文]的員工共計兩人。

 

 

Power Query實作資料庫系列文章與實作: