mardi 31 juillet 2012

Script d'extraction avec conservation de la dimension.

Objectif : Extraire une liste de lignes / colonnes en conservant de la dimension d'extraction. Les éléments absents générant une ligne / colonne vide.

Script :

Exemple d'extraction des colonnes.

t = ARG1

def
 GetIndex(x):
 if x in t.Columns.Texts:
  return '"' + x + '"'
 else:
  return 0


marques = (
"Ensemble","Marque 1","Marque 2" [...] "Marque N" )
t = t.Columns[[GetIndex(x) for x in marques]]

for
 i in Range(1, len(marques)):
 SetColumnText(t, i, marques[i - 1].Trim('"'))

RESULT = t

mardi 14 février 2012

Apparier à partir d'une table de correspondance

Objectif : Concaténer des informations provenant de deux tableaux distincts (magasins / régions) à l'aide d'un tableau de correspondances.

Tableaux en entrée :

1) Un tableau contenant les informations régions.



2) Un tableau contenant les informations magasins.



Attention, les tableaux magasins et régions doivent avoir le même nombre de lignes.

3) Un tableau de correspondance.



Transformation :



Elle consiste à produire un tableau par magasin associé à sa région de référence.

Le tableau final aura pour structure :
- La première colonne correspondant au magasin
- La seconde colonne correspondant à sa région de référence

Script :

01:#Arguments
02:# 1 - Tableau des magasins
03:t1 = ARG1
04:# 2 - Tableau des régions
05:t2 = ARG2
06:# 3 - Tableau des correspondances
07:lk = ARG3
08:#Initialisation de la liste
09:lst = []

10:for
i in Range(1, (t1.Columns.Size)):
11:#Reprise du magasin
12: nom_etab = GetColumnText(t1 ,i)
13:#Reprise de la région
14: nom_reg = GetColumnText(t2 ,i)
15:#Recherche de la région concernée dans la table de correspondances
16: codes = ['"' + x + '" ' for x in lk.Rows['"' + nom_etab + '"'].Texts]
17:#Concaténation du magasin et de sa région associée
18: c = MergeColumns(t1.Columns[i],t2.Columns[codes])
19:#Reprise des annotations
20: c.Annotations["NOMMAG"] = nom_etab
21: c.Annotations["NOMREG"] = FirstOf (lk.Rows['"' + nom_etab + '"'].Texts)
22:#Stockage des tableaux
23: lst.Add(c)
25:
26:RESULT = lst

Résultats :

Cette transformation produit autant de tableaux que de magasins présents.
Dans notre cas, elle produira donc 5 tableaux.

vendredi 20 mai 2011

Les méthodes d'extractions dans Slidie

Les différentes méthodes d'extractions de modalités dans Slidie :


  • 1 2 -> Extrait les deux premières lignes / colonnes / calculs / pages
  • "Marque" -> Extrait la ligne / colonne / calcul / page ayant pour texte "Marque"
  • -1 -> Extrait le dernier item
  • $"Le*" -> Extrait les items débutants par le texte "Le"
  • $"*le*" -> Extrait les items contenant le texte "Le". "Elle", "épeler", "lettre" seront conservés.
  • $"*le" -> Extrait les items finissant par le texte "Le"
  • 3..5 -> Extrait les items de 3 à 5
  • "Marque".2 -> Extrait le second item du sous-titres "Marque"
Pour tous les extractions textuelles, la casse n'a pas d'importance.

mardi 15 mars 2011

Mise en forme conditionnelle d'un tableau par rapport à une colonne de référence

Objectif : Appliquer des couleurs de fonds de cellules d'un tableau selon un calcul de différence de pourcentages par rapport à une colonne de référence.

Tableau en entrée :



La colonne de référence est la colonne "Ensemble".
L'objectif est de coloriser les fonds de cellules en rouge / vert quand la différence est inférieure / supérieure de 15% à la colonne ensemble.

Première étape : Script de calcul

# Récupération du tableau
t = ARG1

# Seuil de comparaison par rapport (0.15 car les nombres sont au format pourcentage)
SEUILCOMP = 0.15

# Récupération de la première colonne de référence
Base = t.Columns[1].Calculations["CALC1"]

# Récupération des autres colonnes à tester contre la colonne de référence
Crit = t.Columns.Remove(1).Calculations["CALC1"]

# Calcul de la différence entre le critère et la base
delta = Crit - Base

#Fonction de transformation du delta
def ApplyThreshold(x, s):
if x >= s:
return "Pos"
elif x <= -s:
return "Neg"
return ""

#Application de la fonction valeurs par valeurs
delta.ChangeValues(lambda x: ApplyThreshold(x, SEUILCOMP))

# Résultat final avec stockage d'un nouveau calcul résultat : "DELTA"
t = MergeCalculations (t.Calculations["CALC1"],MergeColumns (Base,delta))
SetCalculationText (t, 2, "DELTA")

RESULT = t


Seconde étape : Mise en forme



Cette étape se décompose en 3 blocs :

  • Mise en forme des calculs (%)

  • Mise en forme des valeurs

  • Suppression du calcul "DELTA"


Détails de la mise en forme des valeurs :



Résultat :


