Синтаксис фильтра моделей и примеры (службы Analysis Services — интеллектуальный анализ данных)

Применимо к: SQL Server 2019 и более ранних версий Analysis Services Azure Analysis Services Fabric/Power BI Premium

Это важно

Интеллектуальный анализ данных был признан устаревшим в службах SQL Server 2017 Analysis Services и теперь прекращён в службах SQL Server 2022 Analysis Services. Документация не обновляется для устаревших и прекращённых функций. Дополнительные сведения см. в статье о обратной совместимости служб Analysis Services.

В этом разделе содержатся подробные сведения о синтаксисе фильтров моделей вместе с примерами выражений.

Синтаксис фильтра

Фильтры по атрибутам случаев

Фильтры по атрибутам вложенной таблицы

Фильтры для нескольких вложенных атрибутов таблицы

Фильтрует атрибуты, отсутствующие в вложенной таблице

Фильтры по нескольким вложенным значениям таблицы

Фильтры по атрибутам вложенной таблицы и EXISTS

Сочетания фильтров

Фильтры по датам

Синтаксис фильтра

Выражения фильтров обычно эквивалентны содержимому предложения WHERE. Можно подключить несколько условий с помощью логических операторов AND, OR и NOT.

В вложенных таблицах можно также использовать операторы EXISTS и NOT EXISTS . Условие EXISTSоценивается как true , если вложенный запрос возвращает по крайней мере одну строку. Это полезно в случаях, когда вы хотите ограничить модель случаями, содержащими определенное значение в вложенной таблице: например, клиенты, которые приобрели элемент по крайней мере один раз.

Условие NOT EXISTSоценивается как true , если условие, указанное в подзапросе, не существует. Например, если вы хотите ограничить модель клиентам, которые никогда не приобрели определенный элемент.

Общий синтаксис сценария выглядит следующим образом:

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

фильтр
Содержит один или несколько предикатов, подключенных логическими операторами.

Список предикатов
Одно или несколько допустимых выражений фильтра, разделенных логическими операторами.

columnName
Название столбца структуры горнодобывающей промышленности.

логический оператор
И, ИЛИ, НЕТ

avPredicate
Выражение фильтра, которое можно применять только к скалярному столбцу структуры интеллектуального анализа данных. Выражение avPredicate можно использовать как в фильтрах модели, так и в вложенных фильтрах таблиц.

Выражение, использующее любой из следующих операторов, может применяться только к непрерывному столбцу. :

  • < (меньше)

  • > (больше чем)

  • >= (больше или равно)

  • <= (меньше или равно)

Замечание

Независимо от типа данных, эти операторы не могут применяться к столбцу с типом "Дискретный", "Дискретизированный" или "Ключ".

Выражение, использующее любой из следующих операторов, может применяться к непрерывному, дискретизованному, дискретизированному или ключевому столбцу:

  • = (равно)

  • != (не равно)

  • IS NULL

Если аргумент , avPredicate, применяется к дискретизированному столбцу, значение, используемое в фильтре, может быть любым значением в определенном контейнере.

Другими словами, вы не определяете условие как AgeDisc = '25-35', а вместо этого вычисляете, а затем используете значение из этого интервала.

Пример: AgeDisc = 27 означает любое значение в том же интервале, что и 27, что в данном случае — 25-35.

nestedTablePredicate
Выражение фильтра, применимое к вложенной таблице. Можно использовать только в фильтрах моделей.

Аргумент подзапроса аргумента nestedTablePredicate может применяться только к столбцу структуры интеллектуального анализа данных таблицы.

Вложенный запрос
Инструкция SELECT, за которой следует допустимый предикат или список предикатов.

Все предикаты должны иметь тип, описанный в avPredicates. Кроме того, предикаты могут ссылаться только на столбцы, включенные в текущую вложенную таблицу, определяемую аргументом columnName.

Ограничения синтаксиса фильтра

Следующие ограничения применяются к фильтрам:

  • Фильтр может содержать только простые предикаты. К ним относятся математические операторы, скаляры и имена столбцов.

  • Определяемые пользователем функции не поддерживаются в синтаксисе фильтра.

  • Операторы, не являющиеся логическими, например знаки "плюс" или "минус", не поддерживаются в синтаксисе фильтра.

Примеры фильтров

В следующих примерах демонстрируется использование фильтров, которые применяются к модели анализа данных. Если вы создаете выражение фильтра с помощью SQL Server Data Tools, в окне свойств и области выражений диалогового окна фильтра отображается только строка, которая отображается после ключевых слов WITH FILTER. Здесь включено определение структуры майнинга данных, чтобы упростить понимание типа столбца и его использования.

Пример 1. Типичная фильтрация на уровне случая

В этом примере показан простой фильтр, ограничивающий варианты, используемые в модели клиентами, чьи профессии архитектор и возраст которых превышает 30 лет.

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

Пример 2: Фильтрация на уровне случаев с помощью атрибутов вложенных таблиц

Если структура интеллектуального анализа данных содержит вложенные таблицы, можно фильтровать по существованию значения в вложенной таблице или фильтровать по вложенным строкам таблицы, содержащим определенное значение. Этот пример ограничивает случаи, используемые для модели клиентам в возрасте до 30 лет, которые сделали по крайней мере одну покупку, которая включала молоко.

