Aller directement au contenu
  • Catégories
  • Récent
  • Mots-clés
  • Populaire
  • Utilisateurs
  • Groupes
Réduire
Logo

Communauté Digdash

  1. Accueil
  2. Discussion Générale
  3. Éditeur de Tableaux de Bord
  4. Appliquer un filtre "contient" sur une dimension via du JS

Appliquer un filtre "contient" sur une dimension via du JS

Planifié Épinglé Verrouillé Déplacé Résolu Éditeur de Tableaux de Bord
10 Messages 4 Publieurs 2.4k Vues 4 Abonné
  • Du plus ancien au plus récent
  • Du plus récent au plus ancien
  • Les plus votés
Répondre
  • Répondre à l'aide d'un nouveau sujet
Se connecter pour répondre
Ce sujet a été supprimé. Seuls les utilisateurs avec les droits d'administration peuvent le voir.
  • J
    J
    jperret
    a écrit sur dernière édition par
    #1

    Bonjour,

    Aurait-il une solution pour appliquer un filtre de type "contient" sur une dimension via du JS ?

    exemple:

    • une dimension "type de produit"

    sur cette dimension voudrais appliquer un filtre contient "Pomme" a l'arriver sur la page en passant pas du JS. existe-il une fonction qui permet de faire un filtre type "contient" ?

    Jeremy perret
    Clauger

    1 réponse Dernière réponse
    0
    • J
      J
      Johnny Nguyen
      Expert DigDash
      a écrit sur dernière édition par
      #2

      Bonjour,

      Il existe la fonction FilterOperandMatch qui doit être utilisée à la place de FilterOperand

      La liste des paramètres ressemble beaucoup à filterOperand : function(dim, h, l, values, operators)

      values est un tableau de valeurs, et operators un tableau des opérateurs

      Voici la liste des opérateurs
      var OP_ISNOTNULL = 0;
      var OP_ISNULL = 1;
      var OP_EQUAL = 2;
      var OP_CONTAIN = 3;
      var OP_NOTCONTAIN = 4;
      var OP_NOTEQUAL = 5;
      var OP_MATCHREGEXP = 6;
      var OP_CONTAINWORD = 7;
      var OP_NOTCONTAINWORD = 8;
      var OP_SUP = 9;
      var OP_INF = 10;
      var OP_SUPEQUAL = 11;
      var OP_INFEQUAL = 12;
      var OP_STARTSWITH = 13;
      var OP_ENDSWITH = 14;
      var OP_ISIN = 15;
      var OP_ISNOTIN = 16;
      Il faut donc passer le chiffre correspondant à l'opérateur voulu

      Ici la valeur 3 pour le paramètre operators devrait convenir

      Cordialement

      Johnny

      O 1 réponse Dernière réponse
      1
      • J Johnny Nguyen

        Bonjour,

        Il existe la fonction FilterOperandMatch qui doit être utilisée à la place de FilterOperand

        La liste des paramètres ressemble beaucoup à filterOperand : function(dim, h, l, values, operators)

        values est un tableau de valeurs, et operators un tableau des opérateurs

        Voici la liste des opérateurs
        var OP_ISNOTNULL = 0;
        var OP_ISNULL = 1;
        var OP_EQUAL = 2;
        var OP_CONTAIN = 3;
        var OP_NOTCONTAIN = 4;
        var OP_NOTEQUAL = 5;
        var OP_MATCHREGEXP = 6;
        var OP_CONTAINWORD = 7;
        var OP_NOTCONTAINWORD = 8;
        var OP_SUP = 9;
        var OP_INF = 10;
        var OP_SUPEQUAL = 11;
        var OP_INFEQUAL = 12;
        var OP_STARTSWITH = 13;
        var OP_ENDSWITH = 14;
        var OP_ISIN = 15;
        var OP_ISNOTIN = 16;
        Il faut donc passer le chiffre correspondant à l'opérateur voulu

        Ici la valeur 3 pour le paramètre operators devrait convenir

        Cordialement

        Johnny

        O
        O
        Olivier Le Boulch
        a écrit sur dernière édition par
        #3

        @johnny-nguyen
        Bonjour,
        Je me permets de rebondir sur ce sujet: je souhaite faire à peu près la même chose dans une fonction "Live Security" dont voici le code (Pour restreindre l'affichage des données sur un périmètre Direction):

        var direction =getUserAttribute('Direction');
        var libDim = "lab5"; // Libellé de la dimension

        if (direction != null && direction != '') {
        //création d'un tableau contenant le pays
        var tabDirection = direction.split(',');
        //récupération de la dimension labo
        var dim = selection.dm.getDimensionById(libDim);
        //création du filtre
        var filt = new FilterSelection(dim, -1, -1, [], tabDirection);
        //application du filtre
        selection.setFilter(filt);

        }

        Je souhaiterais filtrer les données avec tout ce qui "commence par" la valeur Direction.
        Est-il possible de le faire en utilisant la fonction FilterOperandMatch? (Avec l'option OPT_START_WITH je suppose) Si oui est-il possible d'avoir un exemple de code ?

        Merci

        J 1 réponse Dernière réponse
        0
        • O Olivier Le Boulch

          @johnny-nguyen
          Bonjour,
          Je me permets de rebondir sur ce sujet: je souhaite faire à peu près la même chose dans une fonction "Live Security" dont voici le code (Pour restreindre l'affichage des données sur un périmètre Direction):

          var direction =getUserAttribute('Direction');
          var libDim = "lab5"; // Libellé de la dimension

          if (direction != null && direction != '') {
          //création d'un tableau contenant le pays
          var tabDirection = direction.split(',');
          //récupération de la dimension labo
          var dim = selection.dm.getDimensionById(libDim);
          //création du filtre
          var filt = new FilterSelection(dim, -1, -1, [], tabDirection);
          //application du filtre
          selection.setFilter(filt);

          }

          Je souhaiterais filtrer les données avec tout ce qui "commence par" la valeur Direction.
          Est-il possible de le faire en utilisant la fonction FilterOperandMatch? (Avec l'option OPT_START_WITH je suppose) Si oui est-il possible d'avoir un exemple de code ?

          Merci

          J
          J
          Johnny Nguyen
          Expert DigDash
          a écrit sur dernière édition par
          #4

          @olivier-le-boulch
          Bonjour,
          Il n'est pas possible d'utiliser cette fonction dans ce contexte.

          B 1 réponse Dernière réponse
          0
          • J Johnny Nguyen

            @olivier-le-boulch
            Bonjour,
            Il n'est pas possible d'utiliser cette fonction dans ce contexte.

            B
            B
            Brenda
            a écrit sur dernière édition par Brenda
            #5

            @Olivier-Le-Boulch
            Bonjour,
            Ci-dessous une proposition de script Live Security pour répondre à votre besoin.
            Je vous le mets dans un fichier : Live_Security_contient.js

            /* START CONFIG */
            
            var securedDims = {};
            securedDims["lab5"] = "Direction" ; /*Séparer par un | pour ajouter d'autres membres Ex: "Direction | Administration"  */
            
            /* Ajouter ici les autres dimensions sur lequel du live security doit s’appliquer */
            /*
            securedDims["DIMENSION_NAME_2"] = getUserAttribute("USER_PARAM_2");
            */
            
            /* END CONFIG */
            
            /* MODIFY THE SCRIPT BELOW WITH CAUTION */
            var sLogPrefix = "[LIVE_SECURITY] [live-sec-thread-" + Math.floor(Math.random()*16777215).toString(16) + "]"; /* 16777215 is FFFFFF in decimal */
            
            for (var dimId in securedDims)
            {
            	var dim = selection.dm.objName[dimId];
            	Packages.com.digdash.utils.MessageStack.getInstance().addDebug(sLogPrefix + "Ce qu'il y a dans dim: " + dim.id);
            	
            	var persoVal = securedDims[dimId];
            
            	//Packages.com.digdash.utils.MessageStack.getInstance().addDebug(sLogPrefix + "Applying user filters on: " + dimId + ", persoVal:" + persoVal);
            	if (dim)
            	{
            		if (persoVal == null || persoVal.length == 0)
            		{
            			// user must no see any value
            			var persoValuesTab = ["-noval-"];
            			var filt = new FilterSelection(dim, -1, -1, [], persoValuesTab);
            			selection.setFilter(filt);
            			//Packages.com.digdash.utils.MessageStack.getInstance().addDebug(sLogPrefix + " Filters (members) on " + dimId + ": [" + persoValuesTab + "]");
            		}
            		else if (persoVal && persoVal != ".*")
            		{
            			//user is limited to some value(s)
            			var persoValuesTab = persoVal.split("|");
            			Packages.com.digdash.utils.MessageStack.getInstance().addDebug(sLogPrefix + " Applying user filters on " + dimId + ": [" + persoValuesTab[0] + "]");
                        //var dim_2 = selection.dm.getDimensionById("lab5");
                        var members = dim.members;
                        
            
            
                        var filterToSet = [];
                        
                        for(var i=0;i<persoValuesTab.length;i++){
                            Packages.com.digdash.utils.MessageStack.getInstance().addDebug(sLogPrefix + " Applying user filters on " + dimId + ": [" + members.length + "]");
                            for(var j=0;j<members.length;j++){
                                Packages.com.digdash.utils.MessageStack.getInstance().addDebug(sLogPrefix + " Applying user filters on " + dimId + ": [" + persoValuesTab[i] + "]");
            
                                if(members[j].indexOf(persoValuesTab[i]) != -1){
                                    filterToSet.push(members[j]);
                                    Packages.com.digdash.utils.MessageStack.getInstance().addDebug(sLogPrefix + " Applying user filters on " + dimId + ": [" + members[j] + "]");
                                }
                            }
                        }
                        
            			var exFilter = selection.filterByDimName[dimId];
            			if (!exFilter)
            			{
            				//there is no exisitng filter on that dimension => create a new one
            				var filt = new FilterSelection(dim, -1, -1, [], filterToSet);
            				selection.setFilter(filt);
            				//Packages.com.digdash.utils.MessageStack.getInstance().addDebug(sLogPrefix + " Resolved filters (members) on " + dimId + ": [" + persoValuesTab + "]");
            			}
            			else
            			{
            				//there is already a filter on that dimension => merge (intersect) into a new one
            				var filt = new FilterSelection(dim, -1, -1, [], filterToSet);
            				filt.recalcIds();
            				exFilter.recalcIds();
            				exFilter = mergeFilters(exFilter, filt);
            				selection.setFilter(exFilter);
            				//Packages.com.digdash.utils.MessageStack.getInstance().addDebug(sLogPrefix + " Resolved filters (origIds) on " + dimId + ": [" + exFilter.origIds + "]");
            			}
            		}
            		else // perso value is .*
            		{
            			// do nothing, user can see everything
            			//Packages.com.digdash.utils.MessageStack.getInstance().addDebug(sLogPrefix + " Resolved filters on " + dimId + ": All (.*)");
            		}
            	}
            	else
            	{
            		//Packages.com.digdash.utils.MessageStack.getInstance().addError(sLogPrefix + " Dimension " + dimId + "not found");
            	}
            }
            

            Cordialement,

            O 1 réponse Dernière réponse
            1
            • B Brenda

              @Olivier-Le-Boulch
              Bonjour,
              Ci-dessous une proposition de script Live Security pour répondre à votre besoin.
              Je vous le mets dans un fichier : Live_Security_contient.js

              /* START CONFIG */
              
              var securedDims = {};
              securedDims["lab5"] = "Direction" ; /*Séparer par un | pour ajouter d'autres membres Ex: "Direction | Administration"  */
              
              /* Ajouter ici les autres dimensions sur lequel du live security doit s’appliquer */
              /*
              securedDims["DIMENSION_NAME_2"] = getUserAttribute("USER_PARAM_2");
              */
              
              /* END CONFIG */
              
              /* MODIFY THE SCRIPT BELOW WITH CAUTION */
              var sLogPrefix = "[LIVE_SECURITY] [live-sec-thread-" + Math.floor(Math.random()*16777215).toString(16) + "]"; /* 16777215 is FFFFFF in decimal */
              
              for (var dimId in securedDims)
              {
              	var dim = selection.dm.objName[dimId];
              	Packages.com.digdash.utils.MessageStack.getInstance().addDebug(sLogPrefix + "Ce qu'il y a dans dim: " + dim.id);
              	
              	var persoVal = securedDims[dimId];
              
              	//Packages.com.digdash.utils.MessageStack.getInstance().addDebug(sLogPrefix + "Applying user filters on: " + dimId + ", persoVal:" + persoVal);
              	if (dim)
              	{
              		if (persoVal == null || persoVal.length == 0)
              		{
              			// user must no see any value
              			var persoValuesTab = ["-noval-"];
              			var filt = new FilterSelection(dim, -1, -1, [], persoValuesTab);
              			selection.setFilter(filt);
              			//Packages.com.digdash.utils.MessageStack.getInstance().addDebug(sLogPrefix + " Filters (members) on " + dimId + ": [" + persoValuesTab + "]");
              		}
              		else if (persoVal && persoVal != ".*")
              		{
              			//user is limited to some value(s)
              			var persoValuesTab = persoVal.split("|");
              			Packages.com.digdash.utils.MessageStack.getInstance().addDebug(sLogPrefix + " Applying user filters on " + dimId + ": [" + persoValuesTab[0] + "]");
                          //var dim_2 = selection.dm.getDimensionById("lab5");
                          var members = dim.members;
                          
              
              
                          var filterToSet = [];
                          
                          for(var i=0;i<persoValuesTab.length;i++){
                              Packages.com.digdash.utils.MessageStack.getInstance().addDebug(sLogPrefix + " Applying user filters on " + dimId + ": [" + members.length + "]");
                              for(var j=0;j<members.length;j++){
                                  Packages.com.digdash.utils.MessageStack.getInstance().addDebug(sLogPrefix + " Applying user filters on " + dimId + ": [" + persoValuesTab[i] + "]");
              
                                  if(members[j].indexOf(persoValuesTab[i]) != -1){
                                      filterToSet.push(members[j]);
                                      Packages.com.digdash.utils.MessageStack.getInstance().addDebug(sLogPrefix + " Applying user filters on " + dimId + ": [" + members[j] + "]");
                                  }
                              }
                          }
                          
              			var exFilter = selection.filterByDimName[dimId];
              			if (!exFilter)
              			{
              				//there is no exisitng filter on that dimension => create a new one
              				var filt = new FilterSelection(dim, -1, -1, [], filterToSet);
              				selection.setFilter(filt);
              				//Packages.com.digdash.utils.MessageStack.getInstance().addDebug(sLogPrefix + " Resolved filters (members) on " + dimId + ": [" + persoValuesTab + "]");
              			}
              			else
              			{
              				//there is already a filter on that dimension => merge (intersect) into a new one
              				var filt = new FilterSelection(dim, -1, -1, [], filterToSet);
              				filt.recalcIds();
              				exFilter.recalcIds();
              				exFilter = mergeFilters(exFilter, filt);
              				selection.setFilter(exFilter);
              				//Packages.com.digdash.utils.MessageStack.getInstance().addDebug(sLogPrefix + " Resolved filters (origIds) on " + dimId + ": [" + exFilter.origIds + "]");
              			}
              		}
              		else // perso value is .*
              		{
              			// do nothing, user can see everything
              			//Packages.com.digdash.utils.MessageStack.getInstance().addDebug(sLogPrefix + " Resolved filters on " + dimId + ": All (.*)");
              		}
              	}
              	else
              	{
              		//Packages.com.digdash.utils.MessageStack.getInstance().addError(sLogPrefix + " Dimension " + dimId + "not found");
              	}
              }
              

              Cordialement,

              O
              O
              Olivier Le Boulch
              a écrit sur dernière édition par
              #6

              @Brenda Parfait merci beaucoup!

              Et en plus ça peut fonctionner sur plusieurs variables utilisateur
              Pour ma part, j'ai juste modifié la ligne suivante pour avoir la condition "commence par" plutôt que "contient"

              if(members[j].indexOf(persoValuesTab[i]) != -1){
              

              remplacé par

              if(members[j].indexOf(persoValuesTab[i]) == 0){
              
              B 1 réponse Dernière réponse
              0
              • O Olivier Le Boulch

                @Brenda Parfait merci beaucoup!

                Et en plus ça peut fonctionner sur plusieurs variables utilisateur
                Pour ma part, j'ai juste modifié la ligne suivante pour avoir la condition "commence par" plutôt que "contient"

                if(members[j].indexOf(persoValuesTab[i]) != -1){
                

                remplacé par

                if(members[j].indexOf(persoValuesTab[i]) == 0){
                
                B
                B
                Brenda
                a écrit sur dernière édition par
                #7

                @olivier-le-boulch

                Bonjour Olivier,
                Ravie de vous avoir aidé 🙂

                Pouvez-vous marquer le sujet en "Résolu" svp ?

                Merci.

                O 1 réponse Dernière réponse
                0
                • B Brenda

                  @olivier-le-boulch

                  Bonjour Olivier,
                  Ravie de vous avoir aidé 🙂

                  Pouvez-vous marquer le sujet en "Résolu" svp ?

                  Merci.

                  O
                  O
                  Olivier Le Boulch
                  a écrit sur dernière édition par
                  #8

                  @brenda je ne sais pas passer un sujet à "Résolu"

                  Pourriez-vous m'indiquer comment faire?

                  B 1 réponse Dernière réponse
                  0
                  • O Olivier Le Boulch

                    @brenda je ne sais pas passer un sujet à "Résolu"

                    Pourriez-vous m'indiquer comment faire?

                    B
                    B
                    Brenda
                    a écrit sur dernière édition par
                    #9

                    @olivier-le-boulch

                    Bonjour Olivier,

                    Vous pouvez cliquer sur les trois petits points et choisir l'option:

                    516bdfde-18a2-4343-ab86-6f7c01ab326e-image.png

                    Merci.

                    O 1 réponse Dernière réponse
                    0
                    • B Brenda

                      @olivier-le-boulch

                      Bonjour Olivier,

                      Vous pouvez cliquer sur les trois petits points et choisir l'option:

                      516bdfde-18a2-4343-ab86-6f7c01ab326e-image.png

                      Merci.

                      O
                      O
                      Olivier Le Boulch
                      a écrit sur dernière édition par
                      #10

                      @brenda Malheureusement je n'ai pas d'option "Résolu" ou équivalent...

                      3b332117-5f5f-4258-9275-f1f28a8fa55b-image.png

                      1 réponse Dernière réponse
                      0

                      Bonjour ! Vous semblez intéressé par cette conversation, mais vous n’avez pas encore de compte.

                      Marre de refaire défiler les mêmes messages ? Créez un compte pour retrouver votre position, recevoir des notifications des nouvelles réponses, sauvegarder vos favoris et voter pour les messages que vous appréciez.

                      Grâce à votre participation, ce message peut devenir encore meilleur 💗

                      S'inscrire Se connecter
                      Répondre
                      • Répondre à l'aide d'un nouveau sujet
                      Se connecter pour répondre
                      • Du plus ancien au plus récent
                      • Du plus récent au plus ancien
                      • Les plus votés


                      • Accueil
                      • Webinaires
                      • Documentation
                      • Interviews
                      • Vidéos tutos
                      • Se connecter

                      • Vous n'avez pas de compte ? S'inscrire

                      • Connectez-vous ou inscrivez-vous pour faire une recherche.
                      • Premier message
                        Dernier message
                      0
                      • Catégories
                      • Récent
                      • Mots-clés
                      • Populaire
                      • Utilisateurs
                      • Groupes