Работа с моделями интеллектуального анализа данных из SQLServerManagementStudio
SQLServer Management Studio, в первую очередь, рассматривается как средство создания и администрирования реляционных баз данных. В то же время, при хорошем знании языка DMX некоторые задачи, связанные проведением интеллектуального анализа данных можно быстро решить из этой среды.
Для начала работы, после запуска ManagementStudio, надо подключиться к аналитическим службам SQLServer ( рис. 31.1). Для этого в выпадающем списке ServerType надо выбрать AnalysisServer, а в поле ServerName ввести имя сервера ("local", если вы подключаетесь к неименованному экземпляру, SQLServer установленному на том же компьютере, где запущена ManagementStudio).
После подключения можно просмотреть имеющиеся базы аналитических служб и создавать новые, а также создавать запросы, выполнять резервное копирование, восстановление и т.д. Рассмотрим создание новой модели с помощью запроса DMX.
В контекстном меню для выбранной базы данных найдите NewQuery->DMX ( рис. 31.2). Будет открыто новое окно, куда надо ввести тест запроса ( рис. 31.3). Обратите внимание на то, чтобы на панели инструментов в выпадающем списке с названием базы данных была указана именно та база, в которой вы хотите создать модель. Выполним следующий запрос
CREATEMININGMODEL vTM1_NB ( [Customer Key] LONGKEY, [Age] LONGDISCRETIZED, [Number Cars Owned] LONGDISCRETE, [Bike Buyer] LONGDISCRETEPREDICT_ONLY) USINGMicrosoft_Naive_Bayes
Приведенный выше фрагмент кода создает структуру и модель интеллектуального анализа для прогнозирования атрибута [BikeBuyer] на основе атрибутов [Age] и [NumberCarsOwned]. Подобную модель можно обучить на уже известных нам данных из базы AdventureWorksDW. Учитывая то, что мы не создавали структуру интеллектуального анализа, а воспользовались оператором CREATEMININGMODEL имя созданной структуры будет формироваться как <имямодели>_Structure ( рис. 31.4). Кстати. Если нам понадобится скрипт, создающий такой же объект, как уже имеется в базе данных, его можно получить как показано на рис. 31.5. Правда, получим мы не код на DMX, а описание в формате XMLA. Созданный скрипт можно изменить, выполнить для другой базы, сохранить и т.д.
увеличить изображение
Рис. 31.5. Генерация скрипта на основе существующего объекта (структуры или модели)
Но вернемся к работе с моделью интеллектуального анализа данных. После создания ее надо обработать, загрузив в нее данные. Делается это с помощью оператора INSERT INTO. Среда ManagementStudio облегчает написание запроса, т.к. название объектов и атрибутов можно просто перетаскивать мышью из окна ObjectExplorer.
INSERTINTOMININGMODEL [vTM1_NB] ([Customer Key], [Age], [Number Cars Owned], [Bike Buyer]) OPENQUERY([Adventure Works DW],'Select CustomerKey, Age, [NumberCarsOwned], [BikeBuyer] FROM [vTargetMail]')
Обратите внимание, что в предложении OPENQUERY мы используем созданный в ходе "Начало работы в BIDevStudio" источник данных [AdventureWorks DW].
После обработки, щелкнув правой клавишей мыши на модели в окне ObjectExplorer, можно из контекстного меню выбрать опцию Browse и просмотреть модель, аналогично тому, как это делалось в BIDevStudio( рис. 31.6).
Теперь, когда модель обработана, можно написать прогнозирующий запрос. Сначала узнаем, станет ли покупателем велосипеда клиент в возрасте 36 лет, имеющий 1 автомобиль. Нас интересует прогноз, т.е. значение атрибута BikeBuyer и оценка вероятности для этого прогноза. Код запроса выглядит следующим образом
SELECTPredict([Bike Buyer]) as Result, PredictProbability([Bike Buyer]) as ResultProbability FROM [vTM1_NB] NATURALPREDICTIONJOIN (SELECT 36 as [Age], 1 as [Number Cars Owned]) as t
Его выполнение приведет к выводу результата для BikeBuyer и оценки вероятности (обратите внимание, чтобы запрос бы выполнен в отношении нужной базы).
Ну и в заключении рассмотрим как выполнить прогнозирующий запрос для множества строк одновременно. Пусть нам нужны прогнозы для первых 10 клиентов из таблицы DimCustomer базы AdventureWorksDW. При этом, нас интересуют только те клиенты, которые есть в представлении vDMPrep. Нужный нам для предсказания параметр "возраст клиента" мы также берем из этого представления. Запрос на SQL будет выглядеть следующим образом:
SELECTDISTINCTTOP 10 dbo.DimCustomer.CustomerKey, dbo.DimCustomer.FirstName, dbo.DimCustomer.LastName, dbo.vDMPrep.Age, dbo.DimCustomer.[NumberCarsOwned] FROM dbo.DimCustomer INNER JOIN dbo.vDMPrep ON dbo.DimCustomer.CustomerKey=dbo.vDMPrep.CustomerKey ORDER BY dbo.DimCustomer.CustomerKey
Прогнозирующий запрос на DMX приведен ниже, а результат его выполнения представлен на рис. 31.7.
SELECT t.CustomerKey, t.FirstName, t.LastName, Predict([Bike Buyer]) as Result, PredictProbability([Bike Buyer]) as ResultProbability FROM [vTM1_NB] PREDICTIONJOIN OPENQUERY([Adventure Works DW], 'SELECT DISTINCT TOP 10 dbo.DimCustomer.CustomerKey, dbo.DimCustomer.FirstName, dbo.DimCustomer.LastName, dbo.vDMPrep.Age, dbo.DimCustomer.[NumberCarsOwned] FROM dbo.DimCustomer INNER JOIN dbo.vDMPrep ON dbo.DimCustomer.CustomerKey= dbo.vDMPrep.CustomerKey ORDER BY dbo.DimCustomer.CustomerKey') as t ON [vTM1_NB].[Age]=t.[Age] AND [vTM1_NB].[Number Cars Owned]=t.[NumberCarsOwned]