5章: レコードとテーブル操作

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]
})