Syntaxe et exemples de filtre de modèle (Analysis Services - exploration de données)

S’applique à : SQL Server 2019 et versions antérieures d’Analysis Services Azure Analysis Services Fabric/Power BI Premium

Important

L’exploration de données a été déconseillée dans SQL Server 2017 Analysis Services et a maintenant été abandonnée dans SQL Server 2022 Analysis Services. La documentation n’est pas mise à jour pour les fonctionnalités déconseillées et abandonnées. Pour en savoir plus, consultez la compatibilité descendante des Analysis Services.

Cet article décrit la syntaxe du filtre de modèle et fournit des exemples d’expressions.

Syntaxe de filtre

Filtres sur les attributs de cas

Filtres sur les attributs de table imbriqués

Filtres sur plusieurs attributs de table imbriqués

Filtre les attributs manquants dans la table imbriquée

Filtres sur plusieurs valeurs de table imbriquées

Filtres sur les attributs de table imbriqués et EXISTS

Combinaisons de filtres

Filtres sur les dates

Syntaxe de filtre

Les expressions de filtre sont généralement équivalentes aux expressions d’une WHERE clause. Combinez plusieurs conditions avec les opérateurs logiques AND, ORet NOT.

Dans les tables imbriquées, utilisez les opérateurs NOT EXISTS et EXISTS. Une condition EXISTS est évaluée à true si la sous-requête renvoie au moins une ligne. Utilisez cette condition pour limiter le modèle aux cas qui contiennent une valeur spécifique dans la table imbriquée, par exemple les clients qui ont acheté un élément au moins une fois.

Une NOT EXISTS condition est évaluée à true si la sous-requête ne retourne aucune ligne. Utilisez cette condition pour restreindre le modèle aux clients qui n’ont jamais acheté d’élément spécifique.

Voici la syntaxe générale :

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

filtre
Contient un ou plusieurs prédicats connectés par des opérateurs logiques.

liste de prédicats
Une ou plusieurs expressions de filtre valides, séparées par des opérateurs logiques.

Columnname
Nom d’une colonne de structure d’exploitation minière.

opérateur logique
ET, OU, PAS

avPredicate
Expression de filtre qui ne peut être appliquée qu’à une colonne scalaire de structure d’exploration de données. Une expression avPredicate peut être utilisée dans les filtres de modèle ou dans les filtres de table imbriqués.

Une expression qui utilise l’un des opérateurs suivants ne peut être appliquée qu’à une colonne continue. :

  • < (inférieur à)

  • > (supérieur à)

  • >= (supérieur ou égal à)

  • <= (inférieur ou égal à)

Note

Quel que soit le type de données, n’appliquez pas ces opérateurs aux colonnes de type Discrete, Discretizedou Key.

Une expression qui utilise l’un des opérateurs suivants peut être appliquée à une colonne continue, discrète, discrétisée ou clé :

  • = (égal à)

  • != (pas égal à)

  • IS NULL

Lorsqu’un avPredicate porte sur une colonne discrétisée, utilisez dans le filtre une valeur quelconque du compartiment cible.

Ne définissez pas la condition comme AgeDisc = '25-35'. Utilisez plutôt une valeur à partir de cet intervalle.

Par exemple, AgeDisc = 27 représente n’importe quelle valeur dans le même intervalle que 27, qui est de 25 à 35 dans cet exemple.

nestedTablePredicate
Expression de filtre qui s’applique à une table imbriquée. Peut être utilisé uniquement dans les filtres de modèle.

nestedTablePredicate n’accepte une sous-requête que pour une colonne de table d’une structure d’exploration de données.

Sous-requête
Instruction SELECT suivie d’un prédicat ou d’une liste de prédicats valides.

Utilisez uniquement des avPredicate prédicats. Chaque prédicat ne peut faire référence qu’aux colonnes de la table imbriquée actuelle identifiée par columnName.

Limitations relatives à la syntaxe de filtre

Les restrictions suivantes s’appliquent aux filtres :

  • Utilisez uniquement des prédicats simples dans un filtre, y compris des opérateurs mathématiques, des scalaires et des noms de colonnes.

  • La syntaxe de filtre ne prend pas en charge les fonctions définies par l’utilisateur.

  • La syntaxe de filtre ne prend pas en charge les opérateurs non booléens, tels que les signes plus et moins.

Exemples de filtres

Les exemples suivants montrent comment appliquer des filtres à un modèle d’exploration de données. Si vous créez l’expression de filtre à l’aide de SQL Server Data Tools, la fenêtre Propriété et le volet Expression de la boîte de dialogue filtre affichent uniquement la chaîne après les WITH FILTER mots clés. Chaque exemple comprend la définition de la structure d’exploration de données afin de clarifier le type de colonne et son utilisation.

Exemple 1 : filtrage typique au niveau des cas

Cet exemple montre un filtre simple qui limite les cas utilisés dans le modèle aux clients dont l’occupation est architecte et dont l’âge est supérieur à 30.

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

Exemple 2 : filtrage au niveau du cas à l’aide d’attributs de table imbriqués

Si votre structure d’exploration de données contient des tables imbriquées, vous pouvez filtrer l’existence d’une valeur dans une table imbriquée ou filtrer sur des lignes de table imbriquées qui contiennent une valeur spécifique. Cet exemple limite les cas utilisés pour le modèle aux clients âgés de plus de 30 ans qui ont effectué au moins un achat incluant le lait.

Le filtre peut utiliser des colonnes que le modèle n’inclut pas. La table imbriquée Products fait partie de la structure d’extraction de données, mais le modèle d’extraction de données ne l’inclut pas. Vous pouvez toujours filtrer sur les valeurs et les attributs dans la table imbriquée. Activez l’extraction pour afficher les détails du cas.

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

