StructureColumn (DMX)
適用於: SQL Server Analysis Services
傳回對應至指定案例的結構數據行值,或指定案例中巢狀數據表的數據表值。
語法
StructureColumn('structure column name')
引數
structure-column-name。
大小寫或巢狀數據表採礦結構數據行的名稱。
結果類型
傳回的類型取決於結構數據行名稱>參數中所<參考之數據行的類型。 例如,如果參考的採礦結構數據行包含純量值,則函式會傳回純量值。
如果參考的採礦結構數據行是巢狀數據表,函式會傳回數據表值。 傳回的數據表值可用於子 SELECT 語句的 FROM 子句中。
備註
此函式是多型函式,可在允許表達式的語句中的任何位置使用,包括 SELECT 運算式清單、WHERE 條件表示式和 ORDER BY 表達式。
採礦結構中的數據行名稱是字串值,因此必須以單引號括住:例如, StructureColumn('
數據行 1')
。 如果有多個數據行具有相同名稱,則會在封入SELECT語句的內容中解析名稱。
使用 StructureColumn 函式從查詢傳回的結果會受到模型上是否有任何篩選的影響。 也就是說,模型篩選會控制採礦模型中所包含的案例。 因此,結構數據行上的查詢只能傳回採礦模型中所使用的案例。 如需示範採礦模型篩選對案例數據表和巢狀數據表的影響的程式代碼範例,請參閱本主題的一節。
如需如何在 DMX SELECT 語句中使用此函式的詳細資訊,請參閱 SELECT FROM <模型>。CASES (DMX) 或 SELECT FROM <結構>。CASES。
錯誤訊息
如果用戶沒有父採礦結構的鑽研許可權,就會引發下列安全性錯誤:
'%{user/}' 使用者沒有鑽研 '%{model/}' 採礦模型的父採礦結構的許可權。
如果指定了無效的結構資料列名稱,就會引發下列錯誤訊息:
目前內容中 '%{structure-column-name/}' 採礦結構數據行在 '%{structure/}' 父採礦結構中找不到 (行 %{line/}, 數據行 %{column/})。
範例
我們將針對這些範例使用下列採礦結構。 請注意,採礦結構包含兩個巢狀資料表資料列和 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'
請注意,在此範例中,篩選會套用至結構數據行,以將案例限制為「架構師」(WHERE StructureColumn('Occupation') = 'Architect'
)。 因為建立模型時,模型篩選條件一律會套用至案例,因此只有包含數據表中 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)