Função para Criar Calendário (Utilizando Data existente no modelo)

Fala pessoal, tudo beleza?

No último post aprendemos a utilizar uma função para criação de calendário passando uma data início e data fim, hoje aprenderemos como verificar esse range através de um campo existente em nosso modelo.

Para fazer isso utilizaremos três funções: FieldValue, FieldValueCount e While.

  • FieldValue para retornar um valor do campo de data do modelo. Lembrando que sempre será retornado apenas um valor, para o nosso caso resolve, pois utilizaremos essa função junto com as funções MAX e MIN.
  • FieldValueCount utilizaremos para percorrer todos os possíveis valores do campo de data do modelo. Lembrando que a função retorna o número de valores distintos do campo escolhido.
  • While para criar todos os registro no intervalo entre a maior e menor data do modelo.

Vamos ao código:

SUB CriaCalendario(vCampoData,vNomeCalendario,vPrefixoCalendario,vCampoChave)

LET vNomeCalendario = If(Len(‘$(vNomeCalendario)’)=0,’Calendario’,’$(vNomeCalendario)’);
LET vPrefixoCalendario = If(Len(‘$(vPrefixoCalendario)’)=0,”,’$(vPrefixoCalendario)’);
LET vCampoChave = PurgeChar(vCampoChave,'”[]’);

[$(vNomeCalendario)]:
LOAD
Distinct
Data_ as [$(vCampoChave)],
Date(Data_, ‘$(DateFormat)’ ) as [$(vPrefixoCalendario)Data],
Year(Data_) as [$(vPrefixoCalendario)Ano],
Month(Data_) as [$(vPrefixoCalendario)Mes],
Day(Data_) as [$(vPrefixoCalendario)Dia],
Date(MonthStart(Data_), ‘MMM/YYYY’) as [$(vPrefixoCalendario)MesAno];
LOAD
Date(_DataInicio+(Iterno()-1),’$(DateFormat)’ ) as Data_
WHILE (_DataInicio+(Iterno()-1)<=_DataFim); //Regra para gerar todos os registro do intervalo
LOAD
Floor(Min(Fieldvalue(‘$(vCampoData)’,RecNo()))) as _DataInicio, //Função utilizada para buscar valor do campo data do modelo.
Floor(Max(Fieldvalue(‘$(vCampoData)’,RecNo()))) as _DataFim
AUTOGENERATE FieldValueCount(‘$(vCampoData)’); //Função necessária para passar por todos os registros possíveis do campo data do modelo.

ENDSUB;

 
 
OBSERVAÇÃO: É necessário utilizar o FieldValueCount no AutoGenerate, pois precisamos passar por todos os possíveis valores do campo da data. Caso você não utilize, pode ser que o Min e o Max sejam alterados.

 

Pronto, agora basta utilizar a função Call e passar os parâmetros para que o calendário seja criado, conforme exemplo abaixo:

Call CriaCalendario(‘DATA’,’Calendario’,”,’%ChaveData’);

Neste exemplo o calendário será criado com o intervalo entre o intervalo de datas do campo DATA (esse campo esta localizado na tabela Tabela_Fato do exemplo), o nome da tabela será “Calendario”, nenhum prefixo de campos será utilizado e o campo de chave com a minha modelagem é “%ChaveData”.

Para fazer o download da aplicação de exemplo, basta clicar aqui!

 

Por enquanto é isso pessoal!

Semana que vem abordaremos outro assunto!

Função para Criar Calendário (Passando datas)

Fala pessoal!

 

Na maioria dos projetos em que iremos trabalhar é preciso criar um calendário para poder trabalhar com as datas de forma organizada (ainda não vou falar sobre um calendário principal, esse assunto vai ficar para um próximo post). Na maioria dos casos sempre opto por criar uma tabela de Calendário e trabalhar as datas nessa tabela, pois sempre tento organizar todas as datas necessárias para o projeto em uma única tabela (quando possível rsrs).

 

Hoje quero repassar para vocês uma função que utilizo para criar um calendário de uma forma com alta performance. Função? Sim, eu crio uma classe de função de script e depois utilizo uma linha passando os parâmetros necessários para criar o calendário.

 

Vamos entender um pouco mais sobre essas funções de script através do manual do QlikView:

O comando de controle sub e end sub define uma sub-rotina que pode ser chamada a partir de um comando call.

A sintaxe é:
sub nome [ ( listadeparâmetros )] comandos end sub

Onde:

  • name é o nome da sub-rotina.
  • listadeparâmetros é uma lista, separada por vírgulas, de nomes de variáveis para os parâmetros formais da subrotina. Eles podem ser usados como qualquer variável dentro da sub-rotina.
  • comandos são qualquer grupo de um ou mais comandos de script do QlikView.

 

Os argumentos são copiados na sub-rotina e, se os parâmetros reais correspondentes no comando call for o nome de uma variável, serão copiados novamente após a saída da sub-rotina.
Se uma sub-rotina tiver mais parâmetros formais que os parâmetros reais transmitidos por um comando call, os parâmetros extra serão inicializados como NULL e poderão ser utilizados como variáveis locais na subrotina.
Como o comando sub é um comando de controle e, por isso, termina com um ponto-e-vírgula ou com um fim de linha, cada uma de suas duas cláusulas (sub e end sub) não deve cruzar um limite de linha.

 

Agora vamos ao exemplo prático! No final do post existe um link para download de uma aplicação de exemplo 🙂

 
———————————————————————————————————–
 
 

Em primeiro lugar, cria um aba em seu script chamada Sub CriaCalendario nesta aba criaremos a função para criar o calendário. Segue agora o script:

 

/* Nome da função é CriaCalendario e esta recebe cinco parâmetros, são eles:

vDataInicio = Data de Início do seu relatório. O formato a ser passado pode seguir o modelo da formatação de data local, por exemplo DD/MM/YYYY.

vDataFim = Data de término do seu relatório. O formato a ser passado pode seguir o modelo da formatação de data local, por exemplo DD/MM/YYYY.

vNomeCalendario = Nome que receberá a tabela do seu calendário, caso nenhum seja digitado, então o nome Calendario será utilizado.

vPrefixoCalendario = Conjunto de caracteres que precederá todos os nomes de campos da tabela de calendário. Exemplo: “Calendario.”, então todos os campos possuirão o “Calendario.” antes do nome do campo da tabela. Caso nada seja utilizado, então nenhum prefixo será utilizado.

vCampoChave = Nome do campo que será chave entre a tabela de calendário e o seu modelo. Note que esse campo deve ser uma data completa, com dia, mês e ano.

*/

SUB CriaCalendario(vDataInicio,vDataFim,vNomeCalendario,vPrefixoCalendario,vCampoChave)

/* Algumas tratativas com os valores recebidos – Lembre-se que esses valores sempre serão tratados como variáveis. */
LET vNomeCalendario = If(Len(‘$(vNomeCalendario)’)=0,’Calendario’,’$(vNomeCalendario)’);
LET vPrefixoCalendario = If(Len(‘$(vPrefixoCalendario)’)=0,”,’$(vPrefixoCalendario)’);
LET vCampoChave = PurgeChar(vCampoChave,'”[]’);
/* Criação do calendário */
[“$(vNomeCalendario)”]:
LOAD
Distinct
Data_ as [$(vCampoChave)],
Date(Data_, ‘$(DateFormat)’ ) as [$(vPrefixoCalendario)Data],
Year(Data_) as [$(vPrefixoCalendario)Ano],
Month(Data_) as [$(vPrefixoCalendario)Mes],
Day(Data_) as [$(vPrefixoCalendario)Dia],
Date(MonthStart(Data_), ‘MMM/YYYY’) as [$(vPrefixoCalendario)MesAno];

LOAD
Date(‘$(vDataInicio)’+(Iterno()-1),’$(DateFormat)’ ) as Data_
AutoGenerate 1 While (Num(‘$(vDataInicio)’)+(Iterno()-1)<= Num(‘$(vDataFim)’));

/* Finalizando a função */
ENDSUB;

 

Pronto, agora basta utilizar a função Call e passar os parâmetros para que o calendário seja criado, conforme exemplo abaixo:

Call CriaCalendario(’01/01/2015′,’08/03/2015′,’Calendario’,”,’%ChaveData’);

 

Neste exemplo o calendário será criado com o intervalo entre 01/01/2015 e 08/03/2015, o nome da tabela será “Calendario”, nenhum prefixo de campos será utilizado e o campo de chave com a minha modelagem é “%ChaveData”.

 

IMPORTANTE: É necessário passar um valor para cada argumento criado na função, por esta razão passei um vazio para o argumento de número quatro que é o prefixo dos campos, caso contrário a função não executará corretamente.

 

Fiquem a vontade para editar e modelar da forma que preferirem para encaixar em seu modelo.

Para a próxima semana vou demonstrar como criar um calendário utilizando um intervalo de datas através de um campo de uma tabela.

 

Deixo aqui uma aplicação de exemplo para download.

 

Até a próxima semana!

Melhor configuração de QlikView para VMware

Fala pessoal, tudo bom?

Esse mês estamos falando muito sobre medições de desempenho para QlikView. Na semana passada falamos bastante sobre virtualização, seus mitos e verdades. Sabemos que, para ambientes consideravelmente grandes, chegamos a uma perda de 35% de performance em relação a um hardware físico dedicado.

Hoje quero compartilhar um material que explica como devemos aplicar as configurações abordadas, na semana passada, em uma máquina virtual. Neste artigo iremos tratar das configurações para o VMware, mas porque somente VMware? Fiz uma pesquisa e esta é a arquitetura de virtualização mais utilizada no meio corporativo.

Nota importante: Todo o material foi retirado da QlikView Scalability Group – Visitem a página da comunidade aqui.

Chega de enrolação, vamos lá!

Primeiro de tudo, para obter o máximo proveito do seu host VMware para QlikView, certifique-se de dedicar todo o recurso para ele. Se o VMware não estiver configurado com recurso dedicado para QlikView sofrerá muita perda de performance.

1) Recomendação SCSI, para obter um melhor desempenho para o disco I / O

01

2) Pode haver casos em que um aplicativo em execução em uma máquina virtual começa a consumir uma grande quantidade de recursos e, como resultado, a VM começa a esgotar-se de RAM e CPU. O QVS é um aplicativo crítico e precisa estar sempre disponível, você não pode simplesmente desligá-lo para adicionar mais memória RAM e CPU. Estes são os tipos de casos em que deve-se adicionar os recursos no quente, ou seja, sem desligar ou parar a máquina virtual ou qualquer um de seus aplicativos. O nome do recurso a ser ativado é Hot-Plug.

