16 Replies Latest reply: Aug 21, 2013 1:13 PM by Raphael Pacheco

Performance

Boa tarde

Estou desenvolvendo uma aplicação num cliente onde compreenderá todas as análises do Orçamento hoje realizadas via excel pelo QlikView. Porém estou na 5ª aba, uma das mais complexas, onde tenho 3 containers, cada um com aprox 15 relatórios dinámicos, com fórmulas parecidas com essa:

(SUM({<ATIVO_SN={"S"}, PACOTE_C={"1","2","3","4","5","6","7","8","9","10","11"},UNIDADE_C={"14"},CUSTO_C={"7253","7351","7352","7353","7354","7355","7803","7806","7813","7814","7806"}, CONTA_C={"*"}-{"3416"} >}VL_GASTOS_ORC)

+SUM({<ATIVO_SN={"S"},PACOTE_C={"1","2","3","4","5","6","7","8","9","10","11"},UNIDADE_C={"86"},CUSTO_C={"7251","7252","7254"} >}VL_GASTOS_ORC)

+SUM({<ATIVO_SN={"S"},PACOTE_C={"1","2","3","4","5","6","7","8","9","10","11"},UNIDADE_C={"13"},CUSTO_C={"7401","7402","7403","7404","7405","7803","7806","7813","7814"} >}VL_GASTOS_ORC)

+SUM({<ATIVO_SN={"S"},PACOTE_C={"1","2","3","4","5","6","7","8","9","10","11"},UNIDADE_C={"24"},CUSTO_C={"7406","7803","7806","7813","7814"} >}VL_GASTOS_ORC)

+SUM({<ATIVO_SN={"S"},PACOTE_C={"1","2","3","4","5","6","7","8","9","10","11"},UNIDADE_C={"50"},CUSTO_C={"7401","7402","7403","7404","7405","7406","7407","7408","7409","7410","7411","7412","7803","7806","7813","7814"} >}VL_GASTOS_ORC)

+SUM({<ATIVO_SN={"S"},PACOTE_C={"1","2","3","4","5","6","7","8","9","10","11"},UNIDADE_C={"91"},CUSTO_C={"7251","7252","7254"} >}VL_GASTOS_ORC)

+SUM({<ATIVO_SN={"S"},PACOTE_C={"1","2","3","4","5","6","7","8","9","10","11"},UNIDADE_C={"13"},CUSTO_C={"7251","7252","7254"} >}VL_GASTOS_ORC)

+SUM({<ATIVO_SN={"S"},PACOTE_C={"1","2","3","4","5","6","7","8","9","10","11"},UNIDADE_C={"72"},CUSTO_C={"7305"} >}VL_GASTOS_ORC)

+SUM({<ATIVO_SN={"S"},PACOTE_C={"1","2","3","4","5","6","7","8","9","10","11"},UNIDADE_C={"73"},CUSTO_C={"7305"} >}VL_GASTOS_ORC)

+SUM({<ATIVO_SN={"S"},PACOTE_C={"1","2","3","4","5","6","7","8","9","10","11"},UNIDADE_C={"12"},CUSTO_C={"7451","7803","7806","7813","7814"},CONTA_C={"*"}-{"3421"}>}VL_GASTOS_ORC)

+SUM({<ATIVO_SN={"S"},PACOTE_C={"1","2","3","4","5","6","7","8","9","10","11"},UNIDADE_C={"69"},CUSTO_C={"7251","7252","7254"} >}VL_GASTOS_ORC)

+SUM({<ATIVO_SN={"S"},PACOTE_C={"1","2","3","4","5","6","7","8","9","10","11"},UNIDADE_C={"84"},CUSTO_C={"7251","7252","7254"} >}VL_GASTOS_ORC)

+SUM({<ATIVO_SN={"S"},PACOTE_C={"1","2","3","4","5","6","7","8","9","10","11"},UNIDADE_C={"85"},CUSTO_C={"7251","7252","7254"} >}VL_GASTOS_ORC)

+SUM({<ATIVO_SN={"S"}, CONTA_C={"3421"}>} VL_GASTOS_ORC))

/

