StructureColumn (DMX)
指定したケースに対応する構造列の値、または指定したケースの入れ子になったテーブルのテーブル値を返します。
構文
StructureColumn('structure column name')
引数
- structure-column-name。
ケースまたは入れ子になったテーブルのマイニング構造列の名前。
結果のデータ型
返される型は、<structure column name> パラメーターで参照される列の型によって異なります。 たとえば、参照されるマイニング構造列がスカラー値を含む場合、関数はスカラー値を返します。
参照されるマイニング構造列が入れ子になったテーブルである場合、関数はテーブル値を返します。 返されたテーブル値は、サブ SELECT ステートメントの FROM 句に使用できます。
説明
この関数はポリモーフィックで、SELECT 式リスト、WHERE 条件式、ORDER BY 式など、式を使用できるステートメント内の任意の場所で使用できます。
マイニング構造列の名前は文字列値なので、単一引用符で囲む必要があります。たとえば、StructureColumn('column 1') のようにします。 同じ名前を持つ列が複数ある場合、名前は SELECT ステートメントが含まれるコンテキスト内で解決されます。
StructureColumn 関数を使用するクエリから返される結果は、モデル上にフィルターがあると影響を受けます。 つまり、モデル フィルターは、マイニング モデルに含まれるケースを制御します。 したがって、構造列上のクエリは、マイニング モデルに使用されたケースのみを返します。 ケース テーブルと入れ子になったテーブルの両方に対するマイニング モデル フィルターの影響を示すコード例については、このトピックの「例」のセクションを参照してください。
DMX SELECT ステートメントでこの関数を使用する方法の詳細については、「SELECT FROM <model>.CASES (DMX)」または「SELECT FROM <structure>.CASES」を参照してください。
エラー メッセージ
次のセキュリティ エラーは、親のマイニング構造に対するドリルスルー権限がユーザーに与えられていない場合に発生します。
'%{user/}' ユーザーには、'%{model/}' マイニング モデルの親マイニング構造にドリルスルーする権限がありません。
次のエラー メッセージは、無効な構造列名が指定された場合に表示されます。
'%{structure-column-name/}' マイニング構造列が '%{structure/}' 親マイニング構造内に見つかりませんでした (現在のコンテキスト (line %{line/}、列 %{column/}))。
使用例
ここに示す例では、次のマイニング構造を使用します。 マイニング構造には、2 つの入れ子になったテーブル列 Products および Hobbies が含まれます。 Hobbies 列の入れ子になったテーブルには、入れ子になったテーブルのキーとして使用される単一列があります。 Products 列の入れ子になったテーブルは、入力に使用されるキー列およびその他の列の両方を持つ、複雑な入れ子になったテーブルです。 次の例は、モデルですべての列を使用しない可能性があっても、多くの異なる列を組み込んでデータ マイニング構造を設計する方法を示しています。 これらの列の一部は、モデル レベルでパターンの汎用化に役立たない可能性がありますが、ドリルスルーには非常に有効です。
CREATE MINING STRUCTURE [MyStructure]
(
CustomerName TEXT KEY,
Occupation TEXT DISCRETE,
Age LONG CONTINUOUS,
MaritalStatus TEXT DISCRETE,
Income LONG CONTINUOUS,
Products TABLE
(
ProductNameTEXT KEY,
Quantity LONG CONTINUOUS,
OnSale BOOLEAN DISCRETE
)
Hobbies TABLE
(
Hobby KEY
))
次に、以下のコード例で、作成した構造に基づいてマイニング モデルを作成します。
ALTER MINING STRUCTURE [MyStructure] ADD MINING MODEL [MyModel] (
CustomerName,
Age,
MaritalStatus,
Income PREDICT,
Products
(
ProductName
) WITH FILTER(NOT OnSale)
) USING Microsoft_Decision_Trees
WITH FILTER(EXISTS (Products))
サンプル クエリ 1: マイニング構造から列を返す
次のサンプル クエリでは、マイニング モデルの一部として定義されている列 CustomerName および Age が返されます。 ただし、このクエリでは、構造の一部であってもマイニング モデルの一部ではない Age 列も返されます。
SELECT CustomerName, Age, StructureColumn(‘Occupation’) FROM MyModel.CASES
WHERE Age > 30
年齢が 30 歳を超える顧客にケースを制限する行のフィルター処理は、モデルのレベルで実行されます。 したがって、この式は、構造データに含まれているが、モデルから使用されないケースを返しません。 モデル (EXISTS (Products)) の作成に使用するフィルター条件は、製品を購入した顧客のみにケースを制限するため、このクエリによって返されないケースが構造内にある可能性もあります。
サンプル クエリ 2: 構造列にフィルターを適用する
次のサンプル クエリは、モデル列 CustomerName および Age、および入れ子になったテーブル Products を返すだけでなく、モデルの一部ではない、入れ子になったテーブル内の列 Quantity の値も返します。
SELECT CustomerName, Age,
(SELECT ProductName, StructureColumn(‘Quantity’) FROM Products) FROM MA.CASES
WHERE StructureColumn(‘Occupation’) = ‘Architect’
この例では、職業が Architect (WHERE StructureColumn(‘Occupation’) = ‘Architect’) の顧客にケースを制限するフィルターを構造列に適用します。 モデル フィルター条件はモデルの作成時に必ずケースに適用されるため、Products テーブル内に条件を満たす行が少なくとも 1 つあるケースのみが、モデル ケースに入れられます。 したがって、入れ子になったテーブル Products のフィルターとケース (‘Occupation’) のフィルターの両方が適用されます。
サンプル クエリ 3: 入れ子になったテーブルから列を選択する
次のサンプル クエリでは、トレーニング ケースとして使用された顧客の名前がモデルから返されます。 顧客ごとに、購入の詳細を含む入れ子になったテーブルも返されます。 モデルには ProductName 列が含まれますが、モデルは ProductName 列の値を使用しません。 モデルは、製品が通常の価格 (NOT OnSale) で購入されたかどうかだけチェックします。 このクエリでは、製品名だけでなく、モデルには含まれていない購入した数量も返されます。
SELECT CustomerName,
(SELECT ProductName, StructureColumn('Quantity')FROM Products)
FROM MyModel.CASES
マイニング モデルでドリルスルーが有効でない限り、ProductName 列または Quantity 列を返すことはできません。
サンプル クエリ 4: フィルターを適用して入れ子になったテーブル列を返す
次のサンプル クエリは、マイニング構造に含まれるがモデルに含まれない、ケースおよび入れ子になったテーブル列を返します。 モデルは既に OnSale 製品が存在するかどうかでフィルター処理されていますが、このクエリはマイニング構造列 Quantity にフィルターを追加します。
SELECT CustomerName, Age, StructureColumn('Occupation'),
(SELECT ProductName, StructureColumn('Quantity') FROM Products)
FROM MyModel.CASES
WHERE EXISTS (SELECT * FROM Products WHERE StructureColumn('Quantity')>1)