02

3) Ligue o log. Parece ser algo simples, mas o log SEMPRE nos alerta de um problema que esta para ocorrer. Monitorar log não é uma tarefa fácil, mas pode nos prevenir de muitos problemas.

03

4) Configure o adaptador de rede com a melhor tecnologia: “1000 Mb Full Duplex”. Além disso, certifique-se de usar o driver de rede do VMware e não o encontrado pelo Windows.

04

5) Desative o Balonismo.

Balonismo ou “Virtual memory ballooning” é uma técnica utilizada pelo Hypervisor que permite a retirada de memória não utilizada de determinada VM e compartilha essa memória com outras (VMs). O Balonismo permite o estouro da memória física alocada para determinada VM, pois esse recurso garante que mais memória será liberada oriundo de outra VM.

Neste link, existe um post muito interessante explicando como funciona e o que causa a desativação deste método.

6) Garanta 100% da CPU alocada para o QVS

06

7) Garanta 100% da Memória alocada para o QVS

07

8) Garanta 100% do disco físico alocado para o QVS

08

9) Desabilite o CPU Hyper threading

09

10) Desabilite o NUMA

10

Conclusão: Lembre-se sempre de monitorar o desempenho de seu QVS dentro da VM e assim saber identificar qual é a hora de passar a configuração para um hardware físico dedicado ou então para um cluster de servidores.