(before(SUM({<ATIVO_SN={"S"}, PACOTE_C={"1","2","3","4","5","6","7","8","9","10","11"},UNIDADE_C={"14"},CUSTO_C={"7253","7351","7352","7353","7354","7355","7803","7806","7813","7814","7806"}, CONTA_C={"*"}-{"3416"} >}VL_GASTOS_ORC)

+SUM({<ATIVO_SN={"S"},PACOTE_C={"1","2","3","4","5","6","7","8","9","10","11"},UNIDADE_C={"86"},CUSTO_C={"7251","7252","7254"} >}VL_GASTOS_ORC)

+SUM({<ATIVO_SN={"S"},PACOTE_C={"1","2","3","4","5","6","7","8","9","10","11"},UNIDADE_C={"13"},CUSTO_C={"7401","7402","7403","7404","7405","7803","7806","7813","7814"} >}VL_GASTOS_ORC)

+SUM({<ATIVO_SN={"S"},PACOTE_C={"1","2","3","4","5","6","7","8","9","10","11"},UNIDADE_C={"24"},CUSTO_C={"7406","7803","7806","7813","7814"} >}VL_GASTOS_ORC)

+SUM({<ATIVO_SN={"S"},PACOTE_C={"1","2","3","4","5","6","7","8","9","10","11"},UNIDADE_C={"50"},CUSTO_C={"7401","7402","7403","7404","7405","7406","7407","7408","7409","7410","7411","7412","7803","7806","7813","7814"} >}VL_GASTOS_ORC)

+SUM({<ATIVO_SN={"S"},PACOTE_C={"1","2","3","4","5","6","7","8","9","10","11"},UNIDADE_C={"91"},CUSTO_C={"7251","7252","7254"} >}VL_GASTOS_ORC)

+SUM({<ATIVO_SN={"S"},PACOTE_C={"1","2","3","4","5","6","7","8","9","10","11"},UNIDADE_C={"13"},CUSTO_C={"7251","7252","7254"} >}VL_GASTOS_ORC)

+SUM({<ATIVO_SN={"S"},PACOTE_C={"1","2","3","4","5","6","7","8","9","10","11"},UNIDADE_C={"72"},CUSTO_C={"7305"} >}VL_GASTOS_ORC)

+SUM({<ATIVO_SN={"S"},PACOTE_C={"1","2","3","4","5","6","7","8","9","10","11"},UNIDADE_C={"73"},CUSTO_C={"7305"} >}VL_GASTOS_ORC)

+SUM({<ATIVO_SN={"S"},PACOTE_C={"1","2","3","4","5","6","7","8","9","10","11"},UNIDADE_C={"12"},CUSTO_C={"7451","7803","7806","7813","7814"},CONTA_C={"*"}-{"3421"}>}VL_GASTOS_ORC)

+SUM({<ATIVO_SN={"S"},PACOTE_C={"1","2","3","4","5","6","7","8","9","10","11"},UNIDADE_C={"69"},CUSTO_C={"7251","7252","7254"} >}VL_GASTOS_ORC)

+SUM({<ATIVO_SN={"S"},PACOTE_C={"1","2","3","4","5","6","7","8","9","10","11"},UNIDADE_C={"84"},CUSTO_C={"7251","7252","7254"} >}VL_GASTOS_ORC)

+SUM({<ATIVO_SN={"S"},PACOTE_C={"1","2","3","4","5","6","7","8","9","10","11"},UNIDADE_C={"85"},CUSTO_C={"7251","7252","7254"} >}VL_GASTOS_ORC)

+SUM({<ATIVO_SN={"S"}, CONTA_C={"3421"}>} VL_GASTOS_ORC)))-1

Essa é apenas uma de aprox 4 cada relatório.

Quando salvo o qvw, ela não abre mais essa aba, fica pensando ...

Alguem pode dar uma sugestão de como melhorar a performance? Crio variáveis para todas as expressões??

• Re: Performance

Fazer tudo na parte do Script. Evitar usar formulas muito complexas em expressões, que nem no seu caso. Eu estudaria essas condições e aplicaria tudo na parte do Script, assim na hora de aplicar as expressões não prejudicaria a performance do relatório

• Re: Performance

Concordo com o Leonardo.

Estou desenvolvendo a DRE por loja na empresa onde trabalho e uma das formas para contabilizar todas as contas foi passar todo o cálculo par o script de carga.

No meu caso criei tabelas agrupadas até o nível desejado e as expressões de cálculos utilizei na maioria das vezes o Sum(If()). Assim pude realizar os cálculos no script seguindo as regras que utilizaria no objeto com os Set Analysis.

