Share via


StructureColumn (DMX)

適用: SQL Server Analysis Services

指定した大文字と小文字に対応する構造体列の値、または指定したケースの入れ子になったテーブルのテーブル値を返します。

構文

  
StructureColumn('structure column name')  

引数

structure-column-name。
ケースまたは入れ子になったテーブルのマイニング構造列の名前。

結果の種類

返される型は、構造体列名パラメーターで参照される列>の<型によって異なります。 たとえば、参照されるマイニング構造列がスカラー値を含む場合、関数はスカラー値を返します。

参照されるマイニング構造列が入れ子になったテーブルの場合、関数はテーブル値を返します。 返されるテーブル値は、サブ SELECT ステートメントの FROM 句で使用できます。

注釈

この関数はポリモーフィックであり、SELECT 式リスト、WHERE 条件式、ORDER BY 式などの式を許可するステートメント内の任意の場所で使用できます。

マイニング構造内の列の名前は文字列値であるため、列 1') など、StructureColumn('単一引用符で囲む必要があります。 同じ名前を持つ列が複数ある場合、名前は SELECT ステートメントが含まれるコンテキスト内で解決されます。

StructureColumn 関数を使用してクエリから返される結果は、モデルにフィルターが存在する場合に影響を受けます。 つまり、モデル フィルターは、マイニング モデルに含まれるケースを制御します。 したがって、構造列のクエリは、マイニング モデルで使用されたケースのみを返すことができます。 ケース テーブルと入れ子になったテーブルの両方に対するマイニング モデル フィルターの効果を示すコード サンプルについては、このトピックの「例」セクションを参照してください。

DMX SELECT ステートメントでこの関数を使用する方法の詳細については、「 SELECT FROM <モデル>」を参照してください。CASES (DMX) または SELECT FROM <構造体>。ケース

エラー メッセージ

ユーザーが親マイニング構造に対するドリルスルー アクセス許可を持っていない場合は、次のセキュリティ エラーが発生します。

'%{user/}' ユーザーには、'%{model/}' マイニング モデルの親マイニング構造をドリルスルーする権限がありません。

次のエラー メッセージは、無効な構造列名が指定された場合に表示されます。

'%{structure-column-name/}' マイニング構造列が、現在のコンテキスト (行 %{line/}、列 %{column/}) の '%{structure/}' 親マイニング構造に見つかりませんでした。

これらの例では、次のマイニング構造を使用します。 マイニング構造には、 と Hobbiesという 2 つの入れ子になったテーブル列が含まれていることに注意してくださいProductsHobbies 列の入れ子になったテーブルには、入れ子になったテーブルのキーとして使用される単一列があります。 列の 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: 構造列にフィルターを適用する

次のサンプル クエリは、モデル列 CustomerNameAge、 および入れ子になったテーブル Productsを返すだけでなく、モデルの一部ではない入れ子になったテーブル内の列 Quantity の値も返します。

SELECT CustomerName, Age,  
(SELECT ProductName, StructureColumn('Quantity') FROM Products) FROM MA.CASES   
WHERE StructureColumn('Occupation') = 'Architect'  

この例では、構造列にフィルターを適用して、職業が "アーキテクト" (WHERE StructureColumn('Occupation') = 'Architect') である顧客にケースを制限します。 モデルフィルター条件は常にモデルの作成時にケースに適用されるため、テーブルに少なくとも 1 つの限定行 Products を含むケースのみがモデル ケースに含まれます。 そのため、入れ子になったテーブル 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)  

参照

データ マイニング拡張機能 (DMX) 関数リファレンス
関数 (DMX)
一般的な予測関数 (DMX)