Até a próxima semana! 😀

Virtualização do QVS – Mitos e Verdades

Fala galera, tudo bom?

Esse post é interessante, pois sempre que falamos sobre QlikView Server ouvimos a famosa frase: QlikView Server em uma máquina virtual perde muita performance.

Não é de se surpreender que a rápida adoção da virtualização de servidores dentro de grandes empresas tem sido impulsionado pela oportunidade de redução de custos. Ao permitir que vários sistemas compartilhem uma única peça de hardware de servidor, a virtualização de servidor permite que as empresas reduzam, de forma significativa, o número de servidores físicos que necessitam de adquirir e gerenciar. Além disso, há ganhos adicionais significativos que podem ser realizados através de reduções correspondentes em infra-estruturas relacionadas, incluindo a capacidade do centro de dados e consumo de energia.

Vamos conhecer alguns ganhos significativos sobre a virtualização:

  1. Permite que os administradores possam mover um servidor ativo para outra parte de hardware (virtualizado) sem tempo de inatividade, eliminando a necessidade de paralisações programadas para apoiar a manutenção de hardware ou atualizações.
  2. Em uma plataforma de virtualização, é possível, através de algoritmos, automatizar o controle de recursos dos servidores virtualizados. Como isso funciona? Digamos que separamos 8 cores e 32gb para um determinado servidor, porém a aplicação não esta utilizando totalmente esses recursos, dessa forma a plataforma virtual identifica essa subutilização e repassa esses “pedaços” de hardware que estão sobrando para outro servidor virtual que esteja necessitante naquele momento.
  3. Fácil administração e supervisão dos ambientes virtuais.
  4. Fácil implementação de backup.
  5. Entre outros (chega de puxar sardinha rsrs).

