Navigation

    Communauté Digdash

    • S'inscrire
    • Se connecter
    • Recherche
    • Catégories
    • Récent
    • Mots-clés
    • Populaire
    • Utilisateurs
    • Groupes

    RÉSOLU Appliquer un filtre "contient" sur une dimension via du JS

    Éditeur de Tableaux de Bord
    4
    10
    750
    Charger plus de messages
    • 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
      jperret dernière édition par

      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 Répondre Citer 0
      • J
        Johnny Nguyen Expert DigDash dernière édition par

        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 Répondre Citer 1
        • J
          Johnny Nguyen Expert DigDash dernière édition par

          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 Répondre Citer 1
          • B
            Brenda @Johnny Nguyen dernière édition par 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 réponse Dernière réponse Répondre Citer 1
            • O
              Olivier Le Boulch @Johnny Nguyen dernière édition par

              @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 Répondre Citer 0
              • J
                Johnny Nguyen Expert DigDash @Olivier Le Boulch dernière édition par

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

                B 1 réponse Dernière réponse Répondre Citer 0
                • O
                  Olivier Le Boulch @Brenda dernière édition par

                  @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 Répondre Citer 0
                  • B
                    Brenda @Olivier Le Boulch dernière édition par

                    @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 Répondre Citer 0
                    • O
                      Olivier Le Boulch @Brenda dernière édition par

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

                      Pourriez-vous m'indiquer comment faire?

                      B 1 réponse Dernière réponse Répondre Citer 0
                      • B
                        Brenda @Olivier Le Boulch dernière édition par

                        @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 Répondre Citer 0
                        • O
                          Olivier Le Boulch @Brenda dernière édition par

                          @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 Répondre Citer 0
                          • 1 / 1
                          • Premier message
                            Dernier message
                          • Accueil
                          • Webinaires
                          • Documentation
                          • Interviews
                          • Vidéos tutos