Partilhar via


StructureColumn (DMX)

Aplica-se a: SQL Server Analysis Services

Retorna o valor da coluna de estrutura correspondente ao caso especificado ou o valor da tabela para uma tabela aninhada no caso especificado.

Sintaxe

  
StructureColumn('structure column name')  

Argumentos

estrutura-coluna-nome.
O nome de uma coluna de estrutura de mineração de maiúsculas e minúsculas ou tabela aninhada.

Tipo de resultado

O tipo retornado depende do tipo da coluna referenciada no parâmetro> nome coluna da estrutura do <. Por exemplo, se a coluna da estrutura de mineração referenciada contiver um valor escalar, a função retornará um valor escalar.

Se a coluna da estrutura de mineração referenciada for uma tabela aninhada, a função retornará um valor de tabela. O valor da tabela retornada pode ser usado na cláusula FROM de uma instrução sub-SELECT.

Comentários

Essa função é polimórfica e pode ser usada em qualquer lugar em uma instrução que permita expressões, incluindo uma lista de expressões SELECT, uma expressão de condição WHERE e uma expressão ORDER BY.

O nome da coluna na estrutura de mineração é um valor de cadeia de caracteres e, como tal, deve ser colocado entre aspas simples: por exemplo, StructureColumn('coluna 1'). Se houver várias colunas com o mesmo nome, o nome será resolvido no contexto da instrução SELECT que o inclui.

Os resultados retornados de uma consulta usando a função StructureColumn são afetados pela presença de quaisquer filtros no modelo. Ou seja, o filtro de modelo controla os casos que estão incluídos no modelo de mineração. Portanto, uma consulta na coluna de estrutura pode retornar apenas os casos que foram usados no modelo de mineração. Consulte a seção Exemplos deste tópico para obter um exemplo de código que mostra o efeito dos filtros de modelo de mineração em tabelas de caso e em uma tabela aninhada.

Para obter mais informações sobre como usar essa função em uma instrução DMX SELECT, consulte SELECT FROM <modelo>. CASES (DMX) ou SELECIONAR DE <estrutura>. CASOS.

Mensagens de erro

O seguinte erro de segurança será gerado se o usuário não tiver permissão de detalhamento na estrutura de mineração pai:

O usuário '%{user/}' não tem permissão para detalhar a estrutura de mineração pai do modelo de mineração '%{model/}'.

A seguinte mensagem de erro é gerada se um nome de coluna de estrutura inválido é especificado:

A coluna de estrutura de mineração '%{structure-column-name/}' não foi encontrada na estrutura de mineração pai '%{structure/}' no contexto atual (linha %{line/}, coluna %{column/}).

Exemplos

Usaremos a seguinte estrutura de mineração para esses exemplos. Observe que a estrutura de mineração contém duas colunas de tabela aninhadas, Products e Hobbies. A tabela aninhada na coluna Hobbies tem uma única coluna que é usada como a chave para a tabela aninhada. A tabela aninhada na coluna Products é uma tabela aninhada complexa que tem uma coluna de chave e outras colunas usadas para entrada. Os exemplos a seguir ilustram como uma estrutura de mineração de dados pode ser projetada para incluir muitas colunas diferentes, mesmo que um modelo não use todas as colunas. Algumas dessas colunas podem não ser úteis no nível do modelo para generalizar padrões, mas podem ser muito úteis para detalhamento.

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  
 ))  

Em seguida, crie um modelo de mineração com base na estrutura que você acabou de criar, usando o seguinte código de exemplo:

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))  

Consulta de Exemplo 1: Retornando uma coluna da estrutura de mineração

A consulta de exemplo a seguir retorna as colunas CustomerName e Age, que são definidas como parte do modelo de mineração. No entanto, a consulta também retorna a coluna Age, que faz parte da estrutura, mas não do modelo de mineração.

SELECT CustomerName, Age, StructureColumn('Occupation') FROM MyModel.CASES   
WHERE Age > 30  

Observe que a filtragem de linhas para restringir casos a clientes com mais de 30 anos ocorre no nível do modelo. Portanto, essa expressão não retornaria casos que estão incluídos nos dados de estrutura, mas não são usados pelo modelo. Como a condição de filtro usada para criar o modelo (EXISTS (Products)) restringe casos apenas aos clientes que compraram produtos, pode haver casos na estrutura que não são retornados por essa consulta.

Consulta de Exemplo 2: Aplicando um filtro à coluna Estrutura

A consulta de exemplo a seguir não apenas retorna as colunas de modelo CustomerName e Agee a tabela aninhada Products, mas também retorna o valor da coluna Quantity na tabela aninhada, que não faz parte do modelo.

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

Observe que, neste exemplo, um filtro é aplicado à coluna de estrutura para restringir os casos a clientes cuja ocupação é 'Arquiteto' (WHERE StructureColumn('Occupation') = 'Architect'). Como a condição de filtro de modelo é sempre aplicada aos casos em que o modelo é criado, somente os casos que contêm pelo menos uma linha qualificada na tabela Products são incluídos nos casos do modelo. Portanto, tanto o filtro na tabela aninhada Products quanto o filtro na ('Occupation')caso são aplicados.

Consulta de Exemplo 3: Selecionando colunas de uma tabela aninhada

A consulta de exemplo a seguir retorna os nomes dos clientes que foram usados como casos de treinamento do modelo. Para cada cliente, a consulta também retorna uma tabela aninhada que contém os detalhes da compra. Embora o modelo inclua a coluna ProductName, o modelo não usa o valor da coluna ProductName. O modelo apenas verifica se o produto foi comprado a preço normal (NOT``OnSale). Esta consulta não só devolve o nome do produto, mas também devolve a quantidade comprada, que não está incluída no modelo.

SELECT CustomerName,    
(SELECT ProductName, StructureColumn('Quantity')FROM Products)   
FROM MyModel.CASES  

Observe que não é possível retornar a coluna ProductName ou a coluna Quantity, a menos que o detalhamento esteja habilitado no modelo de mineração.

Consulta de Exemplo 4: Filtrando e Retornando Colunas de Tabela Aninhadas

A consulta de exemplo a seguir retorna as colunas de maiúsculas e minúsculas e aninhadas da tabela incluídas na estrutura de mineração, mas não no modelo. O modelo já está filtrado na presença de produtos OnSale, mas esta consulta adiciona um filtro na coluna da estrutura de mineração, Quantity:

SELECT CustomerName, Age, StructureColumn('Occupation'),   
(SELECT ProductName, StructureColumn('Quantity') FROM Products)   
FROM MyModel.CASES   
WHERE EXISTS (SELECT * FROM Products WHERE StructureColumn('Quantity')>1)  

Ver também

de referência da função DMX (Data Mining Extensions)
Funções (DMX)
Funções gerais de previsão (DMX)