Como criar consultas MDX em R usando olapR
Aplica-se a: SQL Server 2016 (13.x) e versões posteriores
O pacote olapR no Serviços de Machine Learning do SQL Server dá suporte a consultas MDX em cubos hospedados no SQL Server Analysis Services. Você pode criar uma consulta com relação a um cubo existente, explorar dimensões e outros objetos de cubo e colar em consultas MDX existentes para recuperar dados.
Este artigo descreve os dois principais usos do pacote olapR:
- Criar uma consulta MDX usando R com os construtores fornecidos no pacote olapR
- Executar uma consulta MDX válida existente usando olapR e um provedor OLAP
Não há suporte para as operações a seguir:
- Consultas DAX em um modelo de tabela
- Criação de novos objetos OLAP
- Write-back para partições, incluindo medidas ou somas
Criar uma consulta MDX usando o R
Defina uma cadeia de conexão que especifica a fonte de dados OLAP (instância do SSAS) e o provedor MSOLAP.
Use a função
OlapConnection(connectionString)
para criar um identificador para a consulta MDX e transmitir a cadeia de conexão.Use o construtor
Query()
para instanciar um objeto de consulta.Use as seguintes funções auxiliares para fornecer mais detalhes sobre as dimensões e medidas a serem incluídas na consulta MDX:
cube()
Especifique o nome do banco de dados de SSAS. Se você estiver se conectando a uma instância nomeada, forneça o nome do computador e o nome da instância.columns()
Forneça os nomes das medidas a serem usadas no argumento ON COLUMNS.rows()
Forneça os nomes de medidas para usar no argumento ON ROWS.slicers()
Especifique um campo ou membros para usar como uma segmentação de dados. Uma segmentação de dados é como um filtro que é aplicado a todos os dados da consulta MDX.axis()
Especifique o nome de um eixo adicional para usar na consulta.Um cubo OLAP pode conter até 128 eixos de consulta. Em geral, os primeiros quatro eixos são denominados Colunas, Linhas, Páginas e Capítulos.
Se sua consulta for relativamente simples, você poderá usar as funções
columns
,rows
, etc. para criar a consulta. No entanto, você também pode usar a funçãoaxis()
com um valor de índice diferente de zero para criar uma consulta MDX com muitos qualificadores, ou para adicionar dimensões extras como qualificadores.
Passe o identificador e a consulta MDX concluída para uma das funções a seguir, dependendo da forma dos resultados:
executeMD
Retorna uma matriz multidimensionalexecute2D
Retorna um quadro de dados (tabular) bidimensional
Executar uma consulta MDX válida do R
Defina uma cadeia de conexão que especifica a fonte de dados OLAP (instância do SSAS) e o provedor MSOLAP.
Use a função
OlapConnection(connectionString)
para criar um identificador para a consulta MDX e transmitir a cadeia de conexão.Defina uma variável de R para armazenar o texto da consulta MDX.
Transmita o identificador e a variável que contendo a consulta MDX para as funções
executeMD
ouexecute2D
, dependendo da forma dos resultados.executeMD
Retorna uma matriz multidimensionalexecute2D
Retorna um quadro de dados (tabular) bidimensional
Exemplos
Os exemplos a seguir baseiam-se no data mart AdventureWorks e no projeto de cubo, pois esse projeto está amplamente disponível, em diversas versões, incluindo arquivos de backup que podem ser facilmente restaurados para o Analysis Services. Se você não tiver um cubo, obtenha um exemplo de cubo usando uma destas opções:
Crie o cubo que é usado nestes exemplos seguindo o tutorial do Analysis Services até a Lição 4: Como criar um cubo OLAP
Baixe um cubo existente como um backup e restaurá-lo em uma instância do Analysis Services. Por exemplo, este site fornece um cubo totalmente processado no formato compactado: Modelo multidimensional da Adventure Works SQL 2014. Extraia o arquivo e restaure-o para sua instância do SSAS. Para obter mais informações, confira Backup e restauraçãoou Cmdlet Restore-ASDatabase.
1. MDX básica com segmentação de dados
Essa consulta MDX seleciona as medidas para a contagem e o valor da contagem de vendas pela Internet e o valor das vendas e as coloca no eixo das Colunas. Ela adiciona um membro da dimensão SalesTerritory como uma segmentação de dadospara filtrar a consulta de modo que somente as vendas da Austrália sejam usadas nos cálculos.
SELECT {[Measures].[Internet Sales Count], [Measures].[InternetSales-Sales Amount]} ON COLUMNS,
{[Product].[Product Line].[Product Line].MEMBERS} ON ROWS
FROM [Analysis Services Tutorial]
WHERE [Sales Territory].[Sales Territory Country].[Australia]
- Nas colunas, você pode especificar várias medidas como elementos de uma cadeia de caracteres separada por vírgulas.
- O eixo Linha usa todos os valores possíveis (todos os MEMBROS) da dimensão "Linha de produto".
- Essa consulta retornará uma tabela com três colunas contendo um resumo de valor acumulado de vendas pela Internet de todos os países/regiões.
- A cláusula WHERE especifica o eixo de segmentação. Neste exemplo, a segmentação usa um membro da dimensão SalesTerritory para filtrar a consulta de modo que somente as vendas da Austrália sejam usadas nos cálculos.
Para criar essa consulta usando as funções fornecidas em olapR
cnnstr <- "Data Source=localhost; Provider=MSOLAP; initial catalog=Analysis Services Tutorial"
ocs <- OlapConnection(cnnstr)
qry <- Query()
cube(qry) <- "[Analysis Services Tutorial]"
columns(qry) <- c("[Measures].[Internet Sales Count]", "[Measures].[Internet Sales-Sales Amount]")
rows(qry) <- c("[Product].[Product Line].[Product Line].MEMBERS")
slicers(qry) <- c("[Sales Territory].[Sales Territory Country].[Australia]")
result1 <- executeMD(ocs, qry)
Para uma instância nomeada, escape quaisquer caracteres que possam ser considerados caracteres de controle no R. Por exemplo, a cadeia de conexão a seguir faz referência a uma instância OLAP01 em um servidor chamado ContosoHQ:
cnnstr <- "Data Source=ContosoHQ\\OLAP01; Provider=MSOLAP; initial catalog=Analysis Services Tutorial"
Para executar essa consulta como uma cadeia de caracteres MDX predefinida
cnnstr <- "Data Source=localhost; Provider=MSOLAP; initial catalog=Analysis Services Tutorial"
ocs <- OlapConnection(cnnstr)
mdx <- "SELECT {[Measures].[Internet Sales Count], [Measures].[InternetSales-Sales Amount]} ON COLUMNS, {[Product].[Product Line].[Product Line].MEMBERS} ON ROWS FROM [Analysis Services Tutorial] WHERE [Sales Territory].[Sales Territory Country].[Australia]"
result2 <- execute2D(ocs, mdx)
Se você definir uma consulta usando o construtor MDX no SQL Server Management Studio e, em seguida, salvar a cadeia de caracteres MDX, ele numerará os eixos começando em 0, conforme mostrado aqui:
SELECT {[Measures].[Internet Sales Count], [Measures].[Internet Sales-Sales Amount]} ON AXIS(0),
{[Product].[Product Line].[Product Line].MEMBERS} ON AXIS(1)
FROM [Analysis Services Tutorial]
WHERE [Sales Territory].[Sales Territory Countr,y].[Australia]
Você ainda pode executar essa consulta como uma cadeia de caracteres MDX predefinida. No entanto, para criar a mesma consulta usando o R com a função axis()
, renumere os eixos começando em 1.
2. Explore os cubos e seus campos em uma instância do SSAS
Você pode usar a função explore
para retornar uma lista de cubos, dimensões ou membros para usar na construção de sua consulta. Isso é útil se você não tiver acesso a outras ferramentas de procura em OLAP ou se você quiser manipular programaticamente ou construir a consulta MDX.
Para listar os cubos disponíveis na conexão especificada
Para exibir todos os cubos ou perspectivas na instância que você tem permissão para exibir, forneça o identificador como um argumento para explore
.
Importante
O resultado final não é um cubo; TRUE indica apenas que a operação de metadados foi bem-sucedida. Um erro será gerado se os argumentos forem inválidos.
cnnstr <- "Data Source=localhost; Provider=MSOLAP; initial catalog=Analysis Services Tutorial"
ocs <- OlapConnection(cnnstr)
explore(ocs)
Resultados |
---|
Tutorial do Analysis Services |
Vendas pela Internet |
Vendas do revendedor |
Resumo de vendas |
[1] TRUE |
Para obter uma lista de dimensões do cubo
Para exibir todas as dimensões no cubo ou perspectiva, especifique o nome do cubo ou da perspectiva.
cnnstr <- "Data Source=localhost; Provider=MSOLAP; initial catalog=Analysis Services Tutorial"
ocs \<- OlapConnection(cnnstr)
explore(ocs, "Sales")
Resultados |
---|
Cliente |
Data |
Região |
Para retornar todos os membros da dimensão e hierarquia especificada
Depois de definir a fonte e criar o identificador, especifique o cubo, a dimensão e a hierarquia a serem retornados. Nos resultados retornados, itens que têm prefixo -> representam os filhos do membro anterior.
cnnstr <- "Data Source=localhost; Provider=MSOLAP; initial catalog=Analysis Services Tutorial"
ocs <- OlapConnection(cnnstr)
explore(ocs, "Analysis Services Tutorial", "Product", "Product Categories", "Category")
Resultados |
---|
Acessórios |
Bikes |
Clothing |
Componentes |
-> Componentes do assembly |
-> Componentes do assembly |