A QlikTech suporta totalmente produtos QlikView Server em um ambiente virtualizado. (Para o total apoio
declaração, por favor consulte o Apêndice declaração de apoio a virtualização do QlikView)
Mas calme! Um cuidado especial deve ser tomado quando se considera a virtualização de qualquer aplicação (sistema) que se utilize intensamente de CPU e memória. O QlikView Server não é excepção.

O QlikView fornece aplicações que são movidas por motor de analytics in-memory, ou seja, que fornece em tempo real recálculo de relatórios, visualizações e dashboards diretamente para os usuários de negócios.
Embora muitos vão achar que eles podem virtualizar todos os componentes da sua implantação, entenda que o hypervisor* sofrerá com uma sobrecarga de desempenho e, portanto, aplicações complexas e com clientes exigentes com desempenho deverão ser implantados em um hardware físico dedicado. É importante reconhecer que, mesmo nestes casos, muitos outros componentes da implantação podem ser virtualizados.

* Hypervisor, ou Monitor de Máquina Virtual (VMM), é uma camada de software entre o hardware e o sistema operacional. O VMM é responsável por fornecer ao sistema operacional visitante a abstração da máquina virtual. É o hypervisor que controla o acesso dos sistemas operacionais visitantes aos dispositivos de hardware.

Considerações da virtualização do QVS

Ao considerar a virtualização da plataforma QlikView, o componente com maior preocupação é o QlikView Server (QVS). O QVS é o componente que contém o mecanismo de análise in-memory, ou seja, é o coração da capacidade do QlikView entregar o recálculo dos relatórios “on-the-fly”, desta forma usuários podem explorar dinamicamente seus dados.

O desempenho do QVS é impulsionado por uma série de fatores que podem ser categorizados em três etapas:

  1. Ambiente (Environment)
  2. Desenvolvimento de aplicações (Application)
  3. Utilização (Usage)

Virtualização

Ao discutir o desempenho em seu ambiente QlikView, é importante considerar todos esses componentes.
Do ponto de ambiente, QlikView Server é particularmente sensível a memória e CPU. Isso é diferente de muitas outras aplicações de BI que sejam dependentes de disco I/O e dependência da rede.

QlikView Server é uma plataforma de BI baseado em in-memory, ou seja, memória em tempo real. Portanto, o desempenho QlikView não depende apenas na memória disponível e da CPU, mas também a velocidade à qual os processadores podem comunicar memória.

Impactos na virtualização do QVS

Existem muitos fatores que afetam o desempenho do QlikView Server em um ambiente virtualizado, incluindo o modelo de hardware subjacente, as configurações da BIOS, o hypervisor software, bem como a utilização de reservas de recursos ou o excesso de inscrições.
Testes feitos pelo QlikTech Scalability Center* mostrou que a adição de um servidor virtualizado geralmente tem um pequeno impacto no desempenho (menos do que 5%). No entanto, em alguns cenários de teste, particularmente aqueles em que o servidor estava sob carga pesada, a virtualização teve uma perca de 35% no desempenho.

