Mostrando postagens com marcador Dicas. Mostrar todas as postagens
Mostrando postagens com marcador Dicas. Mostrar todas as postagens

terça-feira, 5 de abril de 2011

Reiniciar Serviços Windows do QlikView Server

Certo dia necessitei, via aquivo .bat, parar e iniciar os serviços Windows do QlikView Server
Tive que utilizar isso pois o QlikView Server não estava liberando a memória do Servidor.
Segue as linhas utilizadas nos arquivos .bat.

Parar os Serviços Windows do QlikView Server 10.

@echo off
REM -------------------------------------------------------
REM - Arquivo: QlikViewServer10_Stop.bat
REM - Descrição: Parar todos Serviços QlikView Server v10
REM -------------------------------------------------------
echo Parar Serviços QlikView Server
echo ======================================================

net stop "Qlikview Directory Service Connector"
net stop "QlikView Distribution Service"
net stop "QlikView Management Service"
net stop "QlikView Server"
net stop "QlikView WebServer"

echo ======================================================
echo Todos Serviços QlikView parados com sucesso ...

pause


Iniciar os Serviços Windows do QlikView Server 10.

@echo off
REM -------------------------------------------------------
REM - Arquivo: QlikViewServer10_Start.bat
REM - Descrição: Iniciar todos Serviços QlikView Server v10
REM -------------------------------------------------------
echo Iniciar Serviços QlikView Server
echo ======================================================

net start "Qlikview Directory Service Connector"
net start "QlikView Distribution Service"
net start "QlikView Management Service"
net start "QlikView Server"
net start "QlikView WebServer"

echo ======================================================
echo Todos Serviços QlikView iniciados com sucesso ...

pause

Agora que já temos os dois arquivos, que param e iniciam os serviços, só agendar uma tarefa do Windows para cada um e executá-los no melhor horário.

sábado, 12 de março de 2011

Trabalhando com mais de uma Tabela Fato

Muitas vezes necessitamos associar dados entre duas ou mais Tabelas Fatos, o maior problema é que nem sempre temos 100% das informações associadas entre as Tabelas Fato ou temos dimensões diferentes entre elas.

Para resolvermos isso vamos criar uma tabela de ligação (Link Table).

Neste post falarei sobre a solução através de Link Table.

Temos as seguintes tabelas para criar o nosso modelo de dados associativo no QlikView.
Vendas, Orçamento, Cliente, Filial, Vendedor e Tipo Venda.


Como vamos utilizar a solução de Link Table, primeiramente temos que criar um campo chave utilizando a função AutoNumber() concatenando os campos comuns entre as tabelas fato e iremos comentar os campos envolvidos na chave.

Venda:
LOAD
AutoNumber(Data&'|'&[Código Vendedor]) as %ChaveLinkTable,
//Data,
[Código Venda],
[Código Cliente],
//[Código Vendedor],
[Código Tipo Venda],
[Código Filial],
[Valor Venda]
FROM
QVD\Venda.QVD
(qvd);

Orçamento:
LOAD
AutoNumber(MakeDate(Right([Mês Ano],4),Left([Mês Ano],2),1)&'|'& [Código Vendedor]) as %ChaveLinkTable,
//[Código Vendedor],
[Valor Orçado]
FROM
QVD\Orçamento.QVD
(qvd);

Agora que já criamos a chave e eliminamos os campos comuns entre as tabelas fatos, vamos criar a tabela de ligação (LinkTable).

//===========================================
// LINK TABLE
//===========================================
LinkTable:
LOAD DISTINCT
AutoNumber(Data&'|'&[Código Vendedor]) as %ChaveLinkTable,
Data,
[Código Vendedor]
FROM
QVD\Venda.QVD
(qvd);

LinkTable:
LOAD DISTINCT
AutoNumber(MakeDate(Right([Mês Ano],4),Left([Mês Ano],2),1)&'|'& [Código Vendedor]) as %ChaveLinkTable,
Date(MakeDate(Right([Mês Ano],4),Left([Mês Ano],2),1),'DD/MM/YYYY') as Data,
[Código Vendedor]
FROM
QVD\Orçamento.QVD
(qvd);

Agora temos três tabelas no nosso modelo de dados associativo.
Com essa nova tabela gerada com base nas informações das duas fatos, garantimos que teremos todos possibilidade de combinações entre as Tabelas Fato.
Podemos continuar a carga das demais tabelas do modelo.

Cliente:
LOAD
[Código Cliente],
[Nome Cliente]
FROM
QVD\Cliente.QVD
(qvd);

Filial:
LOAD
[Código Filial],
[Descrição Filial]
FROM
QVD\Filial.QVD
(qvd);

Vendedor:
LOAD
[Código Vendedor],
[Nome Vendedor]
FROM
QVD\Vendedor.QVD
(qvd);

