Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

GetCurrentSelections sem Rótulos

É possível apresentar APENAS os valores que foram selecionado em VÁRIOS campos, sem que apareça o rótulo dos campos.

Já tentei também com o componente "Seleções Atuais" "Escondendo" a coluna dos rótulos com um objeto texto sobrepondo o objeto de seleções atuais. Meu problema é que a posição da coluna muda entre a versão Desktop e Web e preciso que mantenha um padrão nas 2 versões.

1 Solution

Accepted Solutions
felipe_dutra
Partner - Creator
Partner - Creator

Anderson,

Veja se é isso que você quer:

No script:

Set vSeleções1 = "=If(Div(SubStringCount(GetCurrentSelections(' | ', ' | '), ' | ')+1, 2)>=1, SubField(GetCurrentSelections(' | ', ' | ', ', ', 1000), ' | ', 2), 'Sem Seleções')";

Set vSeleções2 = "=If(Div(SubStringCount(GetCurrentSelections(' | ', ' | '), ' | ')+1, 2)>=1, SubField(GetCurrentSelections(' | ', ' | ', ', ', 1000), ' | ', 2), 'Sem Seleções')";

For vCont = 2 to 15

  Set vSeleções1 = "$(vSeleções1)&If(Div(SubStringCount(GetCurrentSelections(' | ', ' | '), ' | ')+1, 2)>=$(vCont), chr(10)&SubField(GetCurrentSelections(' | ', ' | ', ', ', 1000), ' | ', 2*$(vCont)), Null())";

  Set vSeleções2 = "$(vSeleções2)&If(Div(SubStringCount(GetCurrentSelections(' | ', ' | '), ' | ')+1, 2)>=$(vCont), ', '&SubField(GetCurrentSelections(' | ', ' | ', ', ', 1000), ' | ', 2*$(vCont)), Null())";

NEXT

E no layout, em um objeto de texto, use:

=vSeleções1

ou

=vSeleções2

Eu fiz para até 15 Campos, mas você pode aumentar ou diminuir no laço de repetição.

Também pode ser criado no final da carga para o número exato de campos da nuvem.

Abs,

Felipe

View solution in original post

6 Replies
osni_campos
Contributor III
Contributor III

A unica maneira que encontrei foi via macro gravando o valor em uma Variável.

segue:

Sub GetAno()

    vPeriodo=""

  SET fx = ActiveDocument.Fields("[Ano Abate]")

  SET fxc= fx.GetPossibleValues

  For i = 0 TO fxc.Count -1

  vPeriodo = vPeriodo & fxc(i).Text & ", "

  Next       

  vPeriodo = left(vPeriodo,len(vPeriodo)-2)

  ActiveDocument.Variables("vPeriodo").SetContent vPeriodo , true

End Sub

Not applicable
Author

Prezado Osni

A solução que você sugeriu tem um problema que é trabalhar com apenas 1 dos campos. Eu consegui o mesmo resultado da sua macro usando o comando abaixo. Porém ele dá certo somente no primeiro campo. Do segundo em diante já aparece o nome do campo.

=Mid(GetCurrentSelections() , FindOneOf(GetCurrentSelections(), ':')+1, Len(GetCurrentSelections()))

osni_campos
Contributor III
Contributor III

Concordo com a limitação da solução aplicada, porem tem a vantagem de trazer todas as possibilidades do campo mesmo que não tenha sido selecionada algum valor.
Com um implementação nos campos que devam ser monitorados, numa mesma funcao resolveria.

Particularmente não gosto de macros e Outra alternativa seria:

=concat(DISTINCT data.ano_mes)&';'&concat(DISTINCT data.data)

Infelizmente continua limitada pois deve ser informado quais campos retornarão resultado.


A vossa solução infelizmente também não é completa, e particularmente eu não usaria, mas vamos estudar e achar uma solução adequada.

felipe_dutra
Partner - Creator
Partner - Creator

Anderson,

Veja se é isso que você quer:

No script:

Set vSeleções1 = "=If(Div(SubStringCount(GetCurrentSelections(' | ', ' | '), ' | ')+1, 2)>=1, SubField(GetCurrentSelections(' | ', ' | ', ', ', 1000), ' | ', 2), 'Sem Seleções')";

Set vSeleções2 = "=If(Div(SubStringCount(GetCurrentSelections(' | ', ' | '), ' | ')+1, 2)>=1, SubField(GetCurrentSelections(' | ', ' | ', ', ', 1000), ' | ', 2), 'Sem Seleções')";

For vCont = 2 to 15

  Set vSeleções1 = "$(vSeleções1)&If(Div(SubStringCount(GetCurrentSelections(' | ', ' | '), ' | ')+1, 2)>=$(vCont), chr(10)&SubField(GetCurrentSelections(' | ', ' | ', ', ', 1000), ' | ', 2*$(vCont)), Null())";

  Set vSeleções2 = "$(vSeleções2)&If(Div(SubStringCount(GetCurrentSelections(' | ', ' | '), ' | ')+1, 2)>=$(vCont), ', '&SubField(GetCurrentSelections(' | ', ' | ', ', ', 1000), ' | ', 2*$(vCont)), Null())";

NEXT

E no layout, em um objeto de texto, use:

=vSeleções1

ou

=vSeleções2

Eu fiz para até 15 Campos, mas você pode aumentar ou diminuir no laço de repetição.

Também pode ser criado no final da carga para o número exato de campos da nuvem.

Abs,

Felipe

pablolabbe
Luminary Alumni
Luminary Alumni

Veja este exemplo Anderson.

QlikView App: Current Selections Dynamic Display

Será que atende sua necessidade ?

Not applicable
Author

Felipe

Seu exemplo foi o que consegui chegar ao melhor resultado. Fiz apenas uma pequena alteração porque nos casos em que muitos valores são selecionados acabava passando do espaço que reservei para as seleções, então caso a seleção no campo ultrapasse os 70 caracteres eu exibo: "[Valores] ... de outros".

Segue a alteração que fiz no seu código, o qual está funcional.

Set vSeleções1 = "= If(Len( If(Div(SubStringCount(GetCurrentSelections(' | ', ' | '), ' | ')+1, 2)>=1, SubField(GetCurrentSelections(' | ', ' | ', ', ', 1000), ' | ', 2), 'Sem Seleções')) > 70,

    Mid(If(Div(SubStringCount(GetCurrentSelections(' | ', ' | '), ' | ')+1, 2)>=1, SubField(GetCurrentSelections(' | ', ' | ', ', ', 1000), ' | ', 2), 'Sem Seleções'), 1, 70) & '... e outros.' ,

      If(Div(SubStringCount(GetCurrentSelections(' | ', ' | '), ' | ')+1, 2)>=1, SubField(GetCurrentSelections(' | ', ' | ', ', ', 1000), ' | ', 2), 'Sem Seleções')  ) ";

For vCont = 2 to 100

  Set vSeleções1 =  "$(vSeleções1)& If(Div(SubStringCount(GetCurrentSelections(' | ', ' | '), ' | ')+1, 2)>=$(vCont), chr(10) & If(Len(SubField(GetCurrentSelections(' | ', ' | ', ', ', 50), ' | ', 2*$(vCont))) > 70, Mid(SubField(GetCurrentSelections(' | ', ' | ', ', ', 50), ' | ', 2*$(vCont)),1,70) & '... e outros.',SubField(GetCurrentSelections(' | ', ' | ', ', ', 50), ' | ', 2*$(vCont))),  Null() )  " ;

                                       

NEXT

Valeu muito obrigado!