5章: レコードとテーブル操作
M言語を使って、レコードやテーブルの操作方法を学びましょう。ここでは、レコードの作成・アクセス方法や、テーブルの作成・アクセス方法、カラムの追加・削除方法、テーブルの結合方法について解説します。
1. レコードの作成とアクセス
レコードは、名前と値のペアで構成されるデータ構造です。M言語でレコードを作成するには、波括弧 ({}) を使用し、フィールド名と値をコロン (:) で区切って記述します。
レコードの例: [Name = "Taro", Age = 20, City = "Tokyo"]
レコードから特定のフィールドの値を取得するには、ドット (.) 演算子を使用します。
レコードから名前を取得する例: [Name = "Taro", Age = 20, City = "Tokyo"][Name]
2. テーブルの作成とアクセス
テーブルは、列と行で構成されるデータ構造です。M言語でテーブルを作成するには、Table.FromRecords 関数を使用し、レコードのリストを渡します。
テーブルの例:
Table.FromRecords({
[Name = "Taro", Age = 20, City = "Tokyo"],
[Name = "Hanako", Age = 25, City = "Osaka"],
[Name = "Jiro", Age = 30, City = "Nagoya"]
})
テーブルから特定の行や列を取得するには、テーブル操作関数を使用します。例えば、Table.SelectRows 関数を使って、特定の条件に一致する行を抽出できます。
年齢が25歳以上の行を抽出する例:
Table.SelectRows(
Table.FromRecords({
[Name = "Taro", Age = 20, City = "Tokyo"],
[Name = "Hanako", Age = 25, City = "Osaka"],
[Name = "Jiro", Age = 30, City = "Nagoya"]
}),
(record) => record[Age] >= 25
)
3. カラムの追加と削除
カラムの追加や削除は、データの整理や分析においてよく使われる操作です。M言語では、Table.AddColumn関数やTable.RemoveColumns関数を使って簡単に行うことができます。
カラムの追加: Table.AddColumn
Table.AddColumn関数は、新しいカラムを追加するために使用されます。以下の例では、元のテーブルに「FullName」カラムを追加し、姓と名を結合した値を代入しています。
let
originalTable = Table.FromRecords({
[FirstName = "Taro", LastName = "Yamada", Age = 25],
[FirstName = "Hanako", LastName = "Sato", Age = 28]
}),
newTable = Table.AddColumn(originalTable, "FullName", each [FirstName] & " " & [LastName])
in
newTable
カラムの削除: Table.RemoveColumns
Table.RemoveColumns関数は、指定されたカラムを削除するために使用されます。次の例では、「Age」カラムを削除しています。
let
originalTable = Table.FromRecords({
[FirstName = "Taro", LastName = "Yamada", Age = 25],
[FirstName = "Hanako", LastName = "Sato", Age = 28]
}),
newTable = Table.RemoveColumns(originalTable, {"Age"})
in
newTable
これらの関数を組み合わせることで、複雑なデータ変換を簡単に行うことができます。適切な関数を選択し、データを整理しましょう。
4. テーブルの結合
M言語では、テーブル同士を結合することができます。これには、Table.Join関数を使用します。結合する際に、どのような結合タイプを使うかを指定する必要があります。
結合タイプの例: Inner.Join, Left.OuterJoin, Right.OuterJoin, Full.OuterJoin
以下に、Inner.Joinを使ったテーブル結合の例を示します。
テーブルA:
Table.FromRecords({
[ID = 1, Name = "Taro", City = "Tokyo"],
[ID = 2, Name = "Hanako", City = "Osaka"]
})
テーブルB:
Table.FromRecords({
[ID = 1, Job = "Engineer", Salary = 500000],
[ID = 2, Job = "Designer", Salary = 450000]
})
結合したテーブル:
Table.Join(テーブルA, "ID", テーブルB, "ID", Inner.Join)
この例では、テーブルAとテーブルBが共通のIDカラムを持っています。Inner.Joinを使って、これらのテーブルを結合しています。結果として、両方のテーブルにIDが存在するレコードだけが結合された新しいテーブルが作成されます。
演習問題
問1. 以下のレコードを作成してください。
- Name: “Taro”, Age: 25, City: “Tokyo”
- Name: “Hanako”, Age: 28, City: “Osaka”
問2. 以下のテーブルを作成し、新しいカラム「Hobby」を追加してください。
Table.FromRecords({
[Name = "Taro", Age = 25, City = "Tokyo"],
[Name = "Hanako", Age = 28, City = "Osaka"]
})
問3. 以下の2つのテーブルをIDカラムを使ってInner.Joinで結合してください。
テーブルA:
Table.FromRecords({
[ID = 1, Name = "Taro", City = "Tokyo"],
[ID = 2, Name = "Hanako", City = "Osaka"]
})
テーブルB:
Table.FromRecords({
[ID = 1, Job = "Engineer", Salary = 500000],
[ID = 2, Job = "Designer", Salary = 450000]
})