Funcionalidade de cliente do ADOMD.NET
O ADOMD.NET, assim como com outros provedores de dados do Microsoft .NET Framework, serve como uma ponte entre um aplicativo e uma fonte de dados. No entanto, ao contrário de outros provedores de dados do .NET Framework, o ADOMD.NET trabalha com dados analíticos. Para isso, o ADOMD.NET dá suporte à funcionalidade que é muito diferente de outros provedores de dados do .NET Framework. O ADOMD.NET não só permite que você recupere dados, como permite a recuperação de metadados e a alteração da estrutura do armazenamento de dados analíticos:
Recuperando metadados
Os aplicativos podem aprender mais sobre os dados que podem ser recuperados da fonte de dados por meio da recuperação de metadados, usando conjunto de linhas do esquema ou o modelo de objeto. As informações como os tipos de cada KPI (indicador chave de desempenho) disponíveis, as dimensões de um cubo e os parâmetros necessários aos modelos de mineração são descobríveis. Os metadados são muito importantes para aplicativos dinâmicos que exigem entrada do usuário para a determinação do tipo, da profundidade e do escopo de dados serem recuperados. Exemplos incluem o Analisador de Consultas, o Microsoft Excel e outras ferramentas de consulta. Os metadados são menos críticos para aplicativos estáticos que executam um conjunto predefinido de ações.Para obter mais informações: Recuperando metadados de uma fonte de dados analítica.
Recuperando dados
A recuperação de dados é a recuperação real das informações armazenadas na fonte de dados. A recuperação de dados é a principal função de aplicativos "estáticos", que conhecem a estrutura da fonte de dados. A recuperação de dados também é o resultado final dos aplicativos "dinâmicos". O valor do KPI em um determinado momento do dia, o número de bicicletas vendidas na última hora para cada loja e os fatores que governam o desempenho anual dos funcionários são exemplos de dados que podem ser recuperados. A recuperação de dados é vital para qualquer aplicativo de consulta.Para obter mais informações: Recuperando dados de uma fonte de dados analítica.
Alterando a estrutura de dados analíticos
O ADOMD.NET também pode ser usado para alterar a estrutura do armazenamento de dados analíticos. Embora normalmente isso seja feito por meio do modelo de objeto do AMO (Objetos de Gerenciamento de Análise), você pode usar o ADOMD.NET para enviar comandos ASSL (Analysis Services Scripting Language) para criar, alterar ou excluir objetos no servidor.Para obter mais informações: Executando comandos em uma fonte de dados analítica, Objetos de Gerenciamento de Análise (AMO), Referência do ASSL (Analysis Services Scripting Language)
A recuperação de metadados, a recuperação de dados e a alteração da estrutura de dados podem ocorrer em um ponto específico do fluxo de trabalho de um aplicativo ADOMD.NET típico.
Fluxo de processo típico
Os aplicativos ADOMD.NET tradicionais normalmente seguem o mesmo fluxo de trabalho ao trabalharem com um banco de dados analítico:
Primeiro, uma conexão é feita ao banco de dados, usando o objeto AdomdConnection. Quando você abre a conexão, o objeto AdomdConnection exibe metadados sobre o servidor ao qual se conectou. Em um aplicativo dinâmico, algumas dessas informações são normalmente mostradas ao usuário para que ele possa fazer uma escolha, como que cubo será consultado. A conexão criada durante esta etapa poderá ser reutilizada várias vezes pelo aplicativo, reduzindo a sobrecarga.
Para obter mais informações: Estabelecendo conexões no ADOMD.NET
Depois que uma conexão foi estabelecida, um aplicativo dinâmico consulta o servidor para obter metadados mais específicos. Para um aplicativo estático, o programador sabe com antecedência que objetos serão consultados pelo aplicativo e não precisará recuperar esses metadados. Os metadados recuperados podem ser usados pelo aplicativo e pelo usuário na próxima etapa.
Para obter mais informações: Recuperando metadados de uma fonte de dados analítica
Em seguida, o aplicativo executa um comando no servidor. Esse comando pode ser para fins de recuperação de metadados adicionais, para recuperação de dados ou para a modificação da estrutura do banco de dados. Para qualquer uma dessas tarefas, o aplicativo poderia usar uma consulta determinada previamente ou utilizar metadados recém-recuperados para criar consultas adicionais.
Para obter mais informações: Recuperando metadados de uma fonte de dados analítica, Recuperando dados de uma fonte de dados analítica, Executando comandos em uma fonte de dados analítica
Depois que o comando é enviado ao servidor, o servidor começa a retornar os metadados ou os dados para o cliente. Essas informações podem ser exibida por meio de um objeto CellSet, de um objeto AdomdDataReader ou de um objeto System.XmlReader.
Para ilustrar esse fluxo de trabalho tradicional, o exemplo a seguir contém um método que abre uma conexão ao banco de dados, executa um comando em um cubo conhecido e recupera os resultados em um conjunto de células. O conjunto de células retorna uma cadeia de caracteres delimitada por tabulações que contém cabeçalhos de coluna, cabeçalhos de linha e dados de célula.
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
}