Pesquisar este blog

quarta-feira, 4 de dezembro de 2013

Aloha!

Estou abrindo uma nova vertente no blog, dessa vez vou falar de layout.
Na verdade vou dar uma dica de como fazer uma coisa bem simples, que dá um "up" no gráfico.

1 - Talvez você já tenha visto algum gráfico de linha.
2 - Talvez você já tenha visto algum gráfico de linha com marcador.
3 - Talvez você já tenha visto algum gráfico de linha. com marcador "furado".

O primeiro é mole de fazer no Cognos, é o gráfico padrão
O segundo também é fácil, é um dos modelos padrão ou simplesmente modifique o tipo de linha para linha com marcadores.
Agora o segundo é uma incógnita, eu nunca havia visto um no Cognos, mas vi em outros lugares e fiquei pensando se era possível.

Acontece que é, veja como fica abaixo:

Claro que não está grande coisa, fiz só para ter ima ideia.

Agora vejamos como fazer.
É muito simples

Nas propriedades da paleta defina o marcador como circulo:
 
 
Depois, Clique na cor do marcador para editar as propriedades.
Faça dessa forma:


 

 
Tipo de preenchimento: Matriz radial de linha
Cores: Sempre da cor do fundo ou transparente para a cor da linha
Posição do foco: X1 40%, X2 50%, Y1 60% e Y2 50%.
A única coisa que pode variar é o Raio do foco.
No exemplo no começo do post, ficou assim: interna 3px, externa 4px.
 
Por fim, falta apenas definir o tamanho do marcador.
Volte à tela da paleta de cores e clique na guia propriedades:
 
 
Defina como 10pt.
 
Depois de fazer isso você pode ir alternando para adequar melhor ao seu relatório mas já é um começo.
 
Abs


quinta-feira, 3 de outubro de 2013

Cognos 10.2.1 FP1

E mais uma dica rápida!

Sai acho que mês passado o FP1 da versão 10.2.1, digamos que é um release novo porque é maior que o 10.2.1.

Vale a pena, tem muita correção e coisas novas interessante.

!!!!

Cognos MDX Parte 1

Eis que vos falo novamente... enquanto aguardo meu GTA Online funcionar.

Recentemente passei por um aperto e tanto e  resolvi fazer minha contribuição semestral a comunidade que mexe com esse trem chamado Cognos.

Hoje vamos falar um pouco de MDX, básico.
Muitos já devem ter se deparado com o desenvolvimento de relatórios sobre cubos, no meu caso o infame Dynamic Cube, e como já era de se esperar, nunca é fácil, sempre difícil.

Então a linguagem que o tal cubo utiliza é o MDX, e se você tentar fazer um relatório sobre cubo com o conceito de desenvolvimento relacional você está perdido.

Isso acontece porque MDX é uma linguagem que faz um de hierarquias e buscas em profundidade, diferente do SQL que faz buscas lineares de profundidade 0.

Isso posto, vamos a dicas!

Para fazer um filtro de informação, procure sempre utilizar um slicer, veja exemplo abaixo:

Filtro simples obrigatório:
[Cubo];[Dimensão].[Hierarquia]->?p_parametro?

Filtro múltiplo obrigatório:
set([Cubo];[Dimensão].[Hierarquia]->?p_parametro?)

Filtro simples opcional:
#prompt('p_parametro';'memberuniquename';'rootMember([Cubo];[Dimensão].[Hierarquia])')#

Filtro múltiplo opcional:
#prompt('p_parametro';'memberuniquename';'rootMember([Cubo];[Dimensão].[Hierarquia])';'set(';'';')')#

Isso vai resolver a maior parte dos problemas de filtragem que você possa ter, mas se você precisar fazer a passagem de um parâmetro para um relatório que utiliza 2 cubos você encontrará um problema. Descobri como resolve-lo na sorte, depois explico, é um pouco mais complicado mas funciona.

Agora fazer dizer que você precisa fazer um relatório acumulado no período:
o seu slicer ficaria +/- assim:
head(children([Meu Cubo];[Tempo].[Ano]->?p_ano?);?p_mes?)
Nesse caso ele traz os ?p_mes? primeiros membros filhos de ?p_ano?.


Caso queira utilizar a mesma lógica para mês é só muda de head para item:
item(children([Cubo];[Tempo].[Ano]->?p_ano?);?p_mes?)

Bom isso é o começo, agora vamos ver como fazer um case, coisa muito simples no modo relacional, mas em cubo é um caos.
Se você fizer um simples case vai ter graves problemas de performance, então minha sugestão é a seguinte:
vamos agrupar SP, MG, RJ e ES como Sudeste e os demais e outros:
set(
member( total(currentMeasure within set filter([Cubo].[Estados].[Estados].[Estados]; caption([Cubo].[Estados].[Estados].[Estados]) in ('SP';'MG';'RJ';'ES'))); 'membro1'; 'Sudeste'; [Cubo].[Estados].[Estados]);
member( total(currentMeasure within set filter([Cubo].[Estados].[Estados].[Estados]; caption([Cubo].[Estados].[Estados].[Estados]) not in ('SP';'MG';'RJ';'ES'))); 'membro2'; 'Outros'; [Cubo].[Estados].[Estados]);
)

