?? 近期推送的文章
· 正 · 文 · 來 · 啦 ·在日常工作中,常常會(huì)遇到一個(gè)問題,根據(jù)不同的條件判斷單元格中的信息是否匹配。根據(jù)實(shí)際情況的不同,解決思路也各不相同。 例如在第1表張中,注明了不同商品的質(zhì)量等級(jí)?,F(xiàn)在將商品隨機(jī)組合起來,形成一個(gè)禮品包。 如果這個(gè)包中有“良”等級(jí)的商品,那么這就是“二等包”,反之禮品包中全部為“優(yōu)”等級(jí)的商品,這就是個(gè)“一等包”。 這個(gè)問題如果通過Power Query的M函數(shù)來解決,則函數(shù)比較容易寫,而且不會(huì)太復(fù)雜。 在Power Query中解決這個(gè)問題的思路如下圖,重點(diǎn)在于第二步,如何通過M函數(shù)判斷禮品中包中否包含有質(zhì)量等級(jí)為“良”的商品。 第1步:上載商品表 將包含商品質(zhì)量等級(jí)信息的表上載到Power Query中。 第2步:篩選數(shù)據(jù) 修改表格名稱為“商品信息”,并將質(zhì)量等級(jí)為“良”的商品篩選出來。 第3步:以鏈接的形式上載表 此時(shí)對(duì)商品信息表進(jìn)行上載,因?yàn)檫@張表的作用是信息查詢,所以只要保留鏈接方面后面的查詢就行。 第4步:上載第二張表 將需要判斷等級(jí)的禮品包表格上載到PQ中。這里之所以沒有上載“禮品等級(jí)”列,是因?yàn)楹竺嬗煤瘮?shù)生成列即可,所以不需要這一列。 第5步:添加列 在上載的第二張表格中添加“自定義列”。 因?yàn)榍懊娌襟E中已經(jīng)對(duì)“商品信息”表進(jìn)行了篩選,所以在自定義列中,只需要寫入M函數(shù)判斷“禮品包”列中,是否包含“商品信息”表中的商品,如果有則返回“二等包”結(jié)果,反之則返回“一等包”結(jié)果 為了方便大家理解函數(shù),下面將函數(shù)拆開進(jìn)行演示。 第6步:判斷“禮品包”是否包含“商品信息”表中的商品 輸入函數(shù):List.Transform(商品信息[商品],(x)=>Text.Contains([禮品包],x)) 函數(shù)的詳細(xì)解釋: 1、List.Transform函數(shù) 作用:根據(jù)list列表返回新的列表。 語法:List.Transform(list as list,transform as function) 語法解釋:List.Transform(要參照的list列表,返回方式) 2、(x) 這是一個(gè)匿名函數(shù),用來存list列表的值。 3、=>符號(hào) 該符號(hào)表示處理方式,即用什么方式返回列表的值。 4、Text.Contains 作用:檢測(cè)返回文本中否包含子字符串。 語法:Text Contains(text as nullable text,subsring as text) 語法解釋:Text.Contains(文本,子字符串) 因此,該函數(shù)的邏輯如下圖所示。 這一步的運(yùn)算結(jié)果中,每一個(gè)禮品包都生成了新的list,而list的數(shù)量和之前的商品信息表數(shù)量是相對(duì)應(yīng)的。 也就是說商品信息表中,有5件商品質(zhì)量等級(jí)為“良”。那么函數(shù)依次判斷禮品包中的文本,是否包含了這5件商品的名稱,因此將生成5條TRUE或FALSE的判斷結(jié)果。 第7步:完善函數(shù)判斷等級(jí) 上面第6步已經(jīng)解決最核心的判斷了,接下來只需要完善函數(shù),將判斷結(jié)果以理想的結(jié)果呈現(xiàn)即可。 完整的函數(shù)為: =if List.AnyTrue(List.Transform(商品信息[商品],(x)=>Text.Contains([禮品包],x))) then"二等包" else"一等包" if函數(shù)和Any Ture用來判斷,生成的list列表中是否包含“TRUE”值,有這個(gè)值則表示禮品包中有“良”的商品,那么返回的結(jié)果為“二等包”。 如果沒有包含“TRUE”值,說明禮品包中沒有“良”的商品,返回的結(jié)果為“一等包”。 第8步:上載結(jié)果 將生成的結(jié)果上載到Excel中就可以了。 |
|