# マトリックス列と数式

Mashmatrix Sheetの数式では、通常の列と同様に、マトリックス列内の内部列および系列値を列変数として参照することが可能です。また、数式をマトリックス列の内部列で利用し、計算結果を系列内に表示することも可能です。

## マトリックス列の数式内での参照方法 <a href="#matrix-column-reference-in-formula" id="matrix-column-reference-in-formula"></a>

### 特定系列の内部列 <a href="#child-column-variable-in-specific-series" id="child-column-variable-in-specific-series"></a>

通常の列の場合、数式テキスト内では`[@列の参照名]`といった記法で列値（現在数式が評価されているレコードにおける列の値）を、あるいは`[#列の参照名]`といった記法で列参照（シートに含まれている列全体）を変数として利用しますが、マトリックス列の内部列の場合は、それぞれ以下の形式で列を参照する変数を表現します。

* **列値** - `[マトリックス列の参照名].[系列の参照名].[@内部列の参照名]`
* **列参照** - `[マトリックス列の参照名].[系列の参照名].[#内部列の参照名]`

`マトリックス列の参照名`、`系列の参照名`、および`内部列の参照名`は、それぞれ列の設定画面から確認できます。系列の参照名は、`$1`、`$2`、`$3`、…といった形式で1から始まるインデックス番号つきの名前が系列順どおりに自動的に割り当てられます。

外部のシートにあるマトリックス列の内部列を列参照の変数として参照する場合には、先頭にそのシートのシートIDをつけて記述します。

* `[シートID].[マトリックス列の参照名].[系列の参照名].[#内部列の参照名]`

#### 視覚的理解

以下の画像は、マトリックス列 `SalesPlans__r` 内に内部列として `Planned__c` および `Actual__c` という列が存在する場合、あるレコードの数式評価において各列変数が表す対象を視覚的に表現した例となります。

