Функциональные возможности клиента ADOMD.NET
Как и в случае с поставщиками данных платформы Microsoft .NET Framework, ADOMD.NET выступает в качестве моста между приложением и источником данных. Однако ADOMD.NET отличается от остальных поставщиком данных платформы .NET Framework тем, что он работает с аналитическими данными. Чтобы работать с аналитическими данными, компонент ADOMD.NET обладает функциями, которые значительно отличаются от функций других поставщиков данных платформы .NET Framework. ADOMD.NET позволяет не только получать данные, но и метаданные, а также изменять структуру источника аналитических данных.
Получение метаданных
Получив метаданных при помощи наборов строк схемы или модели объекта, приложения могут узнать больше о тех данных, которые можно извлечь из источника данных. Получить можно такие сведения, как типы доступных ключевых индикаторов производительности, измерения в кубе и параметры, которые требуются модели интеллектуального анализа данных. Наибольшее значение метаданные имеют для динамических приложений, которым для определения типа, глубины и области действия получаемых данных требуется ввод пользователя. Среди таких приложений Query Analyzer, Microsoft Excel и другие средства запросов. Метаданные менее значимы для статических приложений, выполняющих набор стандартных действий.Дополнительные сведения см. в разделе Получение метаданных из источника аналитических данных.
Получение данных
Получение данных — это фактическое извлечение сведений, хранящихся в источнике данных. Получение данных является основной функцией «статических» приложений, которым известна структура источника данных. Получение данных также является конечным результатом «динамических» приложений. Значение ключевого индикатора производительности в данное время суток, число велосипедов, проданных за последний час по каждому магазину и факторы, влияющие на среднегодовую производительность сотрудников — все это примеры данных, которые можно получить. Получение данных важно для любого выполняющего запросы приложения.Дополнительные сведения см. в разделе Получение данных из источника аналитических данных.
Изменение структуры аналитических данных
Компонент ADOMD.NET также можно использовать, чтобы фактически изменять структуру хранилища аналитических данных. И хотя обычно это делается с помощью модели объектов AMO, компонент ADOMD.NET можно использовать для отправки команд на языке сценариев служб Analysis Services (язык ASSL), чтобы создавать, изменять или удалять объекты на сервере.Дополнительные сведения см. в разделе Выполнение команд в источнике аналитических данных, Объекты AMO, Справочник по языку ASSL
Извлечение метаданных, извлечение данных и изменение структуры данных происходит в определенной точке потока операций обычного приложения ADOMD.NET.
Стандартная последовательность операций
При работе с аналитической базой данных стандартные приложения ADOMD.NET обычно выполняют одну и ту же последовательность операций:
Сначала при помощи объекта AdomdConnection устанавливается соединение с базой данных. При открытии соединения объект AdomdConnection выдает метаданные о том сервере, с которым установлено соединение. В динамических приложениях часть этих сведений обычно показывается пользователю с тем, чтобы он мог выбрать, например, к какому кубу выполнять запрос. Приложение может использовать соединение, созданное на этом этапе, повторно, что сокращает издержки.
Дополнительные сведения см. в разделе Установление соединений в ADOMD.NET
После установления соединения динамическое приложение отправляет на сервер запрос о более конкретных метаданных. В случае статического приложения программист заранее знает, запросы к каким объектам будет выполнять приложение, в силу чего получать эти метаданные не требуется. Приложение или пользователь смогут использовать метаданные, которые будут получены, в следующем шаге.
Дополнительные сведения см. в разделе Получение метаданных из источника аналитических данных
Теперь приложение выполняет команду на сервере. Целью выполнения команды может быть получение дополнительных метаданных, получение данных или изменение структуры базы данных. Для любой из этих задач приложение может использовать ранее определенный запрос, либо создать дополнительные запросы, воспользовавшись только что полученными данными.
Дополнительные сведения см. в разделе Получение метаданных из источника аналитических данных, Получение данных из источника аналитических данных, Выполнение команд в источнике аналитических данных
Получив команду, сервер начинает возвращать клиенту метаданные или данные. Просмотреть эти сведения можно при помощи объекта CellSet, объекта AdomdDataReader или объекта System.XmlReader.
В следующем примере, чтобы проиллюстрировать этот стандартный поток операций, содержится метод, который открывает соединение с базой данных, выполняет команду в известном кубе и извлекает результаты в набор ячеек. Затем набор ячеек возвращает строку, разделенную знаками табуляции, которая содержит заголовки столбцов, заголовки строк и данные ячеек.
string ReturnCommandUsingCellSet()
{
//Create a new string builder to store the results
System.Text.StringBuilder result = new System.Text.StringBuilder();
//Connect to the local server
using (AdomdConnection conn = new AdomdConnection("Data Source=localhost;"))
{
conn.Open();
//Create a command, using this connection
AdomdCommand cmd = conn.CreateCommand();
cmd.CommandText = @"
WITH MEMBER [Measures].[FreightCostPerOrder] AS
[Measures].[Reseller Freight Cost]/[Measures].[Reseller Order Quantity],
FORMAT_STRING = 'Currency'
SELECT
[Geography].[Geography].[Country].&[United States].Children ON ROWS,
[Date].[Calendar].[Calendar Year] ON COLUMNS
FROM [Adventure Works]
WHERE [Measures].[FreightCostPerOrder]";
//Execute the query, returning a cellset
CellSet cs = cmd.ExecuteCellSet();
//Output the column captions from the first axis
//Note that this procedure assumes a single member exists per column.
result.Append("\t");
TupleCollection tuplesOnColumns = cs.Axes[0].Set.Tuples;
foreach (Tuple column in tuplesOnColumns)
{
result.Append(column.Members[0].Caption + "\t");
}
result.AppendLine();
//Output the row captions from the second axis and cell data
//Note that this procedure assumes a two-dimensional cellset
TupleCollection tuplesOnRows = cs.Axes[1].Set.Tuples;
for (int row = 0; row < tuplesOnRows.Count; row++)
{
result.Append(tuplesOnRows[row].Members[0].Caption + "\t");
for (int col = 0; col < tuplesOnColumns.Count; col++)
{
result.Append(cs.Cells[col, row].FormattedValue + "\t");
}
result.AppendLine();
}
conn.Close();
return result.ToString();
} // using connection
}