始めに
いや、本当に力尽きてたから。(基礎編、応用編なのは)
M言語入門
Excelに付いているM言語は、本当は簡単なのです。
只、自動生成機能に少し馬鹿なところがあるだけなのです。
詳細エディターで決まり切った関数を並べるだけで、複数のテーブルを操作して
新しいテーブルを簡単に作り出せます。
例1 ロット一覧
3つのテーブル M01_,T01_,T02_ から、年 機械番号、連番(NO)、製品長さ(w)、製品番号(O)、製品名、計画の
データを取ってきます。
M01_ は T01_ の明細で、1ロットで異なる長さのパイプを製造できるので、製品長さ(W) がデータにあります。
関数 Table.Combine で3つのテーブルを結合させます。
関数 Table.SelectRows で不必要なデータを削ります。
関数 Table.Sort でSortし、出てきた結果をテーブルに出力します。
簡単ですよね。お馬鹿なクエリーエディターの不要な型変換を削除し、日本語変数名を、意味の通る短い英文に直し、
入れ子にして変数の数を減らすと綺麗な形が見えてくるでしょう。
let
M01 = Table.SelectColumns( Excel.CurrentWorkbook(){[Name="M01_"]}[Content],{"年", "機", "NO", "W", "O", "製品名", "計画"}),
T01 = Table.SelectColumns( Excel.CurrentWorkbook(){[Name="T01_"]}[Content],{"年", "機", "NO", "O", "製品名", "計画"}),
T02 = Table.SelectColumns( Excel.CurrentWorkbook(){[Name="T02_"]}[Content],{"年", "機", "NO", "O", "製品名", "計画"}),
M01C = Table.Combine({M01,T01,T02}),
M01F = Table.SelectRows(M01C, each [製品名] <> null and [製品名] <> ""),
M01S = Table.Sort(M01F,{{"NO", Order.Descending}, {"年", Order.Descending}})
in
M01S
例2 出庫一覧
なんかすごい数のテーブルを扱っているように見えますが、テーブル設計を失敗しただけなのです。
T02_ の中に出庫データが6個入っているので、テーブルは、M01_、T02_ の2個しかありません。
Table.RenameColumns で名前を同じにします。
Table.Combineで全部結合するとちゃんと意図した通りのデータができます。
Table.SelectRows で不要なデータを削除します。
Table.Sort でソートした結果をテーブルに書き出します。
let
M01 = Table.SelectColumns( Excel.CurrentWorkbook(){[Name="M01_"]}[Content],{"年", "機", "NO", "W", "O","日付" , "出庫" ,"済"}),
T021S = Table.SelectColumns( Excel.CurrentWorkbook(){[Name="T02_"]}[Content],{"年", "機", "NO", "O","日付1", "出庫1","1" }),
T022S = Table.SelectColumns( Excel.CurrentWorkbook(){[Name="T02_"]}[Content],{"年", "機", "NO", "O","日付2", "出庫2","2" }),
T023S = Table.SelectColumns( Excel.CurrentWorkbook(){[Name="T02_"]}[Content],{"年", "機", "NO", "O","日付3", "出庫3","3" }),
T024S = Table.SelectColumns( Excel.CurrentWorkbook(){[Name="T02_"]}[Content],{"年", "機", "NO", "O","日付4", "出庫4","4" }),
T025S = Table.SelectColumns( Excel.CurrentWorkbook(){[Name="T02_"]}[Content],{"年", "機", "NO", "O","日付5", "出庫5","5" }),
T026S = Table.SelectColumns( Excel.CurrentWorkbook(){[Name="T02_"]}[Content],{"年", "機", "NO", "O","日付6", "出庫6","6" }),
T021R = Table.RenameColumns( T021S,{{"日付1","日付"},{"出庫1","出庫"},{"1","済"}}),
T022R = Table.RenameColumns( T022S,{{"日付2","日付"},{"出庫2","出庫"},{"2","済"}}),
T023R = Table.RenameColumns( T023S,{{"日付3","日付"},{"出庫3","出庫"},{"3","済"}}),
T024R = Table.RenameColumns( T024S,{{"日付4","日付"},{"出庫4","出庫"},{"4","済"}}),
T025R = Table.RenameColumns( T025S,{{"日付5","日付"},{"出庫5","出庫"},{"5","済"}}),
T026R = Table.RenameColumns( T026S,{{"日付6","日付"},{"出庫6","出庫"},{"6","済"}}),
M01C = Table.Combine({M01,T021R,T022R,T023R,T024R,T025R,T026R}),
M01F = Table.SelectRows(M01C, each [日付] <> null and [日付] <> "" and [年] = 2017),
M01S = Table.Sort(M01F,{{"日付", Order.Descending}, {"機", Order.Ascending}})
in
M01S
例3 仕掛一覧
SK_ は、仕掛一覧で作成したテーブルです。
わざと一部、エディターで自動生成する名前を残しています。(いや、面倒だったし)
これで、どれだけ理解を妨げてられているのか判ると思います。
変数名を書き換えたり、入れ子に直したりしても、文法的に間違っていなければ、
クエリーエディタは使えるのです。
let
M01 = Excel.CurrentWorkbook(){[Name="SK_"]}[Content],
フィルターされた行 = Table.SelectRows(M01, each ([済] = 0)),
並べ替えられた行 = Table.Sort(フィルターされた行,{{"機", Order.Ascending}, {"日付", Order.Ascending}}),
削除された列 = Table.RemoveColumns(並べ替えられた行,{"済"})
in
削除された列
まとめ
お馬鹿な、クエリーエディタの改善を望みます。
あの意味不明な日本語変数名は何とかして下さい。
詳細エディタでまともな形に直してから、クエリーエディタを使うしかありませんよね。
ではでは。