Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aplica-se a:
SQL Server 2019 e versões anteriores do Analysis Services
Azure Analysis Services
Fabric/Power BI Premium
Importante
A mineração de dados foi preterida no SQL Server 2017 Analysis Services e agora descontinuada no SQL Server 2022 Analysis Services. A documentação não é atualizada para recursos preteridos e descontinuados. Para saber mais, consulte a compatibilidade com versões anteriores do Analysis Services.
Este artigo descreve a sintaxe do filtro de modelo e fornece expressões de exemplo.
Filtros em atributos de tabela aninhada
Filtros em vários atributos de tabela aninhados
Filtra atributos ausentes na tabela aninhada
Filtros para vários valores de tabela aninhados
Filtros em atributos de tabelas aninhadas e EXISTS
Sintaxe do filtro
Expressões de filtro geralmente são equivalentes a expressões em uma WHERE cláusula. Combine várias condições com os operadores lógicos ANDORe NOT.
Em tabelas aninhadas, use os operadores NOT EXISTS e EXISTS. Uma EXISTS condição é avaliada para true se a subconsulta retorna pelo menos uma linha. Use essa condição para restringir o modelo a casos que contêm um valor específico na tabela aninhada, como clientes que compraram um item pelo menos uma vez.
Uma NOT EXISTS condição é avaliada para true se a subconsulta não retorna linhas. Use essa condição para restringir o modelo a clientes que nunca compraram um item específico.
Aqui está 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 de estrutura de mineração escalar. Uma expressão avPredicate pode ser usada em filtros de modelo ou filtros de tabela aninhados.
Uma expressão que usa qualquer um dos operadores a seguir só pode ser aplicada a uma coluna contínua. :
< (menor que)
> (maior que)
>= (maior ou igual a)
<= (menor ou igual a)
Observação
Independentemente do tipo de dados, não aplique esses operadores a colunas do tipo Discrete, Discretizedou Key.
Uma expressão que usa qualquer um dos seguintes operadores pode ser aplicada a uma coluna contínua, discreta, discretizada ou de chave.
= (igual a)
!= (não é igual a)
IS NULL
Quando uma avPredicate se aplica a uma coluna discreta, use qualquer valor do bucket de destino no filtro.
Não defina a condição como AgeDisc = '25-35'. Em vez disso, use um valor desse intervalo.
Por exemplo, AgeDisc = 27 representa qualquer valor no mesmo intervalo que 27, que é de 25 a 35 neste exemplo.
aninhadoTabelaPredicate
Expressão de filtro que se aplica a uma tabela aninhada. Pode ser usado somente em filtros de modelo.
O nestedTablePredicate aceita uma subconsulta somente para uma coluna de tabela de uma estrutura de mineração.
Subconsulta
Uma instrução SELECT seguida por um predicado válido ou uma lista de predicados.
Use apenas predicados avPredicate. Cada predicado pode se referir apenas a colunas na tabela aninhada atual identificada por columnName.
Limitações na sintaxe do filtro
As seguintes restrições se aplicam a filtros:
Use apenas predicados simples em um filtro, incluindo operadores matemáticos, escalares e nomes de coluna.
A sintaxe de filtro não dá suporte a funções definidas pelo usuário.
A sintaxe de filtro não dá suporte a operadores não boolianos, como sinais de adição e subtração.
Exemplos de filtros
Os exemplos a seguir mostram como aplicar filtros a um modelo de mineração. Se você criar a expressão de filtro usando SQL Server Data Tools, a janela Propriedade e o painel Expressão da caixa de diálogo filtro mostrarão apenas a cadeia de caracteres após as WITH FILTER palavras-chave. Cada exemplo inclui a definição da estrutura de mineração para esclarecer o tipo de coluna e o uso.
Exemplo 1: filtragem típica em nível de caso
Este exemplo mostra um filtro simples que restringe os casos usados no modelo a clientes cuja ocupação é arquiteta e cuja idade é maior de 30 anos.
ALTER MINING STRUCTURE MyStructure ADD MINING MODEL MyModel_1
(
CustomerId,
Age,
Occupation,
MaritalStatus PREDICT
)
WITH FILTER (Age > 30 AND Occupation='Architect')
Exemplo 2: filtragem em nível de caso usando atributos de tabela aninhados
Se sua estrutura de mineração contiver tabelas aninhadas, você poderá filtrar a existência de um valor em uma tabela aninhada ou filtrar em linhas de tabela aninhadas que contêm um valor específico. Este exemplo restringe os casos usados para o modelo a clientes com mais de 30 anos que fizeram pelo menos uma compra que incluía leite.
O filtro pode usar colunas que o modelo não inclui. A tabela aninhada Produtos faz parte da estrutura de mineração, mas o modelo de mineração não a inclui. Você ainda pode filtrar valores e atributos na tabela aninhada. Ative a análise detalhada para exibir os detalhes do 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')
)
Exemplo 3: filtragem em nível de caso em vários atributos de tabela aninhados
Este exemplo mostra um filtro de três partes: uma condição se aplica à tabela de casos, outra condição a um atributo na tabela aninhada, e outra condição sobre um valor específico em uma das colunas da tabela aninhada.
A primeira condição no Age > 30 filtro aplica-se a uma coluna na tabela de casos. As condições restantes se aplicam à tabela aninhada.
A segunda condição, EXISTS (SELECT * FROM Products WHERE ProductName='Milk') verifica se a tabela aninhada contém pelo menos uma compra que inclui leite. A terceira condição, Quantity >= 2exige que o cliente compre pelo menos duas unidades de leite em uma 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)
)
Exemplo 4: filtragem em nível de caso com base na ausência de atributos de tabela aninhada
Este exemplo limita os casos aos clientes que não compraram um item específico filtrando a ausência de um atributo na tabela aninhada. O modelo usa 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') )
Exemplo 5: Filtrando vários valores em tabelas aninhadas
Este exemplo mostra a filtragem de tabela aninhada. O filtro da tabela aninhada é executado após o filtro de casos e restringe apenas 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
Exemplo 6: Filtragem por atributos de tabelas aninhadas e EXISTS
Neste exemplo, o filtro de tabela aninhada restringe as linhas às que contêm leite ou água engarrafada. Em seguida, uma instrução EXISTS restringe o modelo a casos com uma tabela aninhada não 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))
Exemplo 7: combinações de filtro complexas
Esse cenário se assemelha ao cenário no Exemplo 4, mas é muito mais complexo. A tabela aninhada, ProductsOnSale, tem a condição (OnSale)de filtro, o que significa que o valor de OnSale deve ser true para o produto listado em ProductName. Nesse caso, OnSale é uma coluna de estrutura.
A segunda parte do filtro, para ProductsNotOnSale, usa a mesma sintaxe, mas filtra produtos para os quais o OnSale é false (!OnSale).
Por fim, você combina as condições e adiciona mais uma restrição à 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)
Exemplo 8: Filtragem por datas
Você pode filtrar colunas de entrada em datas, como faria com outros dados. As datas contidas em uma coluna de data/hora do tipo são valores contínuos; portanto, você pode especificar um intervalo de datas usando operadores como maior que (>) ou menor que (<). Se a fonte de dados não representar datas por um tipo de dados contínuo, mas como valores discretos ou de texto, você não poderá filtrar em um intervalo de datas, mas deve especificar valores individuais discretos.
No entanto, você não poderá 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. Essa restrição existe porque, em modelos de série temporal e modelos de clustering de sequência, a coluna de data pode ser tratada como o tipo KeyTime ou KeySequence.
Se você precisar filtrar datas contínuas em um modelo de série temporal, poderá criar uma cópia da coluna na estrutura de mineração e filtrar o modelo com base na nova coluna.
Por exemplo, a expressão a seguir filtra uma coluna de data contínua adicionada ao modelo de Previsão.
=[DateCopy] > '12:31:2003:00:00:00'
Observação
Todas as colunas extras que você adicionar ao modelo podem afetar os resultados. Se você não quiser que a coluna seja usada na computação da série, adicione a coluna somente à estrutura de mineração e não ao modelo. Você também pode definir o sinalizador de modelo na coluna como PredictOnly ou ignorar. Para obter mais informações, consulte Sinalizadores de Modelagem (Mineração de Dados).
Para outros tipos de modelo, você pode usar datas como critérios de entrada ou critérios de filtro como faria em qualquer outra coluna. No entanto, se você precisar usar um nível específico de granularidade que um tipo de dados contínuo não dá suporte, crie um valor derivado na fonte de dados usando expressões para extrair a unidade a ser usada na filtragem e análise.
Aviso
Quando você especificar uma data como um critério de filtro, use o mm/dd/yyyy formato independentemente do formato de data do sistema operacional atual. Qualquer outro formato causa um erro.
Por exemplo, se você quiser filtrar os resultados do call center para mostrar somente finais de semana, poderá criar uma expressão na exibição da fonte de dados que extraia o nome do dia da semana para cada data e, em seguida, use esse valor de nome do dia da semana como entrada ou como um valor discreto na filtragem. Lembre-se de que valores recorrentes podem afetar o modelo, portanto, use apenas uma das colunas, não a coluna de data mais o valor derivado.
Consulte Também
Filtros para modelos de mineração (Analysis Services – Mineração de dados)
Teste e validação (mineração de dados)