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

 

Aplica-se a: SQL Server 2016

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

As expressões de filtro geralmente são equivalentes ao conteúdo de uma cláusula WHERE. Você pode conectar várias condições usando os operadores lógicos e, ou, e não.

Em tabelas aninhadas, você também pode usar o EXISTS e não existe operadores. Um EXISTS condição for 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.

Um não existe condição for 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> ]  

filtro
Contém um ou mais predicados, conectados por operadores lógicos.

lista de predicados
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
E, OU, NÃO

avPredicate
Expressão de filtro que pode ser aplicada somente à coluna da estrutura de mineração escalar. Um avPredicate expressão pode ser usada em filtros de modelo ou 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 que)

  • >= (maior que ou igual a)

  • <= (menor que ou igual a)

System_CAPS_ICON_note.jpg Observação


Independentemente do tipo de dados, esses operadores não podem ser aplicados a uma coluna que tem o tipo discreto, Discretized, ou chave.

Uma expressão que usa quaisquer dos operadores a seguir só pode ser aplicada a uma coluna contínua, discreta, distinta ou chave:

  • = (igual a)

  • ! = (igual a)

  • É NULO

Se o argumento avPredicate, aplica-se a uma coluna de dados discreto, o valor usado no filtro pode ser qualquer valor em um bloco específico.

Em outras palavras, você não pode definir a condição como AgeDisc = ’25-35’, mas em vez disso, computação e, em seguida, use um valor de intervalo.

Exemplo: AgeDisc = 27 significa qualquer valor no mesmo intervalo como 27, que nesse caso é 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 ser aplicado a uma coluna de estrutura de mineração de tabela

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

Todos os predicados devem ser do tipo descrito em avPredicates. Além disso, os predicados podem referir-se somente às colunas que estão incluídas na tabela aninhada atual, identificada pelo argumento, columnName.

Limitações na sintaxe do 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 boolianos, como os sinais de mais ou menos, não são suportados na sintaxe de filtro.

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 SQL Server Data Tools (SSDT), no propriedade janela e o expressão painel da caixa de diálogo Filtro, você verá apenas a cadeia de caracteres que aparece após as palavras-chave com o filtro. 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

Esse exemplo mostra um simples filtro que restringe os casos usados no modelo para clientes cuja ocupação seja 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 da 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ído 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 ser 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 da 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 um EXISTS instrução. Isso garante que a tabela aninhada não está 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 a do Exemplo 4, mas é muito mais complexo. A tabela aninhada, ProductsOnSale, tem a condição de filtro (OnSale) que significa que o valor de OnSale deve ser true do produto listado em ProductName. Aqui, OnSale é uma coluna de estrutura.

A segunda parte do filtro, para ProductsNotOnSale, repete essa sintaxe, mas filtros em produtos para os quais o valor de OnSale é true não(!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 a ProductsNotOnSale lista, com base nos casos incluídos no ProductsOnSale lista, 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 ocorre porque, em modelos de série temporal e modelos de clustering de sequência, a coluna de data pode ser tratada como 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 a uma coluna de data do tipo contínuo que foi adicionado ao modelo de previsão.

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

System_CAPS_ICON_note.jpg Observaçã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. Você também pode definir o sinalizador de modelo na coluna para PredictOnly ou Ignorar. Para obter mais informações, consulte sinalizadores de modelagem & 40; mineração de dados & 41;.

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 você precisar usar um nível específico de granularidade que não é suportada por um contínuo tipo de dados, você pode criar um valor derivado na fonte de dados usando expressões para extrair a unidade a ser usada na filtragem e análise.

System_CAPS_ICON_warning.jpg Aviso


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, se você quiser filtrar os resultados da central de atendimento para mostrar apenas fins de semana, será possível criar uma expressão na exibição da fonte de dados que extrai o nome do dia da semana para 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.

Voltar ao Início

Filtros para modelos de mineração e 40; Analysis Services – Data Mining e 41;
Teste e validação e 40; Data Mining e 41;

Contribuições da comunidade

ADICIONAR
Mostrar: