Compartir a través de


Sintaxis y ejemplos del filtro de modelos (Analysis Services: Minería de datos)

En esta sección se proporciona información detallada sobre la sintaxis para los filtros, junto con expresiones de ejemplo.

Sintaxis de filtro

Filtros en atributos de casos

Filtros en atributos de tabla anidada

Filtros en varios atributos de tabla anidada

Faltan atributos de filtros en una tabla anidada

Filtros en varios valores de tabla anidada

Filtros en atributos de tabla anidada y EXISTS

Combinaciones de filtro

Filtros en fechas

Sintaxis de filtro

Las expresiones de filtro generalmente equivalen al contenido de una cláusula WHERE. Puede conectar varias condiciones usando los operadores lógicos AND, OR y NOT.

En tablas anidadas, también puede usar los operadores EXISTS y NOT EXISTS. Una condición EXISTS se evalúa como true si la subconsulta devuelve al menos una fila. Esto es útil en casos en los que desea restringir el modelo a los casos que contienen un valor determinado en la tabla anidada: por ejemplo, los clientes que han comprado un artículo al menos una vez.

Una condición NOT EXISTS se evalúa como true si la condición especificada en la subconsulta no existe. Un ejemplo es cuando se desea restringir el modelo a los clientes que nunca han comprado un artículo determinado.

La sintaxis general es la siguiente:

<filter>::=<predicate list>  | ( <predicate list> )
<predicate list>::= <predicate> | [<logical_operator> <predicate list>] 
<logical_operator::= AND| OR
<predicate>::= NOT <predicate>|( <predicate> ) <avPredicate> | <nestedTablePredicate> | ( <predicate> ) 
<avPredicate>::= <columnName> <operator> <scalar> | <columnName> IS [NOT] NULL
<operator>::= = | != | <> | > | >= | < | <=
<nestedTablePredicate>::= EXISTS (<subquery>)
<subquery>::=SELECT * FROM <columnName>[ WHERE  <predicate list> ]
  • filtro
    Contiene uno o más predicados, conectados por operadores lógicos.

  • lista de predicados
    Una o más expresiones de filtro válidas, separadas por operadores lógicos.

  • columnName
    El nombre de una columna de estructura de minería de datos.

  • operador lógico
    AND, OR, NOT

  • avPredicate
    Expresión de filtro que solo se puede aplicar a una columna de estructura de minería de datos escalar. Una expresión avPredicate se puede usar en ambos filtros de modelos o filtros de tablas anidadas.

    Una expresión que usa cualquiera de los operadores siguientes solo se puede aplicar a una columna continua. :

    • < (menor que)

    • > (mayor que)

    • >= (mayor o igual que)

    • <= (menor o igual que)

    [!NOTA]

    Sin tener en cuenta el tipo de datos, estos operadores no se pueden aplicar a una columna que tenga el tipo Discrete, Discretized o Key.

    Una expresión que usa cualquiera de los operadores siguientes se puede aplicar a una columna de clave continua, discreta o de datos discretos:

    • = (es igual a)

    • != (no es igual a)

    • IS NULL

    Si <avPredicate> se aplica a una columna de datos discretos, el valor usado en el filtro puede ser cualquier valor de un depósito concreto.

    Es decir, no define la condición como AgeDisc = ’25-35’ pero en su lugar calcula y, a continuación, usa un valor de ese intervalo.

    Ejemplo:  AgeDisc = 27   indica cualquier valor del mismo intervalo como 27, que en este caso es 25-35.

  • nestedTablePredicate
    Expresión de filtro que se aplica a tablas anidadas. Solo se puede usar en filtros de modelos.

    El argumento de subconsulta de <nestedTablePredicate> solo se puede aplicar a una columna de estructura de minería de datos de tabla.

  • subquery
    Instrucción SELECT seguida de un predicado válido o una lista de predicados.

    Todos los predicados deben ser del tipo <avPredicates>. Además, los predicados solo pueden hacer referencia a las columnas incluidas en la tabla anidada actual, identificadas por <ColumnName>.

Limitaciones en la sintaxis de filtro

A los filtros se les aplican las restricciones siguientes:

  • Un filtro solo puede contener predicados simples. Entre estos se incluyen operadores matemáticos, escalares y nombres de columna.

  • No se admiten las funciones definidas por el usuario en la sintaxis del filtro.

  • No se admiten los operadores no booleanos, como los signos más o menos, en la sintaxis del filtro.

Ejemplos de filtros

Los ejemplos siguientes muestran el uso de filtros aplicados a un modelo de minería de datos. Si crea la expresión de filtro usando Business Intelligence Development Studio, en la ventana Propiedad y el panel Expresión del cuadro de diálogo de filtros, vería solo la cadena que aparece después de las palabras clave WITH FILTER. Aquí, la definición de la estructura de minería de datos está incluida para facilitar la comprensión del uso y del tipo de columna.

