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 geralmente são equivalentes 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, NOTavPredicate
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çã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 quaisquer dos operadores a seguir só pode ser aplicada a uma coluna contínua, discreta, distinta ou 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 como 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 por um predicado válido ou 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 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.
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 SSDT (SQL Server Data Tools), 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
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í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 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 uma instrução EXISTS. 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) 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 é 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çã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 não suportado por um tipo de dados Continuous, você poderá criar um valor derivado na fonte de dados usando expressões para extrair a unidade a ser usada na filtragem e na análise.
Cuidado |
---|
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
Consulte também
Conceitos
Filtros para modelos de mineração (Analysis Services - Mineração de dados)