グローバルテーブルでデータを検証する
概要と主要な概念
データをFlexSimにインポートしたら、そのデータを検証することが重要です。たとえば、モデルにおいて、指定されたテーブルが特定の列セットを持ち、最初の列が数値データ、2番目の列がテキストデータなどのように想定されているとします。このような想定をチェックするために、FlexSimではテーブル検証ツールを提供しています。
モデル内のすべてのテーブルを1つのテーブル検証ツールで検証できます。ただし、複数のテーブル検証ツールを持つことができるため、必要に応じて整えておくことができます。
テーブル検証ツールの設定には、次の手順が含まれます。
- 検証するテーブルを1つまたは複数指定します。
- 各テーブルについて、1つまたは複数のデータ範囲を指定します。範囲とは、列や行など、テーブルのデータのサブセットのことです。
- 一連のルールを指定します。ルールとは、範囲内のデータが合格しなければならないテストのことです。
- 範囲ごとに、その範囲が合格しなければならないルールを指定します。
テーブル検証ツールを設定したら、[検証]ボタンを押してデータを検証できるようになります。データの検証時、テーブル検証ツールは各範囲の各値にアクセスし、その範囲に接続されているすべてのルールに基づいてその値をチェックします。テストに合格しない値があれば、テーブル検証ツールはエラーを記録します。
[検証]ボタンのほかに、FlexScript APIを使用することもできます。
TableValidation("MyTableValidation").validate()
この方法では、モデルが自動的にデータを更新する場合、そのデータがすぐに検証されるようにすることもできます。
入力データを検証する理由
すべてのモデルには、入力データについての想定があります。入力データがその想定と一致しない場合、モデルが正確に動作しなくなります。シミュレーションモデルは入力データを結果に変換する関数である、という考え方があります。入力データが無効であれば、信頼できる結果が得られにくくなります。
入力データを検証すると、信頼できる結果が出るだけでなく、時間の節約にもなります。テーブル検証ツールの設定にかかる時間はほんの数分程度です。質の悪いデータを使えば何時間も無駄になる場合が多いということを考えれば、数分かけて設定することには価値があります。
一般的な検証タスク
このセクションでは、モデルで必要となる、より一般的な検証タスクをいくつか取り上げて説明します。それぞれのタスクの手順は、すでにモデル内にグローバルテーブルがあることを前提としています。
列ヘッダーをチェックする
テーブル検証ツールを使って、テーブルの列が存在し、それらが正しい名前を持っていることをチェックできます。次の手順でテーブル検証ツールを設定できます。
- [テーブル範囲]タブに移動します。
- [追加]ボタン をクリックし、メニューから目的のグローバルテーブルを選択します。この操作は、グローバルテーブルごとに1回だけ実行します。テーブル検証ツールにグローバルテーブルを追加済みの場合は、リストから目的のテーブルを選択します。
- [範囲]エリアで、[追加]ボタン をクリックして、選択したテーブルに範囲を追加します。上の画像では1つの範囲しか表示されていませんが、それぞれのテーブルには複数の範囲を設定することができます。
- [範囲のタイプ]を[列ヘッダー]に変更します。
- [ルール]エリアの近くで、[追加]ボタン を使用し新しいルールを追加してこの範囲と接続します。ウィンドウが自動的に[ルール]タブに移動し、新しいルールが選択されます。
- [ピックリスト]ボタン をクリックし、[ルールの設定]にカーソルを合わせて[値は正確な設定を形成]を選択します。
- 値の配列を、期待される列名と一致するように編集します。たとえば、テーブルにSKU、注文、数量という列がある場合、値の配列は次のようになります。
検証中、テーブル検証ツールは各列のヘッダーにアクセスし、n番目のヘッダーが配列のn番目の値と一致することを検証します。ヘッダーが値と一致しない場合、このルールは失敗となり、エラーが記録されます。
列内の数値データをチェックする
テーブル検証ツールを使用して、列内のすべての値が数字データタイプに設定されていることを確認できます。次の手順でテーブル検証ツールを設定できます。
- 「列ヘッダーをチェックする」セクションの手順1~3に従い、テーブル検証ツールのリスト内にグローバルテーブルがあることを確認し、そのテーブルに新しい範囲を追加します。
- [範囲のタイプ]が[列]に設定されていることを確認します。
- [値の範囲]フィールドで、チェック対象の列の数字または名前を指定します。
- [ルール]エリアの近くで、[追加]ボタン を使用し新しいルールを追加してこの範囲と接続します。ウィンドウが自動的に[ルール]タブに移動し、新しいルールが選択されます。
- [ピックリスト]ボタン をクリックし、[数値のルール]にカーソルを合わせて[数字]を選択します。
検証中、テーブル検証ツールは指定された列のそれぞれの値にアクセスし、その値が数字であることを検証します。
列の先頭または末尾のスペースをチェックする
インポートされたデータでよくある問題の1つとして、テキストデータ内の先頭または末尾のスペースが挙げられます。このエラーを目視確認することは非常に困難です。テーブル検証ツールを使用すると、この問題を回避できます。次の手順でテーブル検証ツールを設定できます。
- 「列ヘッダーをチェックする」セクションの手順1~3に従い、テーブル検証ツールのリスト内にグローバルテーブルがあることを確認し、そのテーブルに新しい範囲を追加します。
- [範囲のタイプ]が[列]に設定されていることを確認します。
- [値の範囲]フィールドで、チェック対象の列の数字または名前を指定します。
- [ルール]エリアの近くで、[追加]ボタン を使用し新しいルールを追加してこの範囲と接続します。ウィンドウが自動的に[ルール]タブに移動し、新しいルールが選択されます。
- [ピックリスト]ボタン をクリックし、[テキストルール]にカーソルを合わせて[末尾または先頭のスペースなし]を選択します。
検証中、テーブル検証ツールは指定された列のそれぞれの値にアクセスし、その値がテキストであり、先頭と末尾にスペースがないことを検証します。
その他の一般的な列チェック
一意の値 - 多くのテーブルには、すべての値が一意であることが想定される列があります。テーブル検証ツールを使用すると、この点をチェックできます。新しいルールを追加します。[制約]の[ピックリスト]ボタン をクリックし、[ルールの設定]にカーソルを合わせて[値は固有]を選択します。その後、任意の範囲にルールを接続します。
2番目のテーブル内の値 - 多くの場合、データは複数のテーブルに分割されています。テーブルは、共有データを持つ列によって関連付けられます。たとえば、SKUごとに1つの行を持つSKUテーブルと、注文ごとに1つの行を持つ注文テーブルがあるとします。注文テーブルにはSKU列があり、SKUの値はSKUテーブルに存在することが想定されます。テーブル検証ツールを使用すると、この点をチェックできます。新しいルールを追加します。[制約]の[ピックリスト]ボタン をクリックし、[ルールの設定]にカーソルを合わせて[値はテーブルの列内]を選択し、ポップアップを使用してソース列を指定します。その後、任意の範囲にルールを接続します。
値の順序 - 一部のテーブルでは、列が順番に並べ替えられていることが想定されています。テーブル検証ツールを使用すると、この点をチェックできます。新しいルールを追加します。[制約]の[ピックリスト]ボタン をクリックし、[並べ替え]にカーソルを合わせて[並べ替え済み]を選択します。その後、任意の範囲にルールを接続します。
無効な値を修復する
テーブル検証ツールの各ルールには、失敗時コールバックがあります。このコールバックを使用すると、ルールに合格しないデータを修復することができます。たとえば、値が整数でなければならないというルールがある場合、「4」というテキストはルールに一致しないことになります。しかし、失敗時コールバックを使用し、このテキストを数字に変換することができます。コールバックが1を返す場合、修復された値のログにエラーは表示されません。
列をテキストからノード値に変換するのも、一般的なタスクです。テーブル検証ツールを使用すると、検証中にこのタスクを実行することができます。有効なオブジェクト名またはパスを持つテーブルがあると想定した場合、次の手順でテーブル検証ツールを設定できます。
- 「列ヘッダーをチェックする」セクションの手順1~3に従い、テーブル検証ツールのリスト内にグローバルテーブルがあることを確認し、そのテーブルに新しい範囲を追加します。
- [値の範囲]フィールドで、チェック対象の列の数字または名前を指定します。
- [ルール]エリアの近くで、[追加]ボタン を使用し新しいルールを追加してこの範囲と接続します。ウィンドウが自動的に[ルール]タブに移動し、新しいルールが選択されます。
- [制約]ピックリストボタン をクリックし、[ノードのルール]にカーソルを合わせて[有効なノード]を選択します。
- [失敗時]ピックリストボタン をクリックし、[ノードへの変換]を選択します。
テーブル検証ツールがテーブルを検証する際に、まず値がノードであるかどうかをチェックします。ノード以外のそれぞれの値では、ルールに一致せず、失敗時コールバックが呼び出されます。次に、コールバックがパスによってノードを探そうとします。
データが適切に検証されると、そのデータをシミュレーションモデルの一部として使用できる状態になります。詳細については、次のトピック「グローバルテーブルでデータを使用する」を参照してください。