Navigation

    Communauté Digdash

    • Register
    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups

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

    Éditeur de Tableaux de Bord
    4
    10
    1371
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • J
      jperret last edited by

      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 Reply Last reply Reply Quote 0
      • J
        Johnny Nguyen Expert DigDash last edited by

        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 Reply Last reply Reply Quote 1
        • J
          Johnny Nguyen Expert DigDash last edited by

          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 Reply Last reply Reply Quote 1
          • B
            Brenda @Johnny Nguyen last edited by 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 1 Reply Last reply Reply Quote 1
            • O
              Olivier Le Boulch @Johnny Nguyen last edited by

              @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 Reply Last reply Reply Quote 0
              • J
                Johnny Nguyen Expert DigDash @Olivier Le Boulch last edited by

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

                B 1 Reply Last reply Reply Quote 0
                • O
                  Olivier Le Boulch @Brenda last edited by

                  @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 Reply Last reply Reply Quote 0
                  • B
                    Brenda @Olivier Le Boulch last edited by

                    @olivier-le-boulch

                    Bonjour Olivier,
                    Ravie de vous avoir aidé 🙂

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

                    Merci.

                    O 1 Reply Last reply Reply Quote 0
                    • O
                      Olivier Le Boulch @Brenda last edited by

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

                      Pourriez-vous m'indiquer comment faire?

                      B 1 Reply Last reply Reply Quote 0
                      • B
                        Brenda @Olivier Le Boulch last edited by

                        @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 Reply Last reply Reply Quote 0
                        • O
                          Olivier Le Boulch @Brenda last edited by

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

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

                          1 Reply Last reply Reply Quote 0
                          • 1 / 1
                          • First post
                            Last post
                          • Accueil
                          • Webinaires
                          • Documentation
                          • Interviews
                          • Vidéos tutos