Exemple 3 : filtrage au niveau des cas de plusieurs attributs de tables imbriquées

Cet exemple montre un filtre en trois parties : une condition s’applique à la table de cas, à une autre condition à un attribut de la table imbriquée et à une autre condition sur une valeur spécifique dans l’une des colonnes de la table imbriquée.

La première condition dans le filtre, Age > 30s’applique à une colonne dans la table de cas. Les conditions restantes s’appliquent à la table imbriquée.

La deuxième condition, EXISTS (SELECT * FROM Products WHERE ProductName='Milk')vérifie si la table imbriquée contient au moins un achat incluant le lait. La troisième condition, Quantity >= 2oblige le client à acheter au moins deux unités de lait dans une transaction.

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

Exemple 4 : filtrage au niveau du cas basé sur l’absence d’attributs de table imbriqués

Cet exemple limite les cas aux clients qui n’ont pas acheté d’élément spécifique en filtrant l’absence d’un attribut dans la table imbriquée. Le modèle utilise des clients de plus de 30 ans qui n’ont jamais acheté du lait.

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

Exemple 5 : Filtrage sur plusieurs valeurs de table imbriquées

Cet exemple montre le filtrage de tableaux imbriqués. Le filtre de table imbriqué s’exécute après le filtre de cas et limite uniquement les lignes de table imbriquées.

Ce modèle peut contenir plusieurs cas avec des tables imbriquées vides, car EXISTS il n’est pas spécifié.

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  

Exemple 6 : Filtrage sur les attributs de table imbriqués et EXISTS

Dans cet exemple, le filtre de table imbriqué limite les lignes à celles qui contiennent du lait ou de l’eau en bouteille. Une EXISTS instruction limite ensuite le modèle aux cas comportant une table imbriquée non vide.

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

Exemple 7 : combinaisons de filtres complexes

Ce scénario ressemble au scénario de l’exemple 4, mais il est beaucoup plus complexe. La table imbriquée ProductsOnSale a la condition (OnSale)de filtre, ce qui signifie que la valeur de OnSale doit être true pour le produit répertorié dans ProductName. Dans ce cas, OnSale est une colonne de structure.

La deuxième partie du filtre, pour ProductsNotOnSale, utilise la même syntaxe, mais filtre les produits pour lesquels OnSale est false (!OnSale).

Enfin, vous combinez les conditions et ajoutez une autre restriction à la table de cas. Le résultat est de prédire les achats de produits dans la liste ProductsNotOnSale , en fonction des cas inclus dans la liste ProductsOnSale , pour tous les clients âgés de 25 ans.

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)

Exemple 8 : Filtrage des dates

Vous pouvez filtrer les colonnes d’entrée sur des dates, comme vous le feriez pour toutes les autres données. Les dates contenues dans une colonne de type date/heure sont des valeurs continues ; par conséquent, vous pouvez spécifier une plage de dates à l’aide d’opérateurs tels que supérieur à (>) ou inférieur à (<). Si votre source de données ne représente pas de dates par type de données continu, mais comme valeurs discrètes ou textuelles, vous ne pouvez pas filtrer sur une plage de dates, mais devez spécifier des valeurs discrètes individuelles.

Toutefois, vous ne pouvez pas créer de filtre sur la colonne de date dans un modèle de série chronologique si la colonne de date utilisée pour le filtre est également la colonne clé du modèle. Cette restriction existe, car, dans les modèles de série chronologique et les modèles de clustering de séquence, la colonne de date peut être gérée en tant que type KeyTime ou KeySequence.

Si vous devez filtrer sur des dates continues dans un modèle de série chronologique, vous pouvez créer une copie de la colonne dans la structure d’exploration de données et filtrer le modèle sur la nouvelle colonne.

Par exemple, l’expression suivante filtre une colonne de date continue ajoutée au modèle de prévision.

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

Note

Toutes les colonnes supplémentaires que vous ajoutez au modèle peuvent affecter les résultats. Si vous ne souhaitez pas que la colonne soit utilisée dans le calcul de la série, ajoutez la colonne uniquement à la structure d’exploration de données, et non au modèle. Vous pouvez également définir l’indicateur de modèle sur la colonne à PredictOnly ou à Ignore. Pour plus d’informations, consultez Indicateurs de modélisation (exploration de données).

Pour d’autres types de modèles, vous pouvez utiliser des dates comme critères d’entrée ou critères de filtre comme vous le feriez dans n’importe quelle autre colonne. Toutefois, si vous devez utiliser un niveau de granularité spécifique qu’un type de données continu ne prend pas en charge, créez une valeur dérivée dans la source de données à l’aide d’expressions pour extraire l’unité à utiliser dans le filtrage et l’analyse.

Avertissement

Lorsque vous spécifiez une date comme critère de filtre, utilisez le format mm/dd/yyyy, quel que soit le format de date du système d’exploitation actuel. Tout autre format provoque une erreur.

Par exemple, si vous souhaitez filtrer les résultats de votre centre d’appels pour afficher uniquement les week-ends, vous pouvez créer une expression dans la vue de source de données qui extrait le nom de la semaine pour chaque date, puis utiliser cette valeur de nom de jour de la semaine pour l’entrée ou comme valeur discrète dans le filtrage. N’oubliez pas que les valeurs répétées peuvent affecter le modèle. Utilisez donc une seule des colonnes, et non la colonne de date plus la valeur dérivée.

Voir aussi

Filtres pour les modèles d’exploration de données (Analysis Services - Exploration de données)
Test et validation (exploration de données)