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

Set Analysis | Variable | script

Bonjour,

Alors voici la colle que je rencontre :

Nous avons une application fonctionnel.

J'ai ajouté

  - une liste de sélection qui contient les champs : (choix unique et obligatoire)

  selector.indicator_period

  - '1' | 'Dernier mois'                                             | '{<date.month.auto_number={"$' & chr(39) & '(=Max(date.month.auto_number))"}>}'

  - '2' | 'Selection'                                                  | ''

  - '3' | 'Selection + mois precedent la selection'      | '{<date.month.auto_number={">=$' & chr(39) & '(=Min(date.month.auto_number)) <=$' & chr(39) & '(=Max(date.month.auto_number))"}>}'

  - une liste de sélection qui contient les champs : (choix multiple)

  selector.indicator

  - '1' | 'stockA'

  - '2' | 'stockB'

  - '3' | 'stockC'

Et j'aimerais ajouter un bouton qui vas sélectionner les clients qui ont un stock* supérieur a 0.

J'ai donc mis dans un bouton l'action sélection des champs client avec :

  '(' & chr(39) &

  concat(

  {<client.nom={"=sum($(=selector.indicator_period.field) $(=selector.indicator.name)) > 1"}>}

  client.nom, chr(39) & '|' & chr(39))

  & chr(39) & ')'

Je rencontre déjà deux premiers problèmes, dans ma table selector.indicator_period, le set analysis pour Selection + mois precedent.

Pour qu'il soit complet il faudrait qu'il contienne '>= (min(date) - (max(date) - min(date))) & <= max(date)'.

