Sintaxe de filtro de modelo e exemplos (Analysis Services - Mineração de dados)

Esta seção fornece informações detalhadas sobre a sintaxe de filtros de modelo, além de expressões de exemplo.

Sintaxe de Filtro

Filtros em atributos de caso

Filtros em atributos de tabela aninhada

Filtros em vários atributos de tabela aninhada

Atributos de filtros não encontrados em tabela aninhada

Filtros em vários valores de tabela aninhada

Filtros em atributos de tabela aninhada e EXISTS

Combinações de filtro

Filtros em datas

Sintaxe de filtro

As expressões de filtro normalmente se equivalem ao conteúdo de uma cláusula WHERE. Você pode conectar várias condições usando os operadores lógicos AND, OR e NOT.

Em tabelas aninhadas, você também pode usar os operadores EXISTS e NOT EXISTS. Uma condição EXISTS será avaliada como true se a subconsulta retornar pelo menos uma linha. Isso é útil nos casos em que você deseja restringir o modelo para os casos que contêm um determinado valor na tabela aninhada: por exemplo, os clientes que compraram pelo menos um item uma vez.

Uma condição NOT EXISTS é avaliada como true se a condição especificada na subconsulta não existir. Um exemplo é quando você deseja restringir o modelo a clientes que nunca compraram um determinado item.

A sintaxe geral é:

<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> ]
  • filter
    Contém um ou mais predicados, conectados por operadores lógicos.

  • predicate list
    Uma ou mais expressões de filtro válidas, separadas por operadores lógicos.

  • columnName
    O nome de uma coluna de estrutura de mineração.

  • operador lógico
    AND, OR, NOT

  • avPredicate
    Expressão de filtro que pode ser aplicada somente à coluna da estrutura de mineração escalar. Uma expressão avPredicate pode ser usada nos filtros de modelo e filtros de tabela aninhada.

    Uma expressão que usa quaisquer dos operadores a seguir só pode ser aplicada a uma coluna contínua. :

    • < (menor que)

    • > (maior do que)

    • >= (maior do que ou igual a)

    • <= (menor do que ou igual a)

    ObservaçãoObservação

    Independentemente do tipo de dados, esses operadores não podem ser aplicados a uma coluna que tenha o tipo Discrete, Discretized ou Key.

    Uma expressão que usa qualquer um dos seguintes operadores só pode ser aplicada a uma coluna contínua, discreta, de dados discretos ou de chave:

    • = (igual a)

    • != (diferente de)

    • IS NULL

    Se o argumento, avPredicate, se aplicar a uma coluna de dados discretos, o valor usado no filtro poderá ser qualquer valor em um bucket específico.

    Em outras palavras, você não define a condição como AgeDisc = ’25-35’, mas calcule e use um valor a partir do intervalo.

    Exemplo: AgeDisc = 27 significa que qualquer valor no mesmo intervalo de 27, que nesse caso é de 25 a 35.

  • nestedTablePredicate
    A expressão filtrada aplicada a uma tabela aninhada. Pode ser usado somente nos filtros de modelo.

    O argumento de subconsulta do argumento, nestedTablePredicate, só pode se aplicar a uma coluna de estrutura de mineração da tabela

  • subconsulta
    Uma instrução SELECT seguida de um predicado válido ou de uma lista de predicados.

    Todos os predicados devem ser do tipo descrito em avPredicates. Além disso, os predicados só podem se referir a colunas incluídas na tabela aninhada atual, identificada pelo argumento, columnName.

Limitações quanto à sintaxe de filtro

As restrições a seguir se aplicam a filtros:

  • Um filtro pode conter somente predicados simples. Esses incluem os operadores matemáticos, escalares e nomes de coluna.

  • Funções definidas pelo usuário não são suportadas na sintaxe de filtro.

  • Operadores não booleanos, como os sinais de mais ou menos, não são suportados na sintaxe de filtro.

Exemplos de filtros

Os exemplos a seguir demonstram o uso de filtros aplicados a um modelo de mineração. Se você criar a expressão de filtro usando Business Intelligence Development Studio, na janela Propriedade e o painel Expressão da caixa de diálogo de filtro, você verá somente a cadeia exibida depois das palavras-chave WITH FILTER. A seguir, a definição da estrutura de mineração incluída para facilitar o entendimento do tipo de coluna e uso.

Exemplo 1: filtragem do nível de caso típico

Este exemplo mostra um filtro simples que restringe os casos usados no modelo para clientes cujo cargo seja de arquiteto e cuja idade seja mais de 30 anos.

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

Voltar ao início

Exemplo 2: filtragem de nível de caso usando atributos de tabela aninhada

Se sua estrutura de mineração contiver tabelas aninhadas, você poderá filtrar pela existência de um valor em uma tabela aninhada ou filtrar pelas linhas da tabela aninhada que contêm um valor específico. Esse exemplo restringe os casos usados para o modelo para clientes com mais de 30 anos que fizeram pelo menos uma compra que incluísse leite.

Como esse exemplo mostra, não é necessário que o filtro use somente colunas incluídas no modelo. A tabela aninhada Produtos faz parte da estrutura de mineração, mas não está incluída no modelo de mineração. No entanto, você ainda pode filtrar por valores e atributos na tabela aninhada. Para exibir os detalhes desses casos, o detalhamento deve estar habilitado.

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

Voltar ao início