[Tipo Venda]:
LOAD
[Código Tipo Venda],
[Descrição Tipo Venda]
FROM
[QVD\Tipo Venda.QVD]
(qvd);


Agora temos a nossa dimensão Vendedor associada a nossa tabela de ligação (LinkTable).

Para concluirmos o nosso modelo de dados associativo, vamos criar a tabela de calendário.

TMP_Calendario:
LOAD DISTINCT
Data
FROM
QVD\Venda.QVD
(qvd);

TMP_Calendario:
LOAD DISTINCT
Date(MakeDate(Right([Mês Ano],4),Left([Mês Ano],2),1),'DD/MM/YYYY') as Data
FROM
QVD\Orçamento.QVD
(qvd);

Calendario:
NoConcatenate
LOAD
[Data] as Data,
Day(Data) as Dia,
Month(Data) as Mês,
Year(Data) as Ano,
DayNumberOfQuarter(Data) as [Dia Trimestre],
DayNumberOfYear(Data) as [Dia Ano],
MonthName(Data) as [Mes Ano],
QuarterName(Data) as [Quarter],
Week(Data) as [Semana],
ceil(Month(Data)/3)&'º Trim' as [Trimestre],
WeekDay(Data) as [Dia Semana]
Resident TMP_Calendario;

DROP table TMP_Calendario;

Após a criação da tabela calendário com base nas informações das tabelas de Venda e Oraçamento, temos o seguinte modelo.

quinta-feira, 3 de março de 2011

Conexão Active Directory (AD)

Para fazer uma conexão ao Active Directory (AD), é necessário um usuário com permissão de acesso ao AD, não será explicado nesse post como é feita a criação desse usuário.

Você deve criar uma conexão OLE DB, para isso abra o editor de script e siga os passos.


Escolha o provedor "OLE DB Provider for Microsoft Directory Services".


Informe o endereço do AD, bem como o usuário e senha criados anteriormente. Clique em Testar conexão.


Após a criação conforme indicado acima, você verá a seguinte linha de conexão.

OLEDB CONNECT TO [Provider=ADsDSOObject;User ID=Dominio\Usuário;Encrypt Password=False;Data Source=LDAP://dominio.com.br;Mode=Read;Bind Flags=0;ADSI Flag=-2147483648] (XPassword is IGGRQZVMODaCWbB);

Depois você pode fazer a extração dos grupos e usuários dos grupos, nesse caso, os grupos são pré-determinados.

Veja exemplo.


//************* Grupos AD ****************//
FOR each arg in 'Grupo1','Grupo2','Grupo3'

Groups:
LOAD
distinguishedName as GroupKey,
cn as Grupo;
SQL select
distinguishedName,
cn
FROM 'LDAP://DC=dominio,DC=com, DC=br'
WHERE objectCategory='group' AND cn ='$(arg)';

//grava as informações do Grupo
Store Groups into Groups_$(arg).qvd;

//Alimenta a variável com o valor do campo GroupKey
LET vGK = peek('GroupKey');
//Exibe o nome do Grupo e Chave do Grupo
TRACE GRUPO - $(arg) - $(vGK);

//Busca os usuários do Grupo
Users:
LOAD
'$(vGK)' as GroupKey,
upper(sAMAccountName) as LanID,
cn as Name;
SQL SELECT
sAMAccountName,
cn
FROM 'LDAP://DC=dominio,DC=com, DC=br'
WHERE memberOf='$(vGK)';

//grava os usuários do Grupo
Store Users into \Users_$(arg).qvd;

//Elimina as tabelas do arquivo qvw
drop table Users;
drop table Groups;
NEXT arg

domingo, 6 de fevereiro de 2011

Load sobre o Load

Load sobre o load é um recurso muito útil para criar campos que dependem um alguma transformação. No exemplo abaixo demonstramos a criação de uma tabela de calendário com base em um uma data inicial e o dia final do mês atual, essas data são alimentadas em variáveis.

Definindo valores as Variáveis.

LET vMesInicial = Date('01/01/2006');
LET vMesFinal = Date(MonthEnd(Today()));

Criação da tabela Calendário utilizando o comando Autogenerate(), onde a quantidades de linhas é a diferença entre as variáveis criadas anteriormente.

CALENDARIO:
LOAD
[Data] as Data,
Day(Data) as Dia,
Month(Data) as Mês,
Year(Data) as Ano,
DayNumberOfQuarter(Data) as [Dia Trimestre],
DayNumberOfYear(Data) as [Dia Ano],
MonthName(Data) as [Mes Ano],
QuarterName(Data) as [Quarter],
Week(Data) as [Semana],
ceil(Month(Data)/3)&'º Trim' as [Trimestre],
WeekDay(Data) as [Dia Semana];
LOAD
Date(MonthEnd(Today())- Recno()+1,'DD/MM/YYYY') as [Data]
AUTOGENERATE(vMesFinal-vMesInicial+1);