* QlikView Scalability Group – Visitem a página da comunidade aqui.

Recomendações para a virtualização do QVS

Planejamento de capacidade

Dimensionamento adequado e monitoramento contínuo do ambiente QlikView é a chave para o sucesso em
qualquer implantação QlikView, mas isso é especialmente verdadeiro em um ambiente de servidor virtualizado.

Testes de resultados demonstraram que o desempenho se degrada mais rapidamente no servidor de virtualização sobre
hardware físico dedicado especialmente quando sob carga pesada.
O controle da CPU e da memória podem ser implementados com uma variedade de sistemas normalizadores. Existem diversas ferramentas disponíveis no mercado, inclusive ferramentas gratuitas. Além disso, a ferramenta QlikView Ops-Monitor pode ser usada para fornecer uma visão mais aprofundada das operações do QlikView Server.

Uso de Whitelist Servidor, acessórios e configurações da BIOS

Configuração da BIOS

Whitelist de Hardware de Servidores

CPU e memória devem ser reservados para o QVS

A perda de performance em uma virtualização ocorre quando o hypervisor perde capacidade de acessar os rescursos subjacentes do hardware e isso causa afeta o QVS. Portanto deve-se reservar CPU e memória para a utilização do QVS. Essa configuração pode ser realizada através do Hypervisor.

Manter Configuração

Ambientes de servidores virtualizados estão expostas a riscos operacionais únicos que precisam ser considerados. Por sua própria natureza, a virtualização abstrai o sistema operacional a partir do hardware subjacente, permitindo que os administradores, possam mover os clientes de um servidor para outro, a fim de realizar a manutenção de hardware ou atualizações com pouca ou nenhuma interrupção para os usuários.

Isto significa que seria muito fácil mover o QVS de uma configuração (hardware) adequado para uma configuração (hardware) menos ideal sem o conhecimento do administrador do QlikView.

QVS em hardware físico dedicado

Apesar do apoio da QlikTech, muitos clientes ainda vão optar por implantar o QlikView Server em um hardware físico dedicado, ao passo que outros componentes da aplicação incluindo Access Point e Publisher são implantados virtualmente.

Conclusão

Virtualização de Servidores tornou-se rapidamente um componente estratégico da gestão de infra-estrutura corporativa e em alguns casos, tornou-se mesmo um mandato corporativo.

O QlikView é suportado em um ambiente de servidor virtualizado. No entanto, como acontece com qualquer aplicação de uso intensivo de CPU e memória, um cuidado especial deve ser dada à virtualização do QlikView Server.
Com o dimensionamento e configuração adequada, muitas empresas vão descobrir que a implantação totalmente virtualizada do QlikView fornecerá a mesma capacidade e desempenho que eles precisam para entregar para seus usuários.

Adequado dimensionamento, planejamento da capacidade e os recursos do sistema são os principais fatores necessários para garantir o sucesso.

Para algumas empresas, no entanto, o risco de problemas de desempenho em um ambiente muito utilizado e/ou com rápido crescimento irá resultar na decisão de implantar QVS em um hardware físico dedicado. Mas mesmo aqui, muitos outros componentes da implantação podem ser virtualizados.
No final, o desempenho do QlikView Server não é um tema simples e a virtualização é apenas um componente a considerar.

Lembrem-se sempre de buscar ajuda profissional para assim evitar qualquer problema desnecessário em seu ambiente de QlikView.
Não posso me esquecer, apêndice sobre o suporte da Qliktech para a virtualização.

Supports Statement

No próximo post passarei uma configuração muito importante para o VMware. Aguardem!!

Até a próxima semana pessoal 🙂

FONTE: A fonte para o material foi retirado do site da VMware, da comunidade do QlikView Scalability Group e de outras pesquisas.

Configuração na BIOS para melhor desempenho no QlikView Server