Exemplo 3: filtragem de nível de caso em vários atributos de tabela aninhada

Esse exemplo mostra um filtro de três partes: uma condição aplicada à tabela de casos, outra condição para um atributo na tabela aninhada e outra condição em um valor específico em uma das colunas da tabela aninhada.

A primeira condição no filtro, Age > 30, é aplicada a uma coluna na tabela de casos. As outras condições são aplicadas à tabela aninhada.

A segunda condição, EXISTS (SELECT * FROM Products WHERE ProductName=’Milk’, verifica a presença de, pelo menos, uma compra na tabela aninhada que incluísse leite. A terceira condição, Quantity>=2, significa que o cliente deve ter comprado pelo menos duas unidades de leite em uma única transação.

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

Voltar ao início

Exemplo 4: filtragem de nível de caso na ausência de atributos de tabela aninhada

Esse exemplo mostra como limitar os casos para o cliente que não comprou um item específico, filtrando pela ausência de um atributo na tabela aninhada. Nesse exemplo, o modelo é treinado usando clientes com mais de 30 anos que nunca compraram leite.

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

Voltar ao início

Exemplo 5: filtrando por vários valores de tabela aninhada

O objetivo do exemplo é mostrar a filtragem de tabela aninhada. O filtro da tabela aninhada é aplicado depois do filtro de caso e só restringe as linhas da tabela aninhada.

Esse modelo pode conter vários casos com tabelas aninhadas vazias porque EXISTS não está especificado.

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

Voltar ao início

Exemplo 6: filtrando por atributos de tabelas aninhadas e EXISTS

Nesse exemplo, o filtro na tabela aninhada restringe as linhas para aquelas que contêm leite ou garrafa de água. Em seguida, os casos no modelo são restringidos usando-se uma instrução EXISTS. Isso garante que a tabela aninhada não esteja vazia.

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

Voltar ao início

Exemplo 7: combinações complexas de filtro

O cenário desse modelo se assemelha ao do Exemplo 4, mas é muito mais complexo. A tabela aninhada, ProductsOnSale, tem a condição de filtro (OnSale) significando que o valor de OnSale deve ser true para o produto listado em ProductName. Aqui, OnSale é uma coluna de estrutura.

A segunda parte do filtro para ProductsNotOnSale repete essa sintaxe, mas filtra por produtos para os quais o valor de OnSale seja not true(!OnSale).

Por fim, as condições são combinadas e uma única restrição adicional é adicionada à tabela de casos. O resultado é prever compras de produtos na lista ProductsNotOnSale, com base nos casos incluídos na lista ProductsOnSale, para todos os clientes com mais de 25 anos.

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)

Voltar ao início

Exemplo 8: filtrando por datas

É possível filtrar colunas de entrada por datas, como você faria com qualquer outro dado. As datas contidas em uma coluna de tipo de data/hora são valores contínuos; por isso, é possível especificar um intervalo de datas usando-se operadores como maior que (>) ou menos que (<). (Se a fonte de dados não representar datas por um tipo de dados Contínuo, mas como valores discretos ou de texto, não será possível filtrar por um intervalo de datas, e você deverá especificar valores discretos individuais.)

No entanto, não será possível criar um filtro na coluna de data em um modelo de série temporal se a coluna de data usada para o filtro também for a coluna de chave do modelo. Isso porque, em modelos de série temporal e modelos MSC, a coluna de data pode ser manipulada como o tipo KeyTime ou KeySequence.

Se precisar filtrar por datas contínuas em um modelo de série temporal, você poderá criar uma cópia da coluna na estrutura de mineração e filtrar o modelo na nova coluna.

Por exemplo, a expressão a seguir representa um filtro em uma coluna de data do tipo Continuous que foi adicionado ao modelo Forecasting.

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

ObservaçãoObservação

Observe que qualquer coluna extra adicionada ao modelo pode afetar os resultados. Por isso, se não quiser usar a coluna na computação da série, você só deverá adicionar a coluna à estrutura de mineração, e não ao modelo. Também é possível definir o sinalizador de modelo na coluna como PredictOnly ou Ignore. Para obter mais informações, consulte Sinalizadores de modelagem (Mineração de Dados).

Para outros tipos de modelo, é possível usar datas como critérios de entrada ou de filtro exatamente como você faria em qualquer outra coluna. No entanto, se precisar usar um nível específico de granularidade sem suporte por um tipo de dados Continuous, você poderá criar um valor derivado na fonte de dados com o uso de expressões para extrair a unidade a ser usada na filtragem e na análise.

Observação sobre cuidadosCuidado

Ao especificar uma data como critério de filtro, você deve usar o formato a seguir, independentemente do formato de data do SO atual: mm/dd/yyyy. Qualquer outro formato resulta em um erro.

Por exemplo, para filtrar os resultados da central de atendimento para mostrar apenas fins de semana, você pode criar uma expressão na exibição da fonte de dados que extraia o nome do dia da semana de cada data e, em seguida, usar o valor do nome desse dia da semana para entrada ou como um valor discreto na filtragem. Basta se lembrar de que, como valores repetidos podem afetar o modelo, você só deve usar uma das colunas, e não a coluna de data mais o valor derivado. Para obter um exemplo de como criar uma coluna com novos valores baseados em uma coluna de data, consulte Adicionando uma exibição da fonte de dados aos dados de call center (Tutorial de mineração de dados intermediário).

Voltar ao início