Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
eduardo_dimperio
Specialist II
Specialist II

Ajuda com Set Analysis

Oi gente,

Estou confuso com um resultado, criei um set analysis para realizar uma soma quando o consumo atual e a media de consumo dos ultimos meses foram maiores que 1 (dentre outras regras), porém essa regra esta sendo ignorada. O que pode ser?

SUM(${<CONSUMO_TOTAL = {"=CONSUMO_TOTAL> 1.5*CONSUMO_MEDIA_TRIMESTRAL"}+

{"=CONSUMO_TOTAL> 0.5*CONSUMO_MEDIA_TRIMESTRAL"}+

                        {"=CONSUMO_TOTAL>1"}+

                        {"CONSUMO_MEDIA_TRIMESTRAL>1"}

                        >} ROUND((CONSUMO_TOTAL- CONSUMO_MEDIA_TRIMESTRAL),0.01))

set_analysis2.JPG

Imaginei que essa linha deveria vir com resultado vazio, alguem pode me ajudar?

Obrigado

Labels (1)
1 Solution

Accepted Solutions
felipedl
Partner - Specialist III
Partner - Specialist III

Os dados são diferentes nesses casos.

Quando você avalia algo como:

sum(Sales)

vai ser diferente de:

sum({<CampoA={1},Campo2={B}>}Sales)

Por esse motivo, quando você usa duas expressões diferentes, vão sair "tabelas" diferentes, digamos assim. As agregações vão ser diferentes entre as expressões e por isso ele se perde, pq avaliam coisas diferentes.

Supondo que a expressão (1), retorne 10 linhas e a segunda só 5, se você fizer uma a condição de cor para 1, não necessariamente iria respeitar na outra.

Dúvida 2:

Quanto a esse aspecto, do próprio help da qlik o Set Analysis

http://help.qlik.com/en-US/qlikview/November2017/Subsystems/Client/Content/ChartFunctions/SetAnalysi...

tem que ser disposto entre <> para poder fazer operações de conjunto, por exemplo como está na expressão que você usou. Essa que você mencionou acredito que seja para bookmark ou coisa parecida


Expressão extraída de soma de conjuntos do Help: Sum({$<Year={2009}>+1<Country={'Sweden'}>} Sales)

É assim que a Qlik mostra as operações.

View solution in original post

13 Replies
YoussefBelloum
Champion
Champion

hi,

try to attach sample data

felipedl
Partner - Specialist III
Partner - Specialist III

Ola Eduardo,

a construção do set analysis precisa de uns ajustes, pois deveria ser a soma de conjuntos, algo como abaixo:

SUM

(

{<

CONSUMO_TOTAL = {'=CONSUMO_TOTAL> 1.5*CONSUMO_MEDIA_TRIMESTRAL'}

>

+

<

CONSUMO_TOTAL = {'=CONSUMO_TOTAL> 0.5*CONSUMO_MEDIA_TRIMESTRAL'}

>

+

    < 

    CONSUMO_TOTAL = {'=CONSUMO_TOTAL>1'}

>

    +

    < 

      CONSUMO_TOTAL =  {'CONSUMO_MEDIA_TRIMESTRAL>1'}

    >}

    ROUND

    (

  CONSUMO_TOTAL- CONSUMO_MEDIA_TRIMESTRAL

    ,

    0.01

    )

)

Se eu carregar os seguintes dados:

x:

load * Inline

[

OIDMETER,CONSUMO_TOTAL,CONSUMO_MEDIA_TRIMESTRAL

38584,0.41,0.41

1,1.7,0.3

];

Consigo a imagem abaixo, ou seja o seu set analysis não está contemplando a linha que você demonstrou, devido as condições que você colocou.

Sample.png

eduardo_dimperio
Specialist II
Specialist II
Author

Oi Felip, nao deu certo. Ainda aparecem os valores menores que 1set_analysis.JPG

eduardo_dimperio
Specialist II
Specialist II
Author

Sure

felipedl
Partner - Specialist III
Partner - Specialist III

A parte do set analysis

<CONSUMO_TOTAL = {'=CONSUMO_TOTAL> 0.5*CONSUMO_MEDIA_TRIMESTRAL'}>

está permitindo esses valores, deve ser alguma questão de arredondamento onde apesar de ser 0.01 e 0.01 para ambos os campos, devem ser valores menores, se você excluir essa parte, os valores que você grifou na imagem somem.

Sample.png

eduardo_dimperio
Specialist II
Specialist II
Author

Entao, mas eu preciso fazer uma clausula AND pra isso.

A logica é  pegar CONSUMO TOTAL >  OU < 50%  do CONSUMO_TRIMESTRAL E CONSUMO_TOTAL>1 E CONSUMO_TRIMESTRAL>1


Mas nao consigo montar isso no Set Analysis, imaginei que o operador * equivaleria ao AND e o operador + equivaleria ao OU.

felipedl
Partner - Specialist III
Partner - Specialist III

Tente modificar o "+" por "*" que seria a intersecção dos conjuntos para esses dois que você necessita.

eduardo_dimperio
Specialist II
Specialist II
Author

Cara, acho que agora esta funcionando, mas com uma situação estranha. Meu codigo ficou assim:

Sum({

<CONSUMO_TOTAL = {'=CONSUMO_TOTAL>1'}>*

<CONSUMO_TOTAL = {'=CONSUMO_MEDIA_TRIMESTRAL>1'}>*

        <CONSUMO_TOTAL = {'=CONSUMO_TOTAL>1.5*CONSUMO_MEDIA_TRIMESTRAL'}>

        +

        <CONSUMO_TOTAL = {'=CONSUMO_TOTAL>1'}>*

<CONSUMO_TOTAL = {'=CONSUMO_MEDIA_TRIMESTRAL>1'}>*

        <CONSUMO_TOTAL = {'=CONSUMO_TOTAL<0.5*CONSUMO_MEDIA_TRIMESTRAL'}>

     } FABS(CONSUMO_TOTAL-CONSUMO_MEDIA_TRIMESTRAL))

Com resultado esperado

set_analysis.JPG

Mas se eu coloco uma expressão de cor de fundo:

IF(CONSUMO_TOTAL<0.5*CONSUMO_MEDIA_TRIMESTRAL OR CONSUMO_TOTAL>1.5*CONSUMO_MEDIA_TRIMESTRAL, RED() )

Ele se perde

set_analysis2.JPG

felipedl
Partner - Specialist III
Partner - Specialist III

Jogue a mesma expressão que você usou no gráfico para a cor, por exemplo:

if

(

Sum({

<CONSUMO_TOTAL = {'=CONSUMO_TOTAL>1'}>*

<CONSUMO_TOTAL = {'=CONSUMO_MEDIA_TRIMESTRAL>1'}>*

        <CONSUMO_TOTAL = {'=CONSUMO_TOTAL>1.5*CONSUMO_MEDIA_TRIMESTRAL'}>

        +

        <CONSUMO_TOTAL = {'=CONSUMO_TOTAL>1'}>*

<CONSUMO_TOTAL = {'=CONSUMO_MEDIA_TRIMESTRAL>1'}>*

        <CONSUMO_TOTAL = {'=CONSUMO_TOTAL<0.5*CONSUMO_MEDIA_TRIMESTRAL'}>

     } FABS(CONSUMO_TOTAL-CONSUMO_MEDIA_TRIMESTRAL))

> 0.5,red(),green())