Tenho uma medida calculada MDX para totais de 30 dias e quero mascarar o cálculo para futuros membros. Estou tentando usar uma instrução CASE e a comparação não funciona corretamente. Se a chave do membro do mês fiscal for um datetime, isso não deveria funcionar?
CASE
WHEN [Time].[Fiscal Month].CurrentMember < NOW()
THEN 1
ELSE 0
END
Uma abordagem alternativa e, às vezes, com melhor desempenho pode ser adicionar um atributo à sua dimensão de data ao longo das linhas de "IsFuture".
Dependendo do seu cronograma de carregamento/processamento de dados, você pode ter um campo em seu datawarehouse ou uma coluna calculada em seu dsv pré-calculando se a data está no futuro ou não.
Em vez de realizar um cálculo em tempo real com um
IIF
em seu MDX, você pode criar uma medida calculada usandoSCOPE
assim (não testado, da memória)Apenas uma ideia que estou oferecendo, sua pergunta não fornece muitos detalhes para criar um código de amostra funcional, mas essa pode ser uma abordagem alternativa.
Isso retornaria vazio se a data estivesse no futuro em vez de 0, mas dependendo de seus requisitos, isso poderia fornecer melhores resultados se seu cliente estivesse apenas retornando
NONEMPTY
/NONEMPTYCROSSJOIN
resultados.A função
NOW()
retorna um DateTime, você não pode comparar isso com um membro. Dependendo da definição da dimensão Time, você pode converter o resultado deNOW()
em um membro usando MDX-FunctionStrToMember
, mas não há menor do que em Members.Eu uso chaves do formato "yyyyMMdd" para minha dimensão de tempo. Então essa chave é comparável assim:
WHEN [Time].[Time].CurrentMember.Properties("Key") < Format(Now(),"yyyyMMdd") THEN 1