Fácil né?
Agora um sugestão muito útil, image que você quer trazer o TOP 10, moleza:
topCount([Cubo].[Dimensão].[Hierarquia].[Nível]; 10; [Cubo].[Medidas].[Medida])

Mole mesmo, mas agora você que ranquear esses caras, então faça assim:

Primeiro escolha pelo que vai ranquear, digamos que é pelo ano, e vamos imaginar que você já faz os Data itens.
Rank(tuple([Medida];[Ano]) within set([Top 10]))

Acho que isso já está bem complicado por hoje, mas logo volto com mais algumas dicas!!

Qualquer dúvida já sabem.

[[]]'s

quinta-feira, 2 de maio de 2013

Javascript Manipulando Prompts - Parte 1

Algumas vezes é ncessário colocar uma opção custom no prompt, um label.
Até a versão 8 não existia um modo simples, era necessário a utilização de javascript para manipular os prompts.

Na versão 10 já existe uma propriedade para isso, entretanto se você ainda precisa manipular os prompts para, para exemplo, remover uma opção, o javascript ainda é útil.

Abaixo segue um codigo de minha autoria, como basa no knowledge base da IBM.

Essas funções servem para as versões 8.2, 8.4.1 e 10.1, pelo menos foi onde testei. Deve servir para a 8.3 também.

A primeira função captura os formularios de tratamento do Cognos, esses formularios contem todas as informações do relatório, então seria possivel acessar tudo do relatório, desde que você saiba o caminho.

A segunda função retorna um objeto com a entidade do prompt, de acordo com o parametro.
O argumento name deve ser o nome do prompt.
Essa função retorna prompts do tipo dropdown, list, e text field.

function getCognosParams(){
 return var fW = typeof getFormWarpRequest == "function" ? getFormWarpRequest() : document.forms["formWarpRequest"];
}

function getPromptByName(name){
 var prompt = eval("getCognosParams()._oLstChoices" + name);
 if(prompt == null || prompt == undefined){
  prompt = eval("getCognosParams()._textEditBox" + name);
  if(prompt == null || prompt == undefined){
   window.alert("Prompt: " + name + " incorreto.");
  }
 }
 return prompt;
}

quarta-feira, 1 de maio de 2013

Dica da semana - Cognos 10.1.1 FP2

Mais um post hoje hein!!!

Então, passei pelo site da IBM esse dias e vi que tem um Fix Pack para a versão 10.1.1.

É o novo FP2, lançado em 26/03 se não me engano.

Ainda não testei mas parece que resolve uma pancada de erros, alguns muito inúteis, outros fazem sentido.

Se alguem aplicou o patch e quiser me dizer o que achou eu posto aqui!

[[]]'s

Cognos Mobile - Erro 1111 ao enviar relatório para dispositivo móvel

E ai povo, faz um tempo que não apareço por aqui.

Mas recebi uns e-mails nos últimos dias e resolvi dar uma atualizada nesse trem.

Pois bem, essa semana mesmo passei pelo seguinte problema:

Versão Cognos 10.1.1 FP1

Preciso rodar um Job que gera cerca de 500 saidas para IPADs, esse job já roda a algum tempo e até semana passada demorava cerca de 3 horas, mas saia sem nenhum problema.

Então fizemos algumas alterações nele e de repente ele começou a apresentar um erro(que vou falar em outro post), a questão era de overload no banco então decidimos montar uma tabela para sumarizar mais os dados, deixando menos trabalho para o Cognos.

Até ai tudo bem né? Não!!
O relatório passou a rodar em 40 minutos, porém... apresentou por diversas vezes o erro:
'The Mobile service has
caught an exception: com.cognos.mobile.common.CMException:
(code 1111)'

Então fiz o que todo ser humano razoavel faz, joguei isso ai no google e por algum mistério da humanidade realmente veio algo da IBM.

Existe um chamado de alguem que teve esse problema, e como em 99% da vezes a resposta da IBM é... mude para a próxima versão... muito útil.

Não me conformo muito com essas respostas então tentei rearranjar o job de modo a não deixar muitos processos simultâneos, veja que são 500 saidas.

Felizmente apenas isso resolveu o problema, o job leva cerca de 1 hora para rodar e sem nenhum erro.

Resumo
Erro erro é causado(também) por um excesso de concorrência no próprio Cognos, diminuindo o overload na aplicação resolveu o problema.