Volver al principio

Ejemplo 1: Filtrado en el nivel de caso típico

En este ejemplo se muestra un filtro simple que restringe los casos usados en el modelo a los clientes cuya profesión sea arquitecto y tengan más de 30 años.

ALTER MINING STRUCTURE MyStructure  ADD MINING MODEL MyModel_1
(
CustomerId,
Age,
Occupation,
MaritalStatus PREDICT
)
WITH FILTER (Age > 30 AND Occupation=’Architect’)

Volver al principio

Ejemplo 2: Filtrado en el nivel de caso usando atributos de tabla anidada

Si su estructura de minería de datos contiene tablas anidadas, puede filtrar por la existencia de un valor en una tabla anidada o filtrar en filas de tabla anidada que contienen un valor concreto. Este ejemplo restringe los casos usados para el modelo a los clientes mayores de 30 años que realizaron al menos una compra que incluía la leche.

Como se muestra en este ejemplo, no es necesario que el filtro use solo las columnas incluidas en el modelo. La tabla anidada Products forma parte de la estructura de minería de datos pero no está incluida en el modelo de minería de datos. Sin embargo, todavía puede filtrar por los valores y atributos de la tabla anidada. Para ver los detalles de estos casos, debe estar habilitada la obtención de detalles.

ALTER MINING STRUCTURE MyStructure  ADD MINING MODEL MyModel_2
(
CustomerId,
Age,
Occupation,
MaritalStatus PREDICT
)
WITH DRILLTHROUGH, 
FILTER (Age > 30 AND EXISTS (SELECT * FROM Products WHERE ProductName=’Milk’)
)

Volver al principio

Ejemplo 3: Filtrado en el nivel de caso en varios atributos de tabla anidada

En este ejemplo se muestra un filtro de tres partes: se aplica una condición a la tabla de casos, otra condición a un atributo de la tabla anidada y otra, en un valor concreto de una de las columnas de tabla anidada.

La primera condición del filtro, Age > 30, se aplica a una columna de la tabla de casos. Las condiciones restantes se aplican a la tabla anidada.

