StructureColumn (DMX)

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 <structure column name>. 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 se debe incluir entre comillas sencillas: por ejemplo, StructureColumn('columna 1'). Si hay varias columnas que tienen el mismo nombre, el nombre se resuelve en el contexto de la instrucción SELECT contenedora.

La presencia de filtros en el modelo afecta a los resultados que se devuelven en una consulta que usa la función StructureColumn. 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 utilizar esta función en una instrucción DMX SELECT, vea SELECT FROM <model>.CASES (DMX) o SELECT FROM <estructura>.CASES.

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 '%{usuario/}' no tiene permiso para obtener detalles de la estructura de minería de datos primaria del modelo de minería de datos ‘%{modelo/}’.

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

La columna de estructura de minería de datos '‘%{nombre-columna-estructura/}’ no se encontró en la estructura de minería de datos primaria '%{estructura/} ' en el contexto actual (línea %{línea/}, columna %{columna/}).

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 sólo 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 la estructura para restringir los casos a los clientes cuya ocupación es la de arquitecto (WHERE StructureColumn(‘Occupation’) = ‘Architect’). Dado que la condición de filtro del modelo siempre se aplica a los casos al crearse el modelo, sólo 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 columna ProductName , no utiliza el valor de la columna ProductName. El modelo sólo comprueba si el producto se compró al precio normal (NOTOnSale ). 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)