![](https://2817247209-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FS2wT6ommdiuYru74JEtd%2Fuploads%2Fgit-blob-53e13c55d59fc63f516ff8edc2351cfedd6915e0%2Fmatrix-formula-abs.png?alt=media)

#### 数式エディタでの参照方法

数式エディタでは、マトリックス列内の各系列ごとに階層ツリーで内部列が表示されます。適切な系列の内部列を選択して数式テキスト内に変数を挿入します。

![](https://2817247209-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FS2wT6ommdiuYru74JEtd%2Fuploads%2Fgit-blob-5312cca50a80946a3466466b33f8ad38013d0f93%2Fmatrix-formula-pick-abs.png?alt=media)

### 相対的な系列位置の内部列 <a href="#child-column-variable-in-relative-series" id="child-column-variable-in-relative-series"></a>

マトリックス列の内部の数式から同じマトリックス列の内部列を参照する場合、特定の系列を指定するのではなく、現在評価されている数式が含まれる系列から相対的な位置にある系列に含まれている内部列を参照することが可能です。

* **列値** - `[マトリックス列の参照名].[系列の相対参照名].[@内部列の参照名]`
* **列参照** - `[マトリックス列の参照名].[系列の相対参照名].[#内部列の参照名]`

`系列の相対参照名`に指定できる値は以下の形式となります。

* `$` - 数式が評価される列が属している系列（現在の系列）
* `$-n` - 現在の系列からみて *n* ステップ前の系列（ *n* は正整数値）
* `$+n` - 現在の系列からみて *n* ステップ後の系列（ *n* は正整数値）

{% hint style="info" %}
相対的な系列位置を指定した結果、参照先が現在のマトリックス列の系列の範囲を超えた場合、変数の値は空白値として扱われます。
{% endhint %}

#### 視覚的理解

以下の画像は、マトリックス列 `SalesPlans__r` 内に内部列として `Planned__c` および `Actual__c` という列が存在する場合、あるレコードの２番目の系列における内部列での数式評価において各列変数が表す対象を視覚的に表現した例となります。

![](https://2817247209-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FS2wT6ommdiuYru74JEtd%2Fuploads%2Fgit-blob-b84dd58eb8ea509e88d633e48ac75c441bf383e5%2Fmatrix-formula-relative.png?alt=media)

#### 数式エディタでの参照方法

マトリックス列内部の数式を編集する場合、数式エディタではマトリックス列の階層ツリー内で内部列の一覧が表示されます。系列ノードのドロップダウンメニューから適切な相対位置を選択した上で、内部列を選択して数式テキスト内に変数を挿入します。

![](https://2817247209-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FS2wT6ommdiuYru74JEtd%2Fuploads%2Fgit-blob-2d0a6448d9bef6d56b8fa5dd741eef3e075a6d87%2Fmatrix-formula-pick-relative.png?alt=media)

### 系列値 <a href="#series-value-variable" id="series-value-variable"></a>

数式では、マトリックス列内の系列の値を変数として参照可能です。系列値は、それぞれの時系列における開始日の日付値となります。数式テキスト内では以下のような形式の記法となります。

`[マトリックス列の参照名].[@系列の参照名]`

例えば、マトリックス列 `SalesPlans__r` が2020/1/1を開始日として月ごとの表示間隔でマトリックス変換表示するように設定されている場合、それぞれの列変数が返す日付値は以下となります。

* `[SalesPlans__r].[@$1]` ⇒ "2020-01-01"
* `[SalesPlans__r].[@$2]` ⇒ "2020-02-01"
* `[SalesPlans__r].[@$3]` ⇒ "2020-03-01"
* `[SalesPlans__r].[@$4]` ⇒ "2020-04-01"
* ...

同じマトリックス列の内部の数式の場合、系列の参照名には相対的な記法が利用できます。系列の相対参照名で指定できる値は内部列の場合と同様です。

`[マトリックス列の参照名].[@系列の相対参照名]`

例えば、マトリックス列 `SalesPlans__r` が2020/1/1を開始日として月ごとの表示間隔でマトリックス変換表示するように設定されている場合、2020/4の系列内において数式を評価した際のそれぞれの列変数が返す日付値は以下となります。

* `[SalesPlans__r].[@$]` ⇒ "2020-04-01"
* `[SalesPlans__r].[@$-1]` ⇒ "2020-03-01"
* `[SalesPlans__r].[@$-2]` ⇒ "2020-02-01"
* `[SalesPlans__r].[@$+1]` ⇒ "2020-05-01"
* `[SalesPlans__r].[@$+2]` ⇒ "2020-06-01"
* ...

#### 数式エディタでの参照方法

マトリックス列内部の数式を編集する場合、系列値への参照はマトリックス列の階層ツリー内に表示されます。

相対参照の場合は系列ノードのドロップダウンメニューから適切な相対位置を選択した上で、「（系列値）」ノードを選択して数式テキスト内に変数を挿入します。

![](https://2817247209-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FS2wT6ommdiuYru74JEtd%2Fuploads%2Fgit-blob-de170df913e5eadbfe5935662dda3c08360b1ea7%2Fmatrix-formula-pick-series-value.png?alt=media)

## 内部列変数を用いた数式の例 <a href="#formula-examples-using-child-column-variable" id="formula-examples-using-child-column-variable"></a>

以下の数式の例では、商品の一覧を表示するシート`s1`に、`SalesPlans__r`という参照名を持つマトリックス列が追加されており、2020/1/1を開始日として月ごとの表示間隔で12ヶ月間のデータを表示するように設定されているものとします。また、`SalesPlans__r`の内部列として、`Planned__c`および`Actual__c`という参照名を持つ計画金額および実績金額を格納する通貨型の列が表示されているものとします。

#### 2020年の計画金額を合計した値を表示する

シート内に以下の数式テキストを持つ通貨型の数式列を追加します。この数式ではマトリックス列内の系列をすべて指定して計画金額値を参照し、足し合わせています。

```
[SalesPlans__r].[$1].[@Planned__c] + [SalesPlans__r].[$2].[@Planned__c] +
[SalesPlans__r].[$3].[@Planned__c] + [SalesPlans__r].[$4].[@Planned__c] +
[SalesPlans__r].[$5].[@Planned__c] + [SalesPlans__r].[$6].[@Planned__c] +
[SalesPlans__r].[$7].[@Planned__c] + [SalesPlans__r].[$8].[@Planned__c] +
[SalesPlans__r].[$9].[@Planned__c] + [SalesPlans__r].[$10].[@Planned__c] +
[SalesPlans__r].[$11].[@Planned__c] + [SalesPlans__r].[$12].[@Planned__c]
```

#### 実績金額と計画金額の差分値を各月に表示する

マトリックス列`SalesPlans__r`の内部列として、以下の数式テキストを持つ通貨型の数式列を追加します。この数式では現在の系列の実績金額および計画金額を参照し、差分を計算しています。

```
[SalesPlans__r].[$].[@Actual__c] - [SalesPlans__r].[$].[@Planned__c]
```

#### 前月の実績金額に比べて増加していれば"+"を、減少していれば"-"を各月に表示する

マトリックス列`SalesPlans__r`の内部列として、以下の数式テキストを持つ通貨型の数式列を追加します。この数式では現在の系列の実績金額および１ステップ前の系列の実績金額を参照し、差分を計算して正であれば”+"を、負であれば"-"を返しています。数式の空白項目の処理設定では「空白項目を空白として処理」にチェックを入れておきます。

```
IF(
  [SalesPlans__r].[$].[@Actual__c] - [SalesPlans__r].[$-1].[@Actual__c] > 0,
  "+",
  IF(
    [SalesPlans__r].[$].[@Actual__c] - [SalesPlans__r].[$-1].[@Actual__c] < 0,
    "-",
    ""
  )
)
```

#### 各月の1年前の実績金額を表示する

まず、マトリックス列`SalesPlans__r`を2019/1/1を開始日として24ヶ月間表示するように再設定し、最初の2019/1〜2019/12までの系列は非表示にしておきます。

その後、マトリックス列`SalesPlans__r`の内部列として、以下の数式テキストを持つ通貨型の数式列を追加します。この数式では現在の系列から12ステップ前（=12ヶ月前)の実績金額を参照しています。

```
[SalesPlans__r].[$-12].[@Actual__c]
```

#### 同月の計画金額全体に対して占める比率を表示する

マトリックス列`SalesPlans__r`の内部列として、以下の数式テキストを持つパーセント型の数式列を追加します。この数式では同じ系列内の計画金額の合計を計算し、現在のレコードの計画金額をその合計金額で割ることで、全体金額に占める比率を計算しています。

```
[SalesPlans__r].[$].[@Planned__c] / SUM([SalesPlans__r].[$].[#Planned__c])
```