La segunda condición, EXISTS (SELECT * FROM Products WHERE ProductName=’Milk’, comprueba la presencia de al menos una compra en la tabla anidada que incluía la leche. La tercera condición, Quantity>=2, significa que el cliente debe haber comprado al menos dos unidades de leche en una transacción única.

ALTER MINING STRUCTURE MyStructure  ADD MINING MODEL MyModel_3
(
CustomerId,
Age,
Occupation,
MaritalStatus PREDICT,
Products PREDICT
(
ProductName KEY,
Quantity      
)
)
FILTER (Age > 30 AND EXISTS (SELECT * FROM Products WHERE ProductName=’Milk’  AND Quantity >= 2) 
)

Volver al principio

Ejemplo 4: Filtrado en el nivel de caso en ausencia de atributos de tabla anidada

En este ejemplo se muestra cómo limitar los casos al cliente que no compró un artículo específico, filtrando por la ausencia de un atributo en la tabla anidada. En este ejemplo, el modelo se entrena usando clientes mayores de 30 años que nunca han comprado leche.

ALTER MINING STRUCTURE MyStructure  ADD MINING MODEL MyModel_4
(
CustomerId,
Age,
Occupation,
MaritalStatus PREDICT,
Products PREDICT
(
ProductName
)
)
FILTER (Age > 30 AND NOT EXISTS (SELECT * FROM Products WHERE ProductName=’Milk’) )

Volver al principio

Ejemplo 5: Filtrar en varios valores de tabla anidada

El propósito del ejemplo es mostrar el filtrado de tabla anidada. El filtro de tabla anidada se aplica después del filtro de casos y solo restringe las filas de tabla anidada.

Este modelo podría contener varios casos con tablas anidadas vacías porque no se especifica EXISTS.

ALTER MINING STRUCTURE MyStructure  ADD MINING MODEL MyModel_5
(
CustomerId,
Age,
Occupation,
MaritalStatus PREDICT,
Products PREDICT
(
ProductName KEY,
Quantity      
) WITH FILTER(ProductName=’Milk’ OR ProductName=’bottled water’)
)
WITH DRILLTHROUGH

Volver al principio

Ejemplo 6: Filtrar en atributos de tabla anidada y EXISTS

En este ejemplo, el filtro en la tabla anidada restringe las filas a aquéllas que contienen leche o agua embotellada. A continuación, los casos del modelo se restringen usando una instrucción EXISTS. Esto asegura que la tabla anidada no está vacía.

ALTER MINING STRUCTURE MyStructure  ADD MINING MODEL MyModel_6
(
CustomerId,
Age,
Occupation,
MaritalStatus PREDICT,
Products PREDICT
(
ProductName KEY,
Quantity      
) WITH FILTER(ProductName=’Milk’ OR ProductName=’bottled water’)
)
FILTER (EXISTS (Products))

Volver al principio

Ejemplo 7: Combinaciones de filtros complejas

El escenario para este modelo se parece al del Ejemplo 4 pero es mucho más complejo. La tabla anidada, ProductsOnSale, tiene la condición de filtro (OnSale) que significa que el valor de OnSale debe ser true para el producto enumerado en ProductName. Aquí, OnSale es una columna de estructura.

La segunda parte del filtro, para ProductsNotOnSale, repite esta sintaxis pero filtra por los productos para los que el valor de OnSale es not true(!OnSale).

Finalmente, se combinan las condiciones y se agrega una restricción adicional a la tabla de casos. El resultado es predecir compras de productos en la lista ProductsNotOnSale, basándose en los casos incluidos en la lista ProductsOnSale, para todos los clientes mayores de 25 años.

ALTER MINING STRUCTURE MyStructure ADD MINING MODEL MyModel_7

(

CustomerId,

Age,

Occupation,

MaritalStatus,

ProductsOnSale

(

ProductName KEY

) WITH FILTER(OnSale),

ProductsNotOnSale PREDICT ONLY

(

ProductName KEY

) WITH FILTER(!OnSale)

)

WITH DRILLTHROUGH,

FILTER (EXISTS (ProductsOnSale) AND EXISTS(ProductsNotOnSale) AND Age > 25)

Volver al principio

Ejemplo 8: Filtrar en fechas

Puede filtrar las columnas de entrada en fechas, como con cualesquiera otros datos. Las fechas contenidas en una columna del tipo de fecha y hora son valores continuos; por consiguiente, puede especificar un intervalo de fechas utilizando operadores como mayor que (>) o menor que (<). (Si el origen de datos no representa fechas mediante un tipo de datos continuo, sino como valores discretos o de texto, no puede filtrar en un intervalo de fechas, sino que debe especificar valores discretos individuales).

Sin embargo, no puede crear un filtro en la columna de fecha en un modelo de serie temporal si la columna de fecha utilizada para el filtro también es la columna de clave para el modelo. Eso se debe a que, en los modelos de series temporales y de clústeres de secuencia, la columna de fecha podría tratarse como de tipo KeyTime o KeySequence.

Si necesita filtrar por fechas continuas en un modelo de serie temporal, puede crear una copia de la columna en la estructura de minería de datos y filtrar el modelo en la nueva columna.

Por ejemplo, la siguiente expresión representa un filtro en una columna de fecha de tipo Continuous que se ha agregado al modelo Forecasting.

=[DateCopy] > '12:31:2003:00:00:00'

[!NOTA]

Observe que cualquier columna adicional que agregue al modelo podría afectar a los resultados. Por consiguiente, si no desea utilizar la columna en el cálculo de la serie, debe agregar la columna solo a la estructura de minería de datos y no al modelo. También puede establecer el marcador de modelo de la columna en PredictOnly o en Ignore. Para obtener más información, vea Marcadores de modelado (Minería de datos).

En el caso de otros tipos de modelo, puede utilizar fechas como criterios de entrada o como criterios de filtro, igual que con cualquier otra columna. Sin embargo, si tiene que utilizar un nivel concreto de granularidad no admitido por un tipo de datos Continuous, puede crear un valor derivado en el origen de datos utilizando expresiones para extraer la unidad que se usará en el filtrado y el análisis.

Nota de advertenciaAdvertencia

Si especifica fechas como criterios de filtro, debe utilizar el siguiente formato, con independencia del formato de fecha para el sistema operativo actual: mm/dd/yyyy. Cualquier otro formato produce un error.

Por ejemplo, si desea filtrar los resultados del centro de llamadas para que se muestren solo los fines de semana, puede crear una expresión en la vista del origen de datos que extraiga el nombre del día de la semana para cada fecha y, a continuación, utilizar ese valor de nombre de día de la semana para la entrada o como un valor discreto en el filtrado. Recuerde que la repetición de valores puede afectar al modelo, por lo que debe utilizar únicamente una de las columnas y no la columna de fecha más el valor derivado. Para obtener un ejemplo de cómo crear una columna con nuevos valores que se base en una columna de fecha, vea Agregar una vista del origen de datos para datos del centro de llamadas (Tutorial intermedio de minería de datos).

Volver al principio