Как показано в этом примере, фильтру не обязательно использовать только те столбцы, которые включены в модель. Вложенные табличные продукты являются частью структуры интеллектуального анализа данных, но не включаются в модель интеллектуального анализа данных. Однако можно по-прежнему фильтровать значения и атрибуты в вложенной таблице. Чтобы просмотреть сведения об этих случаях, необходимо включить детализацию.

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

Пример 3: Фильтрация по нескольким вложенным атрибутам таблицы на уровне кейса

В этом примере показан трехчастный фильтр: условие применяется к таблице кейсов, другое условие применяется к атрибуту во вложенной таблице, и еще одно условие применяется к определенному значению в одном из столбцов вложенной таблицы.

Первое условие в фильтре Age > 30применяется к столбцу в таблице вариантов. Остальные условия применяются к вложенной таблице.

Второе условие EXISTS (SELECT * FROM Products WHERE ProductName='Milk' проверяет наличие по крайней мере одной покупки в вложенной таблице, содержащей молоко. Третье условие, означает, Quantity>=2что клиент должен приобрести не менее двух единиц молока в одной транзакции.

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

Пример 4. Фильтрация на уровне кейса в отсутствии вложенных атрибутов таблицы

В этом примере показано, как ограничить случаи клиентам, которые не приобрели определенный элемент, отфильтровав отсутствие атрибута в вложенной таблице. В этом примере модель обучена с помощью клиентов старше 30 лет, которые никогда не купили молоко.

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

Пример 5. Фильтрация по нескольким вложенным табличным значениям

Цель примера — показать фильтрацию вложенных таблиц. Фильтр вложенной таблицы применяется после фильтра условий и ограничивает только строки вложенной таблицы.

Эта модель может содержать несколько случаев с пустыми вложенными таблицами, так как ПАРАМЕТР EXISTS не указан.

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  

Пример 6. Фильтрация по вложенным атрибутам таблицы и EXISTS

В этом примере фильтр в вложенной таблице ограничивает строки теми, которые содержат молоко или бутылку воды. Затем случаи в модели ограничены с помощью инструкции EXISTS . Это гарантирует, что вложенная таблица не пуста.

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

Пример 7. Сложные сочетания фильтров

Сценарий для этой модели похож на пример 4, но гораздо сложнее. Вложенная таблица ProductsOnSale имеет условие (OnSale) фильтра, которое означает, что значение OnSale должно иметь значение true для продукта, указанного в ProductName. Здесь OnSale — это столбец структуры.

Вторая часть фильтра для ProductsNotOnSale повторяет этот синтаксис, но фильтрует продукты, для которых значение OnSaleне имеет значения true(!OnSale).

Наконец, условия объединяются, а в таблицу вариантов добавляется одно дополнительное ограничение. Результатом является прогнозирование покупок продуктов в списке ProductsNotOnSale на основе случаев, включенных в список ProductsOnSale , для всех клиентов старше 25 лет.

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)

Пример 8. Фильтрация по датам

Входные столбцы можно фильтровать по датам, как и любые другие данные. Даты, содержащиеся в столбце типа даты и времени, являются непрерывными значениями; таким образом, можно указать диапазон дат с помощью таких операторов, как больше (>) или меньше (<). Если источник данных не представляет даты по типу непрерывных данных, но как дискретные или текстовые значения, нельзя фильтровать по диапазону дат, но указывать отдельные дискретные значения.

Однако невозможно создать фильтр в столбце даты в модели временных рядов, если столбец даты, используемый для фильтра, также является ключевым столбцом для модели. Это связано с тем, что в моделях временных рядов и моделях кластеризации последовательностей столбец дат может обрабатываться как тип KeyTime или KeySequence.

Если необходимо отфильтровать непрерывные даты в модели временных рядов, можно создать копию столбца в структуре данных анализа и отфильтровать модель на новом столбце.

Например, следующее выражение представляет фильтр для столбца даты типа Continuous , добавленного в модель прогнозирования.

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

Замечание

Обратите внимание, что любые дополнительные столбцы, добавляемые в модель, могут повлиять на результаты. Таким образом, если вы не хотите, чтобы столбец использовался в вычислениях серий, следует добавить столбец только в структуру интеллектуального анализа, а не в модель. Вы также можете задать флаг модели в столбце PredictOnly или игнорировать. Дополнительные сведения см. в разделе Флаги моделирования (интеллектуальный анализ данных).

Для других типов моделей можно использовать даты в качестве входных условий или критериев фильтрации так же, как и в любом другом столбце. Однако если необходимо использовать определенный уровень детализации, который не поддерживается типом непрерывных данных, можно создать производное значение в источнике данных с помощью выражений для извлечения единицы для использования в фильтрации и анализе.

Предупреждение

При указании дат в качестве критериев фильтрации необходимо использовать следующий формат, независимо от формата даты для текущей ОС: mm/dd/yyyy Любой другой формат приводит к ошибке.

Например, если вы хотите отфильтровать результаты центра обработки вызовов, чтобы отобразить только выходные дни, можно создать выражение в представлении источника данных, которое извлекает имя недели для каждой даты, а затем использовать это значение имени недели для ввода или в качестве дискретного значения в фильтрации. Просто помните, что повторяющиеся значения могут повлиять на модель, поэтому следует использовать только один из столбцов, а не столбец даты и производное значение.

См. также

Фильтры для моделей анализа данных (службы Analysis Services — интеллектуальный анализ данных)
Тестирование и проверка (интеллектуальный анализ данных)