Синтаксис фильтрации моделей и примеры (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. Условие true принимает значение EXISTS, если подзапрос возвращает хотя бы одну строку. Это условие позволяет ограничить модель вариантами, содержащими определенное значение в вложенной таблице, например клиентов, которые приобрели элемент по крайней мере один раз.

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

Ниже приведен общий синтаксис:

<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 можно использовать как в фильтрах модели, так и в вложенных фильтрах таблиц.

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

  • < (меньше)

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

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

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

Замечание

Независимо от типа данных, не применяйте эти операторы к столбцам типа DiscreteилиDiscretizedKey.

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

  • = (равно)

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

  • IS NULL

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

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

Например, AgeDisc = 27 представляет любое значение в том же интервале, что и 27, что и 25–35 в этом примере.

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

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

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

Используйте только avPredicate предикаты. Каждый предикат может ссылаться только на столбцы в текущей вложенной таблице, определяемой 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 лет, которые сделали по крайней мере одну покупку, которая включала молоко.

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

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 использует тот же синтаксис, но фильтрует товары, для которых значение false равно (!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.

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

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

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

Замечание

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

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

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

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

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

См. также

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