Compartir a través de


StructureColumn (DMX)

Se aplica a: SQL Server Analysis Services

Devuelve el valor de la columna de estructura que corresponde al caso especificado o el valor de tabla para una tabla anidada en el caso especificado.

Sintaxis

  
StructureColumn('structure column name')  

Argumentos

structure-column-name.
Nombre de una columna de estructura de minería de datos de tabla anidada o caso.

Tipo de resultado

El tipo que se devuelve depende del tipo de la columna a la que se hace referencia en el <parámetro de nombre> de columna de estructura. Por ejemplo, si la columna de estructura de minería de datos a la que se hace referencia contiene un valor escalar, la función devuelve un valor escalar.

Si es una tabla anidada, la función devuelve un valor de tabla. El valor de tabla devuelto se puede utilizar en la cláusula FROM de una instrucción sub-SELECT.

Comentarios

Esta función es polimórfica y se puede utilizar en cualquier parte de una instrucción que permita expresiones, por ejemplo en una lista de expresiones SELECT, una expresión de condición WHERE y una expresión ORDER BY.

El nombre de la columna de la estructura de minería de datos es un valor de cadena y, como tal, debe incluirse entre comillas simples: por ejemplo, StructureColumn('la columna 1'). Si hay varias columnas que tienen el mismo nombre, el nombre se resuelve en el contexto de la instrucción SELECT contenedora.

Los resultados que se devuelven desde una consulta mediante la función StructureColumn se ven afectados por la presencia de cualquier filtro en el modelo. Es decir, el filtro del modelo controla los casos que se incluyen en el modelo de minería de datos. Por consiguiente, una consulta en la columna de estructura puede devolver solo los casos que se utilizaron en el modelo de minería de datos. Consulte la sección Ejemplos de este tema para obtener un ejemplo de código que muestre el efecto de los filtros de un modelo de minería de datos tanto en las tablas de casos como en una tabla anidada.

Para obtener más información sobre cómo usar esta función en una instrucción DMX SELECT, vea SELECT FROM model (Modelo> SELECT FROM<). CASOS (DMX) o SELECT FROM <estructura>. CASOS.

mensajes de error

Se produce el error de seguridad siguiente si el usuario no tiene el permiso de obtención de detalles en la estructura de minería de datos primaria:

El usuario '%{user/}' no tiene permiso para profundizar en la estructura de minería de datos primaria del modelo de minería de datos '%{model/}'.

Se genera un mensaje de error similar al siguiente si se especifica un nombre de columna de estructura no válido:

No se encontró la columna de estructura de minería de datos '%{structure-column-name/}' en la estructura de minería de datos primaria '%{structure/}' en el contexto actual (línea %{line/}, columna %{column/}).

Ejemplos

Utilizaremos la estructura de minería de datos siguiente para estos ejemplos. Observe que la estructura de minería de datos contiene dos columnas de tabla anidada: Products y Hobbies. La tabla anidada en la columna Hobbies tiene una única columna que se utiliza como clave para la misma. La tabla anidada de la columna Products es una tabla anidada compleja que tiene una columna de clave y otras columnas que se usan para la entrada. Los ejemplos siguientes muestran cómo una estructura de minería de datos puede diseñarse para incluir muchas columnas diferentes, aunque un modelo no pueda utilizar cada columna. Algunas de estas columnas pueden no ser útiles en el nivel de modelo para generalizar patrones, pero pueden ser muy útiles en la obtención de detalles.

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

Después, cree un modelo de minería de datos basado en la estructura recién creada, utilizando el código de ejemplo siguiente:

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 ejemplo 1: Devolver una columna de la estructura de minería de datos

La consulta del ejemplo siguiente devuelve las columnas CustomerName y Age, que se definen para formar parte del modelo de minería de datos. Sin embargo, la consulta también devuelve la columna Age, que forma parte de la estructura pero no del modelo de minería de datos.

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

Tenga en cuenta que el filtrado de filas para restringir los casos a los clientes con una edad superior a 30 años tiene lugar en el nivel del modelo. Por consiguiente, esta expresión no devolvería los casos que están incluidos en los datos de la estructura pero que no usa el modelo. Dado que la condición de filtro utilizada para crear el modelo (EXISTS (Products)) restringe los casos únicamente a los clientes que compraron productos, podría haber casos en la estructura que no devuelva esta consulta.

Consulta de ejemplo 2: Aplicar un filtro a la columna de la estructura

La consulta del ejemplo siguiente no solo devuelve las columnas del modelo CustomerName y Age, y la tabla anidada Products, sino también el valor de la columna Quantity de la tabla anidada, que no forma parte del modelo.

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

Tenga en cuenta que, en este ejemplo, se aplica un filtro a la columna de estructura para restringir los casos a los clientes cuya ocupación es "Arquitecto" (WHERE StructureColumn('Occupation') = 'Architect'). Dado que la condición de filtro del modelo siempre se aplica a los casos al crearse el modelo, solo se incluyen en los casos del modelo aquellos que tienen en la tabla Products por lo menos una fila que la cumpla. Por consiguiente, se aplica tanto el filtro en la tabla anidada Products como el filtro en el caso ('Occupation').

Consulta de ejemplo 3: Seleccionar columnas de una tabla anidada

La consulta del ejemplo siguiente devuelve los nombres de los clientes que se usaron como casos de entrenamiento del modelo. Para cada cliente, la consulta devuelve también una tabla anidada que contiene los detalles de la compra. Aunque el modelo incluye la ProductName columna, el modelo no usa el valor de la ProductName columna. El modelo solo comprueba si el producto se compró a un precio normal (NOT``OnSale). Esta consulta no devuelve solo el nombre del producto, sino que también devuelve la cantidad comprada, que no está incluida en el modelo.

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

Observe que no puede devolver las columnas ProductName o Quantity a menos que la obtención de detalles esté habilitada en el modelo de minería de datos.

Consulta de ejemplo 4: Filtrar y devolver columnas de tablas anidadas

La siguiente consulta de ejemplo devuelve las columnas de tabla anidada y los casos que están incluidos en la estructura de minería de datos, pero no en el modelo. El modelo ya se filtra con la presencia de productos OnSale, pero esta consulta agrega un filtro en la columna de la estructura de minería de datos, Quantity:

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

Consulte también

Referencia de funciones de extensiones de minería de datos (DMX)
Funciones (DMX)
Funciones de predicción generales (DMX)