Repositório com principais exemplos para MDX
Para exibir os valores de uma medida para combinações específicas de elementos de dimensões diferentes. É útil para criar tabelas e matrizes de dados. Exemplo:
SELECT
{[Product].[Category].[Electronics], [Product].[Subcategory].[Phones]} ON COLUMNS,
{[Measures].[SalesAmount]} ON ROWS
FROM [CubeName]
Para exibir todos os membros de uma hierarquia. Útil para listar todos os elementos disponíveis em uma dimensão. Exemplo:
SELECT
{[Customer].[City].Members} ON COLUMNS,
{[Measures].[Revenue]} ON ROWS
FROM [CubeName]
Para navegar pela hierarquia de uma dimensão e selecionar elementos específicos em diferentes níveis. Exemplo:
SELECT
{[Date].[Year].[2022].[Q2].[April], [Date].[Year].[2023].[Q1].[January]} ON COLUMNS,
{[Measures].[Sales]} ON ROWS
FROM [CubeName]
Para filtrar os resultados e excluir linhas ou colunas onde a medida não possui valor (NULL). Exemplo:
SELECT
{[Product].[Category].[Category].Members} ON COLUMNS,
{[Measures].[Sales]} ON ROWS
FROM [CubeName]
WHERE ([Measures].[Sales] <> NULL)
Para criar novas medidas com base em cálculos envolvendo medidas existentes ou membros. Exemplo:
WITH
MEMBER [Measures].[ProfitMargin] AS [Measures].[Profit] / [Measures].[Revenue]
SELECT
{[Product].[Category].[Electronics], [Product].[Subcategory].[Phones]} ON COLUMNS,
{[Measures].[ProfitMargin]} ON ROWS
FROM [CubeName]
Para criar novas medidas calculadas que não estão presentes no cubo, mas podem ser derivadas de medidas existentes. Exemplo:
CREATE MEMBER [Measures].[GrowthRate] AS
([Measures].[SalesThisYear] - [Measures].[SalesLastYear]) / [Measures].[SalesLastYear], FORMAT_STRING = 'Percent'
SELECT
{[Product].[Category].[Category].Members} ON COLUMNS,
{[Measures].[GrowthRate]} ON ROWS
FROM [CubeName]
Para criar conjuntos de membros que podem ser reutilizados em várias consultas. Exemplo:
CREATE SET [Top5Customers] AS
TopCount([Customer].[Customer].[Customer].Members, 5, [Measures].[Sales])
SELECT
{[Top5Customers]} ON COLUMNS,
{[Measures].[Sales]} ON ROWS
FROM [CubeName]
Para criar uma combinação de membros de diferentes hierarquias, criando uma tabela de todas as possíveis combinações. Exemplo:
SELECT
Crossjoin([Product].[Category].[Category].Members, [Date].[Month].[Month].Members) ON COLUMNS,
{[Measures].[Sales]} ON ROWS
FROM [CubeName]
Para organizar os membros em uma hierarquia específica. Exemplo:
SELECT
Hierarchize({[Product].[Category].Members, [Product].[Subcategory].Members}) ON COLUMNS,
{[Measures].[Sales]} ON ROWS
FROM [CubeName]
Para ordenar os membros de uma hierarquia com base em uma medida específica. Exemplo:
SELECT
{[Product].[Category].[Category].Members} ON COLUMNS,
{[Measures].[Sales]} ON ROWS
FROM [CubeName]
ORDER([Product].[Category].[Category].Members, [Measures].[Sales], BDESC)
Para filtrar membros com base em uma condição específica. Exemplo:
SELECT
{[Product].[Category].[Category].Members} ON COLUMNS,
{[Measures].[Sales]} ON ROWS
FROM [CubeName]
WHERE [Measures].[Sales] > 1000
Para exibir valores para períodos de tempo consecutivos. Exemplo:
SELECT
{[Date].[Month].[Month].&[2023]&[1], [Date].[Month].[Month].&[2023]&[2], [Date].[Month].[Month].&[2023]&[3]} ON COLUMNS,
{[Measures].[Revenue]} ON ROWS
FROM [CubeName]
Para exibir valores para períodos de tempo anteriores ou posteriores. Exemplo:
SELECT
{[Date].[Month].[Month].&[2023]&[7].PrevMember, [Date].[Month].[Month].&[2023]&[7]} ON COLUMNS,
{[Measures].[Sales]} ON ROWS
FROM [CubeName]
Para exibir valores para períodos de tempo correspondentes em anos diferentes. Exemplo:
SELECT
{[Date].[Month].[Month].&[2022], [Date].[Month].[Month].&[2023]} ON COLUMNS,
{[Measures].[Profit]} ON ROWS
FROM [CubeName]
Para exibir valores acumulados até uma determinada data. Exemplo:
SELECT
PeriodsToDate([Date].[Month].[Year].&[2023], [Date].[Month].[Month].&[2023]&[7]) ON COLUMNS,
{[Measures].[Sales]} ON ROWS
FROM [CubeName]
Para exibir valores deslocados na dimensão do tempo. Exemplo:
SELECT
{[Date].[Month].[Month].&[2023]&[7].Lag(1)} ON COLUMNS,
{[Measures].[Sales]} ON ROWS
FROM [CubeName]
SELECT
TopCount([Product].[Product].[Product].Members, 5, [Measures].[Sales]) ON COLUMNS,
{[Measures].[Sales]} ON ROWS
FROM [CubeName]
SELECT
BottomCount([Product].[Product].[Product].Members, 3, [Measures].[Sales]) ON COLUMNS,
{[Measures].[Sales]} ON ROWS
FROM [CubeName]
A função Rank é usada para atribuir um ranking com base em uma medida específica. Ela classifica os membros da dimensão com base no valor da medida. Exemplo:
WITH
MEMBER [Measures].[RankSales] AS
Rank([Product].[Product].CurrentMember, [Measures].[Sales])
SELECT
{[Product].[Product].Members} ON COLUMNS,
{[Measures].[Sales], [Measures].[RankSales]} ON ROWS
FROM [CubeName]
ORDER([Measures].[RankSales], BASC)
Neste exemplo, criamos uma nova medida chamada [RankSales], que atribui um ranking para cada produto com base nas vendas. Em seguida, ordenamos o resultado com base no ranking em ordem ascendente (BASC).
A função Count é usada para contar o número de elementos em um conjunto. É útil para exibir a contagem de membros em uma dimensão ou hierarquia. Exemplo:
SELECT
{[Product].[Category].[Category].Members} ON COLUMNS,
{[Measures].[Sales], [Measures].[Sales].COUNT} ON ROWS
FROM [CubeName]
Neste exemplo, estamos exibindo as categorias de produtos e a contagem de produtos em cada categoria (contagem de membros) junto com as vendas. A medida [Measures].[Sales].COUNT é usada para contar os membros da dimensão [Product].[Category].
Exibir os primeiros 3 produtos com maiores vendas:
SELECT
Head(Order([Product].[Product].[Product].Members, [Measures].[Sales], BDESC), 3) ON COLUMNS,
{[Measures].[Sales]} ON ROWS
FROM [CubeName]
Neste exemplo, a função Order é utilizada para ordenar os produtos em ordem descendente com base nas vendas. Em seguida, a função Head é aplicada para retornar os três primeiros produtos com maiores vendas.
Essa combinação de Order e Head é útil quando você deseja visualizar os primeiros elementos em um conjunto ordenado, como os principais produtos por vendas ou os principais clientes por lucro.
WITH
MEMBER [Measures].[VendasFormatadas] AS
Format([Measures].[Vendas], '0.00')
SELECT
{[Dimensao1].[Elemento1], [Dimensao2].[Elemento2]} ON COLUMNS,
{[Measures].[VendasFormatadas]} ON ROWS
FROM [CubeName]
WITH
MEMBER [Measures].[VendasFormatadas] AS
Format([Measures].[Vendas], '#,##0.00')
SELECT
{[Dimensao1].[Elemento1], [Dimensao2].[Elemento2]} ON COLUMNS,
{[Measures].[VendasFormatadas]} ON ROWS
FROM [CubeName]
Formatação de Dados Percentuais:
WITH
MEMBER [Measures].[TaxaDeConversaoFormatada] AS
Format([Measures].[TaxaDeConversao], '0.00%')
SELECT
{[Dimensao1].[Elemento1], [Dimensao2].[Elemento2]} ON COLUMNS,
{[Measures].[TaxaDeConversaoFormatada]} ON ROWS
FROM [CubeName]
WITH
MEMBER [DimensaoProduto].[Produto].[Produto].Properties('Caption') AS
UCase([DimensaoProduto].[Produto].CurrentMember.Member_Caption)
SELECT
{[DimensaoProduto].[Produto].[Produto].Members} ON COLUMNS,
{[Measures].[Vendas]} ON ROWS
FROM [CubeName]
WITH
MEMBER [DimensaoCliente].[Cliente].[Cliente].Properties('Caption') AS
LCase([DimensaoCliente].[Cliente].CurrentMember.Member_Caption)
SELECT
{[DimensaoCliente].[Cliente].[Cliente].Members} ON COLUMNS,
{[Measures].[Vendas]} ON ROWS
FROM [CubeName]
A análise de Pareto, também conhecida como "Princípio 80/20" ou "Regra 80/20", é um conceito que sugere que aproximadamente 80% dos efeitos vêm de 20% das causas. Essa ideia foi popularizada pelo economista italiano Vilfredo Pareto, que observou que a maioria da riqueza estava concentrada em uma minoria da população. O princípio de Pareto é amplamente aplicado em diversas áreas, incluindo negócios, economia, gerenciamento de projetos e análise de dados.
No código MDX fornecido, a análise classifica as marcas de produtos com base na margem de lucro e, em seguida, mostra as principais marcas que geram a maior parte do lucro. Através da medida de "Margem de Lucro Acumulada", é possível identificar quais marcas contribuem significativamente para o lucro total, e a medida "% Lucro Acumulado" mostra a proporção do lucro acumulado em relação ao total.
Essa é uma aplicação da análise de Pareto, pois a análise foca nas principais marcas (os 20%) que representam a maior parte do lucro (os 80%). Essa abordagem ajuda os gestores a identificar as áreas mais impactantes nos resultados financeiros e concentrar seus esforços nas marcas de maior relevância para otimizar o desempenho global do negócio.
WITH
SET [MARCAS] AS
ORDER([Produto].[Hierarquia de Produtos].[Nível Marca], [Measures].[Margem], BDESC)
MEMBER [Measures].[Margem por Marca] AS
'[Measures].[Margem]', FORMAT_STRING = "##,###.00"
MEMBER [Measures].[Posição no Rank] AS
'RANK([Produto].[Hierarquia de Produtos].CurrentMember, [MARCAS])', FORMAT_STRING = "#;#;-"
MEMBER [Measures].[% Lucro] AS
'[Measures].[Margem]/([Measures].[Margem], [Produto].[Hierarquia de Produtos].[All])', FORMAT_STRING = "#,###.00 %"
MEMBER [Measures].[Margem Acumulada] AS
'SUM(HEAD([MARCAS],[Measures].[Posição no Rank]),[Measures].[Margem])', FORMAT_STRING = "#,###.00"
MEMBER [Measures].[Total de Produtos] AS
'[MARCAS].Count', FORMAT_STRING = "#;#;-"
MEMBER [Measures].[% Número Produtos] AS
'[Measures].[Posição no Rank] / [Measures].[Total de Produtos]', FORMAT_STRING = "#,###.00 %"
MEMBER [Measures].[% Lucro Acumuladas] AS
'SUM(HEAD([MARCAS],[Measures].[Posição no Rank]),[Measures].[% Lucro] )', FORMAT_STRING = "#,###.00 %"
SELECT ({ [MARCAS] }) ON ROWS,
({ [Measures].[Margem por Marca]
, [Measures].[% Lucro Acumuladas]
, [Measures].[% Número Produtos]
}) ON COLUMNS
FROM [COMPLETO]
WHERE ([Tempo].[Ano].&[2014])
O código MDX fornecido é usado para realizar uma análise de margem de lucro, classificar os produtos por marca com base na margem de lucro, calcular algumas medidas relacionadas e, em seguida, filtrar os resultados para o ano de 2014.
Vamos analisar as partes do código e sua utilidade para o usuário:
SET [MARCAS]: Esta parte do código cria um conjunto chamado [MARCAS] que contém as marcas de produtos (nível "Marca") ordenadas em ordem descendente com base na medida [Margem]. Isso significa que as marcas serão classificadas da maior margem de lucro para a menor.
MEMBER [Measures].[Margem por Marca]: Esta é uma medida que calcula a margem de lucro para cada marca de produto. A medida é formatada para exibir duas casas decimais.
MEMBER [Measures].[Posição no Rank]: Esta medida utiliza a função RANK para atribuir uma posição de ranking para cada marca de produto com base na medida [Margem]. O formato da medida é definido para mostrar o número positivo caso o produto esteja no ranking e negativo caso não esteja no conjunto classificado.
MEMBER [Measures].[% Lucro]: Esta medida calcula o percentual de lucro para cada marca em relação ao total de lucro de todos os produtos. O formato da medida é definido para mostrar o resultado em formato de porcentagem com duas casas decimais.
MEMBER [Measures].[Margem Acumulada]: Essa medida calcula a margem de lucro acumulada para cada marca. Utiliza a função SUM para somar as margens de lucro das marcas no conjunto classificado até a posição atual do produto na classificação. O formato da medida é definido para mostrar duas casas decimais.
MEMBER [Measures].[Total de Produtos]: Essa medida simplesmente conta a quantidade de marcas de produtos no conjunto [MARCAS]. O formato da medida é definido para mostrar o número positivo.
MEMBER [Measures].[% Número Produtos]: Essa medida calcula o percentual da posição do produto no ranking em relação ao total de produtos no conjunto [MARCAS]. O formato da medida é definido para mostrar o resultado em formato de porcentagem com duas casas decimais.
MEMBER [Measures].[% Lucro Acumuladas]: Essa medida calcula o percentual de lucro acumulado para cada marca. Utiliza a função SUM para somar os percentuais de lucro das marcas no conjunto classificado até a posição atual do produto na classificação. O formato da medida é definido para mostrar o resultado em formato de porcentagem com duas casas decimais.
O comando SELECT é usado para visualizar os resultados. Ele apresentará os valores de margem por marca, o percentual de lucro acumulado, e o percentual da posição no ranking para cada marca, filtrando os resultados apenas para o ano de 2014.