コラム コラム:データセット(Dataset)に関するあれこれ

本記事では、ExcelアクションやSQLクエリーアクションなどの様々なアクションによって生成される表のようなオブジェクト、データセット(Dataset)についての解説を行います。

■0. 全般
データセットは、「変数」や「配列」のように事前に宣言するのではなく、アクション実行時に作成されるものです。
(例:「データベース - SQLクエリ」アクション、「Webブラウザ - テーブルの抽出」アクション、「Excel - 値の取得」アクションなど)
また、同名のデータセットが既に存在する状況下で再度同名のデータセットを作成した場合、エラーにはならず既存のデータセットが破棄され新しいデータセットとして再作成されます。
そのため、ループ処理内で何度もデータの抽出を行いデータセットを作成する処理において、毎回別名のデータセットを作り直す必要はありません。

■1. データセットの要素の参照方法
データセット内の要素を参照するには、
%データセット名(行数).列名%
のようにして参照します。

Excelから取得した以下のようなデータセットが存在するとします。
データセット名:Dataset_Excel

行数/列名 A B
1 しりとり りんご
2 ゴリラ ラッパ

%Dataset_Excel(1).A%と指定すると、「Dataset_Excelの1行目、A列の値を指定してください」という命令になります。そのため、%Dataset_Excel(1).A%の結果返ってくる値は、「しりとり」になります。
同様にして、%Dataset_Excel(2).B%と指定すると、「Dataset_Excelの2行目、B列の値を指定してください」という命令になります。そのため、%Dataset_Excel(2).B%の結果返ってくる値は、「ラッパ」になります。
■2. データセット参照時の行指定の省略

Excelから生成したデータセットに従って繰り返し処理(ループ)を行う場合、行を動的に増やしてデータセットの要素を参照したいものです。
その際は、「Loop - Dataset」アクションを使用すると、明示的に行数を指定しなくても繰り返しごとに参照する行が変化します。
例として、■1のデータセットに従って繰り返し処理を行うものとします。
「Loop - データセット」アクションにて、対象のデータセットに「Dataset_Excel」を指定したとします(ループ順序は定めないものとします)。
次に、そのループ内に行数指定を省略した形で
%Dataset_Excel.A%
と指定します。
この状態においてタスクを実行すると:

1回目のループ:%Dataset_Excel.A%は「しりとり」
2回目のループ:%Dataset_Excel.A%は「ゴリラ」

となり、参照する値がループに従って動的に変化します。
このように、データセットを利用して繰り返し処理を行う際には、「Loop - データセット」を使用すると行数指定を省略した形で処理を書くことが可能になります。
なお、「Loop - データセット」以外のループを用いる場合は、参照行を省略すると意図したとおりの値を取得できません。
その際にデータセットの参照行を動的に変化させるには、現在のループ行を保持する変数(例:var_cntとする)を事前に作成しておき、ループ内で増加させつつ
%Dataset_Excel(var_cnt).A%
のような形で参照先を動的に変化させる必要があります。
■3. データセットに関する関数
<<<「Loop - Dataset」を使用してループしているが、現在何行目を処理しているかを知りたい >>>

そのような場合は、%データセット名.CurrentRow%関数を使用します。
上記の■2のサンプルにおいて、1回目のループの中で%Dataset_Excel.CurrentRow%を参照した場合
結果は数字の「1」が返されます。
同様にして、2回目のループ内で%Dataset_Excel.CurrentRow%を参照すると
結果は数字の「2」が返されます。
データセット取得元のExcelに対して追加の情報を書き込む際、データのもととなる行数を特定する場合などに便利です。

<<< データセットの総行数・総列数が知りたい >>>

そのような場合は、
%データセット名.TotalRows%:データセットの総行数が数字で返ります
%データセット名.TotalColumns%:データセットの総列数が数字で返ります
の関数を使用します。■1.のサンプルのデータセットで言うと、
%Dataset_Excel.TotalRows%:「Dataset_Excel」は2行なので、数字の「2」が返ります
%Dataset_Excel.TotalColumns%:「Dataset_Excel」は2列なので、数字の「2」が返ります
の結果となります。
A1セルからデータを全部抜き出した後、最後の行 + 1行目にデータを書き込みたい場合は、書き込み先の行として
%データセット名.TotalRows + 1%
と指定すれば良いですし(A1から取得していない場合は後ろの 「+ 1」の部分を調整します)、
データベースに対してクエリー(Select文)を実行した結果が何件なのか知りたい場合は
%データセット名.TotalRows%
をそのまま評価すれば、結果がゼロ件なのかそれとも結果が存在するのかをすぐに判断できます。
データセットを利用する際は、これらの参照方法や関数を知っていれば処理の幅が大幅に広がります。ぜひ活用してみていただければと思います。