Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Boa tarde Amigos,
Tenho um campo de DATA que está numérico no formato YYYYMM.
Utilizei a expressão para dimensão =date(date#(Max(DATA_BASE_FINAL),'YYYYMM'),'MMM/YY') e me retornou corretamente a data Out/18.
Porém estou querendo colocar ela dentro de um set analysis dessa maneira =SUM({<DATA_BASE_FINAL={"$(=date(date#(Max(DATA_BASE_FINAL),'YYYYMM'),'MMM/YY'))"}>}SDB_ATUAL)/1000000 e está me retornando zerado.
Existe algum erro na expressão?
Obrigado a todos!
Se o Formato é YYYYMM você não pode comparar com MMM/YY com YYYYMM
Mude para
=SUM({<DATA_BASE_FINAL={"$(=date(Max(DATA_BASE_FINAL)'YYYYMM))"}>}SDB_ATUAL)/1000000
Antônio,
Não sou muito fã de usar formatação de campo em set analysis, salvo extrema necessidade. Desse modo te pergunto: Por que não tratas o campo DATA_BASE_FINAL em seu script? Você inclusive criar um campo numérico que represente a data de forma que seu set fique mais facilitado ( NUM(CAMPO_DATA_FINAL) ).
Olá Thiago tudo bem?
Vou tentar explicar melhor o que estou tentando fazer.
Tenho uma tabela dinâmica com o campo DATA_BASE como minha dimensão, nela contem as datas de 201810 e 201809.
Como Medida estou utilizando a expressão.
if(DATA_BASE_FINAL = MAX(DATA_BASE_FINAL),sum({<MACRO={'MESMO ESTAGIO'},MOTIVO={'Continua Stage 1'},MOTIVO_2={'Amortiza Saldo'},DATA_BASE_FINAL={'$(=MAX(DATA_BASE_FINAL))'}>}SDB_ATUAL)/1000000
,
IF(DATA_BASE_FINAL = MAX(DATA_BASE_FINAL,2),sum({<MACRO={'MESMO ESTAGIO'},MOTIVO={'Continua Stage 1'},MOTIVO_2={'Amortiza Saldo'},DATA_BASE_FINAL={'$(=MAX(DATA_BASE_FINAL))'}>}SDB_ANT)/1000000
,
0))
Então nas datas da tabela onde for 201810 faça essa expressão utilizando o SUM(SDB_ATUAL) da DATA 201810.
Onde for 201809 faça a expressão utilizando o SUM(SDB_ANT) da DATA 201810.
O primeiro IF está trazendo corretamente porém existe algum erro no segundo que não está trazendo o valor.
Pode me ajudar?
Abraço!!
Em tese, você só precisa de:
sum({<
MACRO={'MESMO ESTAGIO'},
MOTIVO={'Continua Stage 1'},
MOTIVO_2={'Amortiza Saldo'},
DATA_BASE_FINAL={'$(=MAX(DATA_BASE_FINAL))'} --> NÃO precisa
>}SDB_ATUAL)/1000000
Se você possui o campo DATA_BASE_FINAL na sua tabela, não precisa coloca-lá no Set Analysis, pois o sum(SDB_ATUAL) será do próprio mês.
Olá Nilton,
Então eu coloquei essa parte do DATA_BASE_FINAL={'$(=MAX(DATA_BASE_FINAL))'} porque para o mês 201810 ele deve fazer a SUM(SDB_ATUAL) porém na minha tabela também tem o mês 201809, e esse sim eu preciso que utiliza o campo SUM(SDB_ANT) do mês 201810.
Entendi, o ideal para performance seria fazer isso no script.
Load max(DATA_BASE_FINAL) as MaxDate
Resident Tabela;
LET vMaxDate = Peek('MaxDate');
Pergunta: o campo SDB_ATUAL e SDB_ANT e DATA_BASE_FINAL estão na mesma tabela?
Se sim, agora você pode fazer assim no SCRIPT:
if(DATA_BASE_FINAL = $(MaxDate), SDB_ATUAL, SDB_ANT) as SDB_FINAL
Se não estiverem na mesma tabela, aconselho verificar uma melhor modelagem e sempre tratar esse tipo de coisa via script para sua aplicação ficar com melhor performance
Nilton,
Sim todos os campos estão na mesma tabela.
Ainda não estou explorando a parte do script, poderia me ajudar como incluir todas essas informações e trazer na minha expressão? Abraço!
Vamos lá, se todos os campos estão na mesma tabela, isso facilita.
Vamos a 1ª pergunta:
Você está lendo esses dados de uma tabela no banco de dados? Arquivo (CSV, Excel, QVD, XML)?
Em tese o que você deverá fazer é SALVAR o MAX DATA ATUAL em uma VARIÁVEL, mas como fazer isso?
Assim:
Load max(DATA_BASE_FINAL) as MaxDate From Tabela; // Se forArquivo CSV, Excel, etc
Select max(DATA_BASE_FINAL) as MaxDate From Tabela; // Se for um Select no Banco de dados
LET vMaxDate = Peek('MaxDate'); // O LET pega um valor em algum campo, no caso, o campo MaxDate
Agora você irá carregar seus dados, mas adicione um CAMPO NOVO:
Load
Campo1,
Campo2,
...,
...,
if(DATA_BASE_FINAL = $(MaxDate), SDB_ATUAL, SDB_ANT) as SDB_FINAL
From tabela;
Veja se dá certo. e se entendeu bem. qualquer coisa, posta o QVW ai.