Olá,
Quero criar uma métrica chamada Total Effect para fazer um relatório e estou com muitas dificuldades.
Estou fazendo as seguintes métricas qua avaliam a mudança no faturamento (sempre falando de dados YTD):
Price Effect = (Avg Price YTD 2009 - Avg Price YTD 2008) * Sales Quantity YTD 2009
Quantity Effect = (Sales Quantity YTD 2009 - Sales Quantity YTD 2008) * Avg Price YTD 2008
Mix Effect = Esse é dificil. Corresponde ao valor da mudança de % de participação em quantidade * Avg Price YTD 2008
Elas só são válidas como cálculo para o nivel MES - CLIENTE - PRODUTO mas o relatório final vai ser MES - CLIENTE ou MES - PRODUTO.
Eu consegui fazer no AS as métricas funcionarem para um relatório MES - CLIENTE - PRODUTO, mas quando mudo para MES - CLIENTE ou MES - PRODUTO, as métricas tem valor incorreto.
o Average Price por exemplo muda quando totalizado, então todas as contas apresentam problemas pois todas elas deveriam ser feitas com o Average Price de um MES CLIENTE PRODUTO
Já estou trabalhando nisso a quase um mes, já li livro novo de MDX e ainda nada.
Será que alguém já passou por situação parecida?
Toda ajuda é bem vinda.
Vejam um exemplo para Quantity Effect em Local Currency (LC) que funciona na granularidade MES - PRODUTO - CLIENTE:
CREATE MEMBER CURRENTCUBE.[Measures].[Sales YTD Quantity Effect LC Calc]
AS
Case When IsEmpty ([Measures].[Sales YTD Average Price LC PY Year])
then ([Measures].[Sales YTD Quantity]-[Measures].[Sales YTD Quantity PY Year]) * [Measures].[Sales YTD Average Price LC]
else
([Measures].[Sales YTD Quantity]-[Measures].[Sales YTD Quantity PY Year]) * [Measures].[Sales YTD Average Price LC PY Year]
end,
FORMAT_STRING = "#,#",
VISIBLE = 0 , DISPLAY_FOLDER = 'PRICE\YTD\LC' , ASSOCIATED_MEASURE_GROUP = 'FACT SALES DETAIL';
CREATE MEMBER CURRENTCUBE.[Measures].[Sales YTD Quantity Effect LC]
AS
IIF (StrToSet("Axis(1)").Item(0).Item(0).Dimension.CurrentMember.Level.Ordinal=0,
SUM( StrToSet("Axis(1)").Item(0).Item(0).Dimension.CurrentMember.children ,
[Measures].[Sales YTD Quantity Effect LC Calc]),
[Measures].[Sales YTD Quantity Effect LC Calc]),
FORMAT_STRING = "#,#",
VISIBLE = 1 , DISPLAY_FOLDER = 'PRICE\YTD\LC' , ASSOCIATED_MEASURE_GROUP = 'FACT SALES DETAIL';
A primeira métrica faz a conta (Sales Quantity YTD 2009 - Sales Quantity YTD 2008) * Avg Price YTD 2008 (se não ouve venda em 2008 usa preço de 2009).
A segunda métrica, faz com que dado um set de dados, o AS faz o calculo para dados em ultimo nivel, mas caso estejam usando dados agregados faz a somatória dos dados em ultimo nivel.
Portanto essa segunda métrica teria de ser alterada para ter escopo sempre em MES - CLIENTE - PRODUTO. Ou seja ao invés de um children só, eu preciso produto.ultimo nivel, cliente.ultimo nivel
Agora estou fazendo testes para obter o resultado válido para MES - PRODUTO, para isso inclui um *Customer.children, mas agora demora muito e a query não responde, imagino que esteja faltando algum tipo de limitação NON EMPTY ou algo assim, o cubo deve estar fazendo a conta para todos os 36220 clientes e cruzando com todos os 6370 produtos.
CREATE MEMBER CURRENTCUBE.[Measures].[Sales YTD Quantity Effect LC]
AS IIF (StrToSet("Axis(1)").Item(0).Item(0).Dimension.CurrentMember.Level.Ordinal=0,
SUM( StrToSet("Axis(1)").Item(0).Item(0).Dimension.CurrentMember.children
----AQUI Ó
* [DIM CUSTOMER].[CUSTOMER NAME].[All].CHILDREN,
[Measures].[Sales YTD Quantity Effect LC Calc]),
[Measures].[Sales YTD Quantity Effect LC Calc]),
FORMAT_STRING = "#,#",
VISIBLE = 1 , DISPLAY_FOLDER = 'PRICE\YTD\LC' , ASSOCIATED_MEASURE_GROUP = 'FACT SALES DETAIL';
Será que estou indo no caminho certo?
Será que estou indo no caminho certo?