La je suis perdu dans les { ( ' " & "} ...

Deuxième soucis, comment gérer le fait qu'on puisse sélectionner plusieurs selector.indicator.name.

Si on sélectionne les 3 stocks, il faudrait sélectionner les clients dispo pour chaque stock et concaténer chaque en supprimant les doublons ?

Fin voila, si un courageux/généreux passe dans le coin, je suis preneur 

Merci,

ps = il y a peut étre une méthode beaucoup plus simple en passant par le script ?

1 Solution

Accepted Solutions
sfatoux72
Partner - Specialist
Partner - Specialist

Pour commencer, j'ai ajouté un DISTINCT pour n'avoir qu'une fois le nom des clients dans la liste concaténée.

Ensuite, j'ai ajouté un Aggr pour calculer la somme du stock par client et par mois pour récupérer finalement que la valeur min par client. Et le tour est joué 😉

=

'(' & chr(39) &

concat( DISTINCT

  {<

    client.nom={"=$(=Concat('Min(Aggr(sum({< $(=selector.indicator_period.field) >} '& selector.indicator.field &'), date.month, client.nom)) > 1', ' and '))"}

  >}

client.nom, chr(39) & '|' & chr(39))

& chr(39) & ')'

Vu qu'il y a eut plusieurs sous-questions (donc sous-réponses), mets des utiles ou des recommandations sur les réponses qui t'ont aidé ou que tu souhaites recommander à d'autres membres de la communauté.

View solution in original post

16 Replies
Not applicable
Author

Edit :

Premier probléme réglé :

Pour le premier points, j'arrive a récupéré les mois séléctionnées et ceux antérieurs avec un Set Analysis de ce type :

date={">=$(=($(=min(date)) - ($(=Max(date)) - $(=min(date))))) <=$(=Max(date))"}

Je l'ai mis dans mon champs selector.indicator_period.field. Et je l'appel de cette manière :

=

concat(

  {<

  $(='$(=selector.indicator_period.field)')

  >}

date.format.year.month, ' ')

sfatoux72
Partner - Specialist
Partner - Specialist

Tu pourrais déjà essayé de l'écrire ainsi :

{< date={">=$(=Min(date)-(Max(date)-Min(date))) <=$(=Max(date))"} >}

Cela te permet de supprimer un niveau d'évaluation

sfatoux72
Partner - Specialist
Partner - Specialist

Concernant la sélection de plusieurs indicateurs (stock), voici une solution. Il faut mettre des or ou des and suivant se que tu désires (un des stock sélectionné > 0 ou tous les stock sélectionné > 0) :

=  '(' & chr(39) &
concat(
{<
client.nom={"=sum($(=if(WildMatch(Concat(selector.indicator.name,','), '*stockA*')>0, 'stockA', 0)))>1 or sum($(=if(WildMatch(Concat(selector.indicator.name,','), '*stockB*')>0, 'stockB', 0)))>1 or sum($(=if(WildMatch(Concat(selector.indicator.name,','), '*stockC*')>0, 'stockC', 0)))>1"}>}
client.nom, chr(39) & '|' & chr(39))
&
chr(39) & ')'

Not applicable
Author

Bonjour et merci de votre réponse,

J'avais pensé faire quelque chose comme ceci, mais je me suis perdu dans les ' " { (...

Est ce possible de cette manière ? cela permettrais d'avoir un affichage plus light ? Sinon je passerais par votre méthode.

=

'(' & chr(39) &

concat(

    {<

          client.nom={"=sum({< $(=selector.indicator_period.field) >} concat(

                                                                          selector.indicator_2.field ,

                                                                          ') > 1"} * {"=sum({<$(=$(=selector.indicator_period.field))>})

                                                                      ) > 1"}

    >}

client.nom, chr(39) & '|' & chr(39))

& chr(39) & ')'

selector.indicator_2.field contenant le ou les Stock sélectionnés.

selector.indicator_period.field contenant le Set Analysis sélectionné.

sfatoux72
Partner - Specialist
Partner - Specialist

Salut,

j'ai travaillé sur ton idée et voici comment l'écrire :

=
'(' &
chr(39) &
concat(
{<
client.nom={"= $(=Concat('sum({< $(=selector.indicator_period.field) >} '& selector.indicator.name &')>1', ' or '))"}>}
client.nom, chr(39) & '|' & chr(39))
&
chr(39) & ')'

Toujours en remplaçant le or par un and suivant ton besoin

Not applicable
Author

Yes ! Super ça fonctionne comme ça et c'est encore mieux avec tout dans le concat() ! Merci.

J'ai un dernier soucis..

A l'heure actuel c'est parfait si je suis sur le dernier mois ou une sélection avec un seul mois.

Par contre, si j'ai plusieurs mois dans la sélection, on récupère les clients qui ont un stock supérieur à 0 pour tout les mois.

J'aimerais l'avoir pour chaque mois. Si pour un mois le stock* est = à 0 alors on n'affiche pas ce client.

Promis c'est ma dernière évols

Donc au final voici ce que j'ai à l'heure actuel :

Mes tables de sélections :

selector.indicator_period:

load * inline [

  selector.indicator_period, selector.indicator_period.name, selector.indicator_period.field

  1, Last month of selection, 'date.month={' & chr(39) & '$' & '(=Max(date.month))' & chr(39) & '}'

  2, Selection, ''

  3, Selection + previous selection, 'date.month={' & chr(39) & '>= $' & '(=(min(date.month) - (Max(date.month) - min(date.month)))) <= $' & '(=Max(date.month))' & chr(39) & '}'

];

selector.indicator_2:

load * inline [

  selector.indicator,   selector.indicator.field

  1,                         stockA

  2,                      stockB

  3,                      stockC

];

Et mon expression :

=

'(' & chr(39) &

concat(

  {<

    client.nom={"=$(=Concat('sum({< $(=selector.indicator_period.field) >} '& selector.indicator.field &')>1', ' and '))"}

  >}

client.nom, chr(39) & '|' & chr(39))

& chr(39) & ')'

La solution que j'envisage serait de modifier mon deuxième Concat() ou selector.indicator.field, pour intégrer un autre Set Analysis qui chaque mois si le stock est > 0 va faire l'intersection de ces mois.

Ça ajouterais un autre concat(), un autre Set Analysis, une autre intersection..

Mais je vois pas d'autre moyen.

sfatoux72
Partner - Specialist
Partner - Specialist

Pour commencer, j'ai ajouté un DISTINCT pour n'avoir qu'une fois le nom des clients dans la liste concaténée.

Ensuite, j'ai ajouté un Aggr pour calculer la somme du stock par client et par mois pour récupérer finalement que la valeur min par client. Et le tour est joué 😉

=

'(' & chr(39) &

concat( DISTINCT

  {<

    client.nom={"=$(=Concat('Min(Aggr(sum({< $(=selector.indicator_period.field) >} '& selector.indicator.field &'), date.month, client.nom)) > 1', ' and '))"}

  >}

client.nom, chr(39) & '|' & chr(39))

& chr(39) & ')'

Vu qu'il y a eut plusieurs sous-questions (donc sous-réponses), mets des utiles ou des recommandations sur les réponses qui t'ont aidé ou que tu souhaites recommander à d'autres membres de la communauté.

Not applicable
Author

Top c'est encore une fois beaucoup plus simple que ce que j'avais commencé à faire !

J’étais partie sur une autre sous-étape pour tester chaque mois de chaque client..

Toutes vos réponses ont étés utiles !

Encore merci !!

Not applicable
Author

Bonjour, désolé de vous embêter une nouvelle fois...

J'ai parlé trop vite, ça fonctionne pas à 100%, mais à 99,99%... on est pas loin !

Voici l'expression final :

'(' &

concat(DISTINCT

{<

client.nom={"=$(=Concat('min(aggr(sum({< $(=selector.indicator_period.field) >} '& selector.indicator.field &'), date.month, %_customer.id)) > 1', ' and ')) "}

>}

client.nom, '|')

& ')'

et mes Set Analysis :

(piéce jointe plus simple)

Le soucis doit être dans les quottes ou l'appel de selector.indicator_period.field

J'ai essayé les 4

Ce qui est assez étrange, c'est que le last month à l'air de fonctionner.

Et si je quand je test l'utilisation du Set Analysis à part, il s'execute bien :

'(' &

concat(DISTINCT

  {<

  $(= '$(= selector.indicator_period.field)')

  >}

date.month.year_month,  '|' )

& ')'