Sintaxis y ejemplos del filtro de modelos (Analysis Services - minería de datos)

Se aplica a: SQL Server 2019 y versiones anteriores de Analysis Services Azure Analysis Services Fabric/Power BI Premium

Importante

La minería de datos estaba en desuso en SQL Server 2017 Analysis Services y ahora se descontinuó en SQL Server 2022 Analysis Services. La documentación no se actualiza para las características en desuso y descontinuadas. Para más información, consulte Compatibilidad con versiones anteriores de Analysis Services.

En este artículo se describe la sintaxis del filtro de modelo y se proporcionan expresiones de ejemplo.

Sintaxis de filtro

Filtros en atributos de casos

Filtros en atributos de tabla anidada

Filtros en varios atributos de tabla anidada

Filtra los atributos que faltan en la tabla anidada

Filtros en varios valores de tabla anidada

Filtros en atributos de tabla anidada y EXISTS

Combinaciones de filtros

Filtros en fechas

Sintaxis del filtro

Las expresiones de filtro suelen ser equivalentes a las expresiones en una cláusula WHERE. Combine varias condiciones con los operadores lógicos AND, ORy NOT.

En las tablas anidadas, utilice los operadores EXISTS y NOT EXISTS. Una condición EXISTS se evalúa como true si la subconsulta devuelve al menos una fila. Use esta condición para restringir el modelo a los casos que contienen un valor específico en la tabla anidada, como los clientes que compraron un elemento al menos una vez.

Una NOT EXISTS condición se evalúa como true si la subconsulta no devuelve ninguna fila. Use esta condición para restringir el modelo a los clientes que nunca compraron un artículo específico.

Esta es la sintaxis general:

<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 varios predicados, conectados por operadores lógicos.

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

columnName
Nombre de una columna de estructura de minería de datos.

operador lógico
Y, O, NO

avPredicate
Expresión de filtro que solo se puede aplicar a la columna de estructura de minería escalar. Una expresión avPredicate se puede usar tanto en filtros de modelo como en filtros de tabla 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:

Independientemente del tipo de datos, no aplique estos operadores a columnas de tipo Discrete, Discretizedo Key.

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

  • = (igual que)

  • != (no igual a)

  • IS NULL

Cuando se avPredicate aplica a una columna discretizada, use cualquier valor del cubo de destino en el filtro.

No defina la condición como AgeDisc = '25-35'. En su lugar, use un valor de ese intervalo.

Por ejemplo, AgeDisc = 27 representa cualquier valor en el mismo intervalo que 27, que es de 25 a 35 en este ejemplo.

nestedTablePredicate
Expresión de filtro que se aplica a una tabla anidada. Solo se puede usar en filtros de modelo.

El nestedTablePredicate acepta una subconsulta solo para una columna de una estructura de minería de datos de tabla.

subconsulta
Una instrucción SELECT seguida de un predicado o de una lista de predicados válidos.

Use solo avPredicate predicados. Cada predicado solo puede hacer referencia a columnas de la tabla anidada actual identificada por columnName.

Limitaciones de la sintaxis de filtro

Las restricciones siguientes se aplican a los filtros:

  • Use solo predicados simples en un filtro, incluidos operadores matemáticos, escalares y nombres de columna.

  • La sintaxis de filtro no admite funciones definidas por el usuario.

  • La sintaxis del filtro no admite operadores no booleanos, como los signos más y menos.

Ejemplos de filtros

En los ejemplos siguientes se muestra cómo aplicar filtros a un modelo de minería de datos. Si crea la expresión de filtro mediante SQL Server Data Tools, la ventana Propiedad y el panel Expresión del cuadro de diálogo de filtro solo muestran la cadena después de las WITH FILTER palabras clave. Cada ejemplo incluye la definición de la estructura de minería de datos para aclarar el tipo de columna y su uso.

Ejemplo 1: Filtrado típico a nivel de caso

En este ejemplo se muestra un filtro sencillo que restringe los casos usados en el modelo a los clientes cuya ocupación es arquitecto y cuya edad es superior a 30.

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

Ejemplo 2: Filtrado de nivel de caso mediante atributos de tabla anidados

Si la estructura de minería de datos contiene tablas anidadas, puede filtrar por la existencia de un valor en una tabla anidada o filtrar por filas de tabla anidadas que contengan un valor específico. En este ejemplo se restringen los casos usados para el modelo a los clientes mayores de 30 años que realizaron al menos una compra que incluía leche.

