SPSS Modelerでグローバル値の更新をする

SPSS Modelerで「平均」「合計」「最小」「最大」「標準偏差」を事前に算出しておける[グローバル値](https://www.ibm.com/docs/ja/spss-modeler/18.4.0?topic=node-set-globals-settings-tab)は便利です。

しかし、元データが変わった場合、グローバル値を再計算する必要があります。
再計算の方法については3つの方法があります。

# テストストリームの説明
グローバル値の変化を確認しやすくするためのテストストリームを用意しました。パラメーターに従って、グローバル値が変化します。まず、このストリームの意味を説明します。

## グローバル値の計算のブランチ
「ユーザー入力」ノードで3件のval＝０のレコードを作っています。これはダミーの値です。
次に「置換」ノードでパラメターで入力した値でvalを置き換えています。
最後に「グローバルの設定」ノードでvalの合計値を計算しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/258c278a-270c-10c4-331c-9c32311f73c2.png)

つまりパラメータで入力した値の3倍がグローバル値「valの合計値」になります。

例えばパラメータで「2」を入れると2*3=6がグローバル値「valの合計値」になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/5b4edd0b-d525-f3f7-5e5e-adb3fd391df4.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/b9f3d837-8e00-8aa0-d78e-4e21d16f4e52.png)

## グローバル値の表示
「ユーザー入力」ノードで「最大値」＝０のレコードを作っています。これはダミーの値です。
次に「置換」ノードで、グローバル値「valの合計値」でvalを置き換えています。つまり単純に、グローバル値「valの合計値」を表示しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/7e38e093-11ef-2bc5-7401-1519c6a4ba92.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/e30ef613-61da-7a4e-9b6c-946bc6529571.png)

このストリームを使ってグローバル値の更新方法をテストしていきます。

# 更新方法①二段階で実行する
最も単純な方法は「グローバルの設定」ノードを先に実行してから、「テーブル」ノードを実行する方法です。

「グローバルの設定」ノードを実行して、パラメーターに「3」を入れてみます。
3*3=9がグローバル値「valの合計値」に更新されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/07b104c8-2e2f-c161-06e9-e3147111401a.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/0a292a76-c6b1-658a-2cde-01adc35b002a.png)

次に「テーブル」ノードを実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/3530d6dd-b5f5-4d8a-af88-fe6773e45f51.png)
パラメータに何を入れたとしても、グローバル値「valの合計値」は変わりませんので、「9」が返ります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/676bf58a-3e32-367b-9f36-0133259189e4.png)

# 更新方法②実行前にすべてのグローバル値を消去する
次の方法は、「グローバルの設定」ノードで「実行前にすべてのグローバル値を消去」にチェックをつけてストリーム全体を実行する方法です。

「実行前にすべてのグローバル値を消去」にチェックを付けます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/7b3eec9a-fd5c-664e-2813-65f8a767f64c.png)

そして、選択したノードの実行ではなく、ストリーム全体を実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/fc4cb182-4da6-dbfa-ef99-28a42bc6e062.png)

ここではパラメーターに4を入れてみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/129dfbaa-f2a5-c7f2-f2b3-06040d4e3506.png)

「テーブル」ノードが実行されて、「12」が返りました。これは「テーブル」ノードが実行される前に「実行前にすべてのグローバル値を消去」が行われて、グローバル値が再計算されたためです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/e2c5a852-03a1-f583-b2ee-ad7b920b8dbc.png)

ただし、この方法だと他にもブランチがあるとすべてのブランチが実行されてしまうという問題があります。

# 更新方法③スクリプトで更新と実行を行う。
①の方法をスクリプトで実現するという方法です。
ストリームのプロパティの「実行」タブで「デフォルトスクリプトを追加」で「グローバルの設定」ノードの実行と「テーブル」ノードの実行の順序で実行するようにします。この方法であれば、実行するターミナルノードも選ぶことができます。
そして、「このスクリプトを実行」にチェックを付けます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/7942b29b-e164-f915-cc6f-01ce6ecb0738.png)

そして、選択したノードの実行ではなく、ストリーム全体を実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/fc4cb182-4da6-dbfa-ef99-28a42bc6e062.png)

ここではパラメーターに5を入れてみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/0afa387e-b7c9-02b1-45cb-04c92068a125.png)
結果としては3*5=15が得られます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/52fc81d6-70a1-05d1-2908-79909279d2da.png)

# CADSでのグローバル値更新と実行
CADSから実行する場合もこの方法であれば、最新のグローバル値に更新してから実行ができます。

パラメーターをジョブ変数で与えて実行してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/13eed83b-19b2-d5fa-3087-2387b7b35497.png)
ここではジョブ変数に6を入れてみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/007455be-7eb9-8856-9cf9-5ce558e0d852.png)

結果としては3*6=18が得られました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/4cd05746-2cc4-f089-2129-a0b8a27176c0.png)

# サンプルストリーム
#### サンプルストリーム
https://github.com/hkwd/spsssample/raw/master/240411%E3%82%B0%E3%83%AD%E3%83%BC%E3%83%90%E3%83%AB%E5%80%A4%E3%81%AE%E6%9B%B4%E6%96%B0/240411global.str

* テスト環境
    * Modeler 18.4
    * CADS 8.4
    * Windows 11 64bit

# 参考
####SPSS Modeler ノードリファレンス 6-5 グローバルの設定 #SPSS - Qiita 

https://qiita.com/416nishimaki/items/c2df811b51166f6d6173