Tente desta forma

Um abraço!

• Re: Performance

Bom dia e obrigado pelo retorno. Pode me passar algum exemplo de como aplicar essas condições no script?

Nunca fiz isso .

Eu estava declarando todas as minhas formulas como variáveis no script,

SET R#Orçado_Geral=SUM({<MARCA_C={"*"}>}VL_RECEITAS_ORC);

segue abaixo um exemplo mais básico, se puder, retornem com um exemplo utilizando ele.

SUM({<UNIDADE_C={"*"}-{"18","40","11","60","61","27","74","75"},ATIVO_SN={"S"}>}VL_GASTOS_ORC)

Abraço

• Re: Performance

Um exemplo:

Sum(If(UNIDADE <> Match(UNIDADE,'18','40','11','60','61','27','74','75'),

If(ATIVO_SN = 'S',

VL_GASTOS_ORC

)

)

Abraço!

• Re: Performance

Apenas incluir a expressão utilizando o IF no script? como faço para carregar este calculo no relatório depois?

Me desculpem a ignorância, é que estou desenvolvendo a pouco tempo..

• Re: Performance

Nomeia a expressão com o alias (as) e depois no objeto faça apenas um simples Sum().

Exemplo: Para o grupo de unidade ('18','40','11','60','61','27','74','75') eu posso nomear no script de carga como [Unidade 1].

Depois no objeto é só incluir um Sum([Unidade 1]).

• Re: Performance

Dessa forma??

• Re: Performance

Exatamente.

Mas não se esqueça de que deverás fazer um group by em sua tabela. Deste modo, inclua em seu agrupamento apenas os campos que serão utilizados.

• Re: Performance

Nunca utilizei GROUP BY..

• Re: Re: Performance

Exemplo, Quero agrupar esta soma a uma filial e data:

Tabela:

Load

Filial,

Data,

Sum(If(UNIDADE <> Match(UNIDADE,'18','40','11','60','61','27','74','75'),

If(ATIVO_SN = 'S',

VL_GASTOS_ORC

)

)                                                    as [RECEITAS GERAIS]

From <Sua Base de Dados>

Group By

Filial,

Data;

Assim, a soma das Receitas Gerais serão agrupadas por filial e data

• Re: Re: Re: Performance

Estou testando com conforme o pdf em anexo, mas está dando expressão inválida.. Acredito ter entendido algo errado..

• Re: Re: Re: Re: Performance

Não deu certo por que para todas as operações de agregação (Sum, Count, Max) em uma tabela do sistema é necessário realizar um group by.

Tente incluir no Group By da forma que te mostrei no exemplo anterior todos os campos carregados antes do Sum().

Lembre-se que os nomes destes campos devem ser os mesmo da base e não os aliases.

Se puderes postar um QVW exemplo fica melhor para resolver

• Re: Re: Re: Re: Re: Performance

Segue abaixo..

Outra pergunta, e quando a expressão for utilizar dados de duas ou mais bases diferentes?

• Re: Performance

Rodrigo.

Verifiquei um probleminha.

O teu segundo If() na expressão de soma não está realizando nenhuma condicional. Faça da mesma forma que o primeiro If(), onde ele verifica dentro de todas as unidades de negócio quais são diferentes de '18','60','61','74','75'.

Ou seja, tens que fazer com que haja uma comparação entre todos os GRP_ORCAMENTARIO e os que você destãcou no Match().

Faça isso e carregue para ver se dá certo.

Só não fiz isso e devolvi o QVW, por que não sei se o comparativo do GRP_ORCAMENTARIO tem que ser '=' ou '<>' dos valores que você incluiu.

Abraços!

• Re: Performance

Tem que ser igual a aqueles .. ficaria assim?

IF(GRP_ORCAMENTARIO=Match(GRP_ORCAMENTARIO,'1','2','3','4','5','6','7','8','9','10','11')

dessa forma continuou com erro!

• Re: Performance

Qual o erro que está apresentando?

Provavelmente o erro está no group by, pois ele deve ser igual a construção dos campos. Ou seja, se você utiliza um month(Data) para criar o mês, no group by vc terá que colocar tmbm a mesma expressão que contruiu o campo.

Tente fazer isso em seu script.