El filtro puede usar columnas que el modelo no incluye. La tabla anidada Products forma parte de la estructura de minería de datos, pero el modelo de minería de datos no la incluye. Aún puede filtrar por valores y atributos en la tabla anidada. Habilite el acceso a los detalles para ver los detalles del caso.

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

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

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

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

La segunda condición, EXISTS (SELECT * FROM Products WHERE ProductName='Milk'), comprueba si la tabla anidada contiene al menos una compra que incluye leche. La tercera condición, Quantity >= 2, requiere que el cliente compre al menos dos unidades de leche en una transacción.

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

Ejemplo 4: Filtrado a nivel de caso por ausencia de atributos de tabla anidados

En este ejemplo se limitan los casos a los clientes que no compraron un elemento específico filtrando por la ausencia de un atributo en la tabla anidada. El modelo usa clientes mayores de 30 años que nunca compraron 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') )  

Ejemplo 5: Filtrado de varios valores de tabla anidada

En este ejemplo se muestra el filtrado de tablas anidadas. El filtro de tabla anidada se ejecuta después del filtro de casos y restringe solo las filas de tabla anidadas.

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

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  

Ejemplo 6: Filtrado por atributos de tablas anidadas y EXISTS

En este ejemplo, el filtro de tabla anidada restringe las filas a las que contienen leche o agua embotellada. A continuación, una EXISTS instrucción restringe el modelo a los casos con una tabla anidada no 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))  

Ejemplo 7: Combinaciones de filtros complejas

Este escenario es similar al del ejemplo 4, pero es mucho más complejo. La tabla anidada ProductsOnSale tiene la condición (OnSale)de filtro , lo que significa que el valor de OnSale debe ser true para el producto enumerado en ProductName. En este caso, OnSale es una columna de estructura.

La segunda parte del filtro, para ProductsNotOnSale, usa la misma sintaxis, pero filtra los productos para los que OnSale es false (!OnSale).

Por último, combine las condiciones y añada una restricción más a la tabla de casos. El resultado es predecir las compras de productos en la lista ProductsNotOnSale , en función de 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)

Ejemplo 8: Filtrado de fechas

Puede filtrar columnas de entrada en fechas, como haría con cualquier otro dato. Las fechas contenidas en una columna de tipo fecha y hora son valores continuos; por lo tanto, puede especificar un intervalo de fechas mediante operadores como mayor que (>) o menor que (<). Si el origen de datos no representa las fechas mediante un tipo de datos continuo, sino como valores discretos o de texto, no puede filtrar por un intervalo de fechas, sino que debe especificar los valores discretos individualmente.

Sin embargo, no se puede crear un filtro en la columna de fecha de un modelo de serie temporal si la columna de fecha usada para el filtro también es la columna de clave para el modelo. Esa restricción existe porque, en los modelos de serie temporal y los modelos de agrupación en clústeres de secuencia, la columna de fecha podría controlarse como tipo KeyTime o KeySequence.

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

Por ejemplo, la expresión siguiente filtra una columna fecha continua agregada al modelo de previsión.

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

Nota:

Las columnas adicionales que agregue al modelo podrían afectar a los resultados. Si no desea que la columna se use en el cálculo de la serie, agregue la columna solo a la estructura de minería de datos y no al modelo. También puede establecer la marca de modelo en la columna a PredictOnly o a Omitir. Para obtener más información, vea Modeling Flags (Data Mining).

Para otros tipos de modelo, puede usar fechas como criterios de entrada o criterios de filtro como lo haría en cualquier otra columna. Sin embargo, si necesita usar un nivel específico de granularidad que no admite un tipo de datos continuo , cree un valor derivado en el origen de datos mediante expresiones para extraer la unidad que se usará en el filtrado y el análisis.

Advertencia

Al especificar una fecha como criterio de filtro, use el mm/dd/yyyy formato independientemente del formato de fecha del sistema operativo actual. Cualquier otro formato produce un error.

Por ejemplo, si desea filtrar los resultados del centro de llamadas para mostrar solo los fines de semana, puede crear una expresión en la vista del origen de datos que extrae el nombre del día de la semana para cada fecha y, a continuación, usar ese valor de nombre de día de la semana para la entrada o como un valor discreto en el filtrado. Recuerde que los valores repetidos pueden afectar al modelo, por lo que use solo una de las columnas, no la columna de fecha más el valor derivado.

Véase también

Filtros para modelos de minería de datos (Analysis Services - Minería de datos)
Pruebas y validación (minería de datos)