2016-09-06 1 views
1

J'ai un problème sur le calcul de la somme pour les lignes en utilisant la colonne calculée dans Spotfire.calculer la valeur totale pour chaque groupe en utilisant Colonne calculée dans Spotfire

Par exemple, les données brutes sont comme ci-dessous, la table brute est classée par ID, pour chaque type, la séquence est 2,3,0.

id  type value state 
1  1 12 2 
2  1 7 3 
3  1 10 0 
4  2 11 2 
5  2 6 3 
6  3 9 0 
7  3 7 2 
8  3 5 3 
9  2 9 0 
10  1 7 2 
11  1 3 3 
12  1 2 0 

pour le type de chaque cycle de (2,3,0), je veux résumer la valeur, le résultat pourrait être:

id  type value state cycle time 
1  1 12 2 
2  1 7 3 
3  1 10 0  29 
4  2 11 2 
5  2 6 3 
6  3 7 2    
7  3 5 3 
8  3 9 0  21 
9  2 9 0  26 
10  2 7 2 
11  2 3 3 
12  2 2 0  12 

Note: seule la ligne que son état est 0 aura la valeur de somme, je pense que ce sera plus facile de voir les règles, quand nous commandons le type :

id  type value state cycle time 
1  1 12 2 
2  1 7 3 
3  1 10 0  29 
4  2 11 2 
5  2 6 3 
9  2 9 0  26 
10  2 7 2 
11  2 3 3 
12  2 2 0  12 
6  3 7 2    
7  3 5 3 
8  3 9 0  21 

merci pour votre temps et votre aide!

Répondre

1

Voici une solution pour vous.

  1. Insérer une colonne calculée RowId() et nommez-rowid
  2. Insérer une colonne calculée If(Mod([RowId],3)=0,[RowId]/3,Ceiling([RowId]/3)) et nommez-Groupes
  3. Insérer une colonne calculée Sum([value]) OVER ([Groups]) et nommez-Exécution Somme
  4. Insérer une colonne calculée If([state] = 0,[RunningSum]) et nommez-la OnlyState = 0

La seule chose à expliquer vraiment ici est # 2. Avec les données triées comme vous l'avez indiqué dans votre exemple, la dernière ligne de chaque groupe, basée sur RowId, devrait être divisible par 3. Nous devons le faire de cette façon puisque votre champ de type peut avoir plusieurs groupes pour un type donné. RowId 3, 6, 9, 12 etc auront tous un module de 0 puisqu'ils sont divisibles par 3. Ceci marque la dernière ligne de chaque ensemble. Si c'est la dernière ligne, on l'a simplement mise à RowId/3. Cela nous donne des groupes 1,2,3,4 etc ... Pour les lignes qui ne sont pas divisibles par 3, on les arrondit au plus proche numéro du diviseur ... qui sera la dernière rangée de l'ensemble.

La dernière colonne calculée est la seule façon dont je sais obtenir uniquement les valeurs qui vous intéressent. Si vous utilisez la logique If [state] = 0 ailleurs, vous annulez toutes les autres lignes.

enter image description here

+0

Salut Merci pour la solution, mais en réalité l'ordre par défaut de ce tableau est un peu par id, lors de l'insertion de la colonne RowId, il est même avec la colonne id – ZAWD

+0

@ZAWD vous allez devoir trier les données avant de l'importer dans Spotfire. Il n'y a pas moyen de contourner cela. – scsimon

+0

okok, merci et je l'ai essayé juste en doc csv, puis importer à nouveau dans spotfire, et ça marche :) – ZAWD