Trier un tableau avec deux clés de tris

Objectif : Trier un tableau selon le "total ++" et, en cas d'égalité, sur le "total ++"

Tableau d'entrée :




Script de transformation :

# Récupération du tableau
t = ARG1

# Liste des valeurs de la première colonne de tri
col1 = list(t.Columns[1].Values)

# Liste des valeurs de la seconde colonne de tri
col2 = list(t.Columns[2].Values)

# Liste des positions de 1 au nombre de lignes
positions = list(Range(1, t.Rows.Size))

# Tri de la liste des positions selon les deux clés de tri
positions.sort(key = lambda x: (col1[x-1], col2[x-1]), reverse = True)

# Récapitulatif du nouvelle ordre des postions
log.Info(positions)

# Extraction du tableau selon le vecteur de positions ordonnées par le tri.
RESULT = t.Rows[positions]


Résultat :

mardi 14 septembre 2010

Mise en forme du mini / maxi dans une colonne de tableau

Objectif : Mise en couleur du minimum (rouge) et du maximum (vert) des colonnes d'un tableau.

Par exemple, le tableau suivant en entrée :



Etape 1 : Calcul du mini / maxi de chaque colonne dans un nouveau calcul via un script Python.

# Reprise du tableau
t = ARG1

# Consolidation du premier calcul
# Cette étape permet de fixer le premier calcul tel quel
n = t.Calculations[1].Consolidate()

# Calcul du mini et du maxi par ligne
mini = n.Rows.Min

maxi = n.Rows.Max

# Localisation du minimum et du maximum dans le tableau initial
mini = (n <= mini) * -1
maxi = (n >= maxi) * 1

# Concaténation des minimums et des maximums
# -1 pour la ou les valeur(s) minimum
# 1 pour la ou les valeur(s) maximum
# 0 pour les autres valeurs
n = mini + maxi

# Rajout du nouveau calcul au tableau initial
SetCalculationText(n, 1, "BORNES")

# Stockage du tableau
RESULT = MergeCalculations(t, n)


Etape 2 : Mise en forme des valeurs minimum et maximum:

  • Les valeurs minimum en rouge

  • Les valeurs maximum en vert


La propagation est nécessaire sur l'ensemble des calculs.
Les minimums seront identifiés en rouge et gras.
Les maximums seront identifiés en vert et gras.

Etape 3 : Suppression du calcul de minimums et maximums nommé '2' ou "BORNES".

Résultat :

jeudi 2 septembre 2010

Reprise d'un annotation textuelle

Objectif : Reprise d'information en provenance d'un tableau dans une zone textuelle.


Etape 1 : Indiquer des tags dans la zone de texte Powerpoint

1 - Dans le menu Format de Powerpoint 2007, sélectionner la rubrique Taille.
2 - Dans la boîte de dialogue qui s'affiche, sélectionner l'onglet 'Texte de remplacement'
3 - Indiquer les informations suivantes :



Le Tag peut être le mot clé de votre choix mais il doit être entouré de crochets [].

Etape 2 : Définir la zone graphique transparente à côté de la zone de texte qui sera associé au tableau issu de Slidie qui calculera les parts de marché des marques.

Etape 3 : Dans Slidie, création de la transformation permettant de remplir les annotations.

Soit le tableau suivant en entrée dans Slidie


Part de Marché
Marque 1 25,5
Marque 2 9,8
Marque 3 7,9
Marque Autres 56,8

1 - Création des annotations.

La récupération des annotations se fait par l'intermédiaire d'un script Python :

# Récupération du tableau
t = ARG1

# Récupération du tableau
# FirstOf prend la première valeur d'une énumération
# ToString("0.0'%'") permet de fixer le format de l'annotation
# Règles d'extractions :
# Extraction des colonnes : t.Columns[i]
# Extraction des lignes : t.Rows[i]
# Extraction des calculs : t.Calculations[i]

t.Annotations["TAG1"] = FirstOf((t.Columns[1].Rows[1].Calculations[1].Values)).ToString("0.0'%'")
t.Annotations["TAG2"] = FirstOf((t.Columns[1].Rows[2].Calculations[1].Values)).ToString("0.0'%'")
t.Annotations["TAG3"] = FirstOf((t.Columns[1].Rows[3].Calculations[1].Values)).ToString("0.0'%'")
t.Annotations["TAG4"] = FirstOf((t.Columns[1].Rows[4].Calculations[1].Values)).ToString("0.0'%'")

# Stockage du tableau
RESULT = t


2 - Vidage du tableau

Ici également, il faut utiliser un script PYTHON pour vider complétement le tableau.

# Récupération du tableau
t = ARG1

# Extraction d'une seule cellule du tableau
t = t.Columns[1].Rows[1].Calculations[1]
# Suppression des textes colonnes
t.Columns.Texts = Enumerate("")
# Suppression des textes lignes
t.Rows.Texts = Enumerate("")
# Mis à blanc des valeurs
t.Values = Enumerate("")

# Stockage du tableau
RESULT = t


3 - Le tableau ainsi généré peut maintenant être associé au graphique Powerpoint "à blanc" dans l'assistant rapport. Le résultat des annotations est le suivant :