DMX. Запросы
В предыдущем разделе был рассмотрен порядок обработки структур и моделей интеллектуального анализа данных. Следующая задача - это работа с данными и построение прогнозов. Для этого используется оператор SELECT.
SELECT в DMX очень напоминает аналогичный оператор в SQL, но надо понимать, что и перечень решаемых задач и особенности применения имеют существенные отличия.
При интеллектуальном анализе данных с помощью оператора SELECT можно решить следующие задачи:
- просмотр вариантов, загруженных в структуру интеллектуального анализа данных;
- просмотр содержимого существующей модели;
- создание прогнозов по существующей модели;
- создание копии существующей модели.
Для решения первых двух задач используется следующий формат записи оператора:
SELECT [FLATTENED] [TOP<n>] <selectlist> FROM <model/structure>[.aspect] [WHERE <condition expression>] [ORDER BY <expression>[DESC|ASC]]
Инструкция FLATTENED указывает на необходимость преобразования возвращаемых запросом SELECT результатов в "плоский" набор строк (т.е. преобразование к обычной таблице). Она используется, когда представление вариантов с вложенными таблицами в используемом по умолчанию иерархическом формате неприемлемо.
Инструкции ORDER BY и TOP<n> позволяют упорядочить возвращаемый набор по указанному параметру и вернуть только первые n значений. Это может быть полезно в сценариях вроде целевых рассылок, где результаты нужно отправлять только наиболее вероятным получателям. Для этого можно упорядочить результаты прогнозирующего запроса целевой рассылки по вероятности, а затем вернуть только верхние n результатов.
В список выбора <selectlist> могут входить ссылки на скалярные столбцы, прогнозирующие функции и выражения. Доступные параметры зависят от алгоритма и следующих условий:
- выполняется запрос к структуре или модели интеллектуального анализа;
- запрос выполняется к содержимому или к вариантам;
- источник данных является реляционной таблицей или кубом;
- делается ли прогнозирование.
Если вместо списка выбора стоит символ "*", то будут выбраны все столбцы из модели или структуры.
В списке выбора допустимо использовать псевдонимы и простые выражения. Например, ниже для всех присутствующих в модели MyModel вариантов (на это указывает ключевое слово CASES см.ниже) выводится идентификатор клиента и его имя и фамилия в виде одного столбца FullName:
SELECT [CustomerID], [Last Name] + ', ' + [FirstName] AS FullName FROM MyModel.CASES
Инструкция WHERE позволяет ограничить перечень возвращаемых результатов только теми, что соответствуют указанному логическому условию. Синтаксис будет следующий:
WHERE <condition expression>
Например:
SELECT [CustomerID], [Last Name] + ', ' + [FirstName] AS FullName FROM MyModel.CASES WHERE [CustomerID]>100
Детализация структуры
Рассмотрим теперь инструкцию FROM. Если в ней стоит <structure>.CASES, где <structure> - имя структуры интеллектуального анализа, то будут возвращаться варианты, использованные для создания структуры.Если детализация для структуры не включена, выполнение данной инструкции завершится сбоем. Но по умолчанию детализация включена. Явно указать, что мы хотим работать со структурой можно с помощью ключевых слов MINING STRUCTURE. Например, выбрать все варианты из структуры MyStr1с преобразованием результата в плоский набор строк можно выполнив команду:
SELECT FLATTENED * FROM MINING STRUCTURE MyStr1.CASES
Теперь вспомним о том, что при определении структуры могло быть задано секционирование вариантов на обучающий и проверочный набор. Чтобы узнать, к какому набору относится вариант, используются функции IsTestCase() и IsTrainingCase(), возвращающие истину для "проверочного" и "обучающего" варианта соответственно.
Ниже приведен пример получения списка столбцов [CustomerKey] ("ключ клиента"), Gender ("пол"), Age ("возраст") для вариантов, зарезервированных в проверочном наборе структуры [TargetedMailing] ("целевая рассылка"):
SELECT [Customer Key], Gender, Age FROM [Targeted Mailing].Cases WHEREIsTestCase()
Детализация модели
Аналогичным образом могут быть получены варианты из модели (проведена детализация модели). Формат оператора выглядит следующим образом:
SELECT [FLATTENED] [TOP <n>] <expression list> FROM <model>.CASES [WHERE <condition expression>][ORDER BY <expression> [DESC|ASC]]
Если детализация для модели интеллектуального анализа данных не включена, выполнение данной инструкции завершится ошибкой. Для расширений интеллектуального анализа данных активировать детализацию можно только при создании модели (с помощью инструкции WITHDRILLTHROUGH). В среде BIDevStudio можно добавить детализацию и в существующую модель, но прежде чем будет можно просматривать варианты, необходимо выполнить повторную обработку модели.
Если детализация включена как для модели, так и для структуры интеллектуального анализа данных, пользователи, являющиеся членами роли с разрешением на детализацию модели и структуры, могут обращаться к столбцам в структуре интеллектуального анализа данных, которые не включены в модель.
При использовании функции IsInNode в предложении WHERE выдаются только варианты, связанные с указанным узлом (номер узла задается в столбце NODE_UNIQUE_NAME, о нем см. ниже).
Ниже приведен пример, возвращающийвсе столбцы для всех вариантов, зарезервированных в проверочном наборе модели "Целевая рассылка"( [TM Decision Tree]).
SELECT * FROM [TM Decision Tree].Cases WHEREIsTestCase();
В следующем примере возвращаются только те варианты из обучающего набора, которые использовались в кластере 2 модели [TM_Clustering]. Узел кластера 2 имеет значение "002" в столбце NODE_UNIQUE_NAME, и оно указывается в качестве аргумента функции IsInNode. Кроме всех столбцов модели, возвращается и столбец структуры [CustomerKey], который не входил в модель интеллектуального анализа данных. Этому столбцу присваивается псевдоним CustomerID. Делается это с помощью функции StructureColumn. Имя столбца структуры передается как строковое значение, поэтому его следует заключать в кавычки.
SELECT StructureColumn('Customer Key') AS CustomerID, * FROM [TM_Clustering].Cases WHERE IsTrainingCase() AND IsInNode('002')
Запрос значений столбца
Ниже приведен синтаксис оператора, позволяющего получить значения указанных столбцов модели.
SELECT [FLATTENED] DISTINCT [TOP <n>] <expression list> FROM <model> [WHERE <condition list>][ORDER BY <expression>]
При этом для дискретного столбца будут введены все возможные значения, для непрерывного - среднее значение, для дискретизованного - среднее значение для каждого из определённых в процессе дискретизации интервалов.
Рассмотрим два примера. В первом будут выведены все значения дискретного столбца Gender (Пол) модели [TMDecisionTree].
SELECT DISTINCT [Gender] FROM [TM Decision Tree]
Возможный результат выполнения запроса:
Во втором примере для столбца Age (возраст), определенного как непрерывный, будет выведено среднее значение, а также с помощью функций RangeMin и RangeMax соответственно минимальный и максимальный возраст.
SELECT DISTINCT [Age] AS [Midpoint Age], RangeMin([Age]) AS [Minimum Age], RangeMax([Age]) AS [Maximum Age] FROM [TMDecisionTree]
Возможный результат выполнения запроса:
Запрос содержимого модели
Оператор SELECT может не только возвратить используемые моделью варианты, но и вывести ее содержимое. Для этого используется синтаксис
SELECT [FLATTENED] [TOP <n>] <expression list> FROM <model>.CONTENT [WHERE <condition expression>] [ORDER BY <expression> [DESC|ASC]]
Аргументы команды были уже рассмотрены выше, сейчас важно понять, что же возвратит запрос. Столбцы, составляющие содержимое модели интеллектуального анализа перечислены в таблице 11.1 [12]. А интерпретация их значений может несколько меняться в зависимости от используемого моделью алгоритма.
Столбец набора строк CONTENT | Описание |
---|---|
MODEL_CATALOG | Имя каталога. Имеет значение NULL, если поставщик не поддерживает каталоги. |
MODEL_SCHEMA | Свободное имя схемы. Имеет значение NULL, если поставщик не поддерживает схемы. |
MODEL_NAME | Имя модели. Этот столбец не может содержать значение NULL. |
ATTRIBUTE_NAME | Имя атрибута, соответствующего этому узлу. |
NODE_NAME | Имя узла. |
NODE_UNIQUE_NAME | Уникальное имя узла внутри модели. |
NODE_TYPE | Целое число, представляющее тип узла. |
NODE_GUID | Идентификатор GUID узла. Имеет значение NULL, если идентификатор GUID отсутствует. |
NODE_CAPTION | Метка или заголовок, связанный с узлом. В основном используется в целях отображения. Если заголовка не существует, возвращается значение NODE_NAME. |
CHILDREN_CARDINALITY | Количество имеющихся у узла потомков. |
PARENT_UNIQUE_NAME | Уникальное имя родителя узла. |
NODE_DESCRIPTION | Описание узла. |
NODE_RULE | XML-фрагмент, представляющий внедренное в узел правило. Формат XML-строки основывается на стандарте PMML. |
MARGINAL_RULE | XML-фрагмент, описывающий маршрут от родителя к узлу. |
NODE_PROBABILITY | Вероятность маршрута, который завершается в узле. |
MARGINAL_PROBABILITY | Вероятность доступа к узлу от родительского узла. |
NODE_DISTRIBUTION | Таблица, которая содержит статистические данные, описывающие распределение значений в узле. |
NODE_SUPPORT | Количество вариантов, поддерживающих этот узел. |
Следующий пример позволяет просмотреть перечень узлов модели [TM DecisionTree], где число поддерживающих узел вариантов больше 2. Считаем, что модель основана на алгоритме дерева принятия решений.
SELECT NODE_UNIQUE_NAMEFROM [TMDecisionTree].CONTENT WHERE NODE_SUPPORT >2