Continuando o assunto de como melhorar o ambiente do nosso querido QlikView Server, falaremos sobre as opções que devem ser alteradas na BIOS desse servidor.

Essa opções irão influenciar diretamente na utilização de seu hardware e assim ter o ganho esperado. Note que algumas das configurações não estarão disponíveis devido ao modelo do hardware do servidor. Neste caso não temos o que fazer, pule para a próxima opção.

Alguns termos que utilizarei serão bem técnicos, mas para aqueles que não possuem interesse, basta realizar a configuração e reiniciar o servidor.

IMPORTANTE: Apesar dessas opções estarem esclarecidas pela própria Qlik, é sempre bom fazermos as alterações e verificar se realmente obtivemos ganho de performance, em caso contrário, volte as configurações originais de fábrica de sua BIOS.

Vamos as opções e depois irei explicar, tecnicamente, alguns conceitos:

Opção

Valor

Hyper-threading Disabled ou OFF
Power Management (Power Plan) Max performance/ High Performance
Node Interleaving Enabled
NUMA Optimized OFF
Turbo Boost Enabled
Memory configuration / Hardware prefetch Enabled

Hyper-threading

O que é?

Hyper-Threading ou hiperprocessamento é uma tecnologia usada em processadores que o faz simular dois processadores tornando o sistema mais rápido quando se usa vários programas ao mesmo tempo. Essa técnica foi criada para oferecer maior eficiência na utilização dos recursos de execução do processador. Segundo a Intel, a Hyper-Threading oferece um aumento de desempenho de até 30% dependendo da configuração do sistema.

Mas porque isso seria ruim para o QlikView?

Dependendo do tamanho do cache L1, o Hyper-Threading simplesmente divide-o ao meio para fazer um único processador simular a utilização de 2. Se o L1 é muito pequeno, dividi-lo pode significar maior lentidão, pois as páginas de processamento dos processos de QlikView são muito grandes e não caberão nesse processo dentro do cache que o Hyper-Threading dividiu. Faltando espaço no cache L1, o processador começa a escrever esses processos na memória RAM e essa é a grande perda de performance que o QlikView sofrerá.

O efeito é semelhante a esgotar-se a memória RAM física disponível e o processador começar a fazer SWAP, ou seja, utilizar o disco físico para armazenar as informações que estão “sobrando”.

NUMA

O que é?

NUMA (Non-Uniform Memory Access)

A arquitetura tradicional para suportar servidores multiprocessados se chama SMP (Symmetric Multiprocessor). Neste modelo, apenas um processador tem acesso a memória num determinado momento. Quanto mais processadores são adicionados, mais sobrecarregado fica o barramento de acesso à memória, o que pode acabar sendo um fator limitante para a performance do servidor.

No sistema NUMA, as CPU’s estão organizadas em pequenos sistemas chamados de nodes. Cada node possui seu próprio conjunto de processadores e pool de memória e são conectados a um sistema maior através de um barramento de alta velocidade.

Mas porque isso seria ruim para o QlikView?

Em primeiro lugar o QlikView não é um software NUMA-aware, ou seja, não esta homologado para funcionar nesse sistema.

O QlikView é um software que se utiliza de MUITA memória, sabemos que se disponibilizarmos 128gb de ram ele vai consumir esses 128gb, pois foi assim que ele foi construído. No momento em que existe um mapeamento de cada núcleo para cada barramento de memória, corremos o risco desse barramento de memória não caber mais informação e é nesse momento que o QlikView perde sua performance, pois geram-se gargalos de mapeamento desse novo pedaço de memória, ou seja, precisa-se passar a informação para o atual dono desse espaço de que um outro “cara” precisa se utilizar dele – imagine você tendo que dar o seu terreno, pois o vizinho já ocupou toda a sua área rsrs.

O que a desativação NUMA faz é deixar toda a memória disponível, independentemente do número de núcleos e da quantidade de RAM instalado no sistema, de modo com que o QlikView possa se beneficiar de toda a memória sem saltar de um núcleo para o outro e evitar os gargalos.

Para as demais configurações a ativação não gerará nenhum tipo de queda de performance em seu ambiente QlikView Server.

Por hoje é isso pessoal!

Aproveitem o carnaval e até a próxima semana.