2017-10-02 16 views
0

Je voudrais calculer une différence de valeur entre deux lignes classées par Type et ID et triée par colonne de date. Voir l'exemple de tableau de données. Notez que la colonne "Calculé" montre les résultats actuels, tandis que la colonne "Prévu" montre les résultats que j'aimerais obtenir.Spotfire sur la fonction - date précédente avec plusieurs catégories

ID Type Date  ValueA ValueB ValueC Calculated Expected 
1 A  8/15/2017 38.11     
1 A  8/15/2017 78.10        39.99 
1 A  8/22/2017 110.24        32.14 
1 B  8/22/2017   20 
1 B  9/16/2017   10 
1 A  9/16/2017 101.13        -9.11 
2 C  8/17/2012     90 
2 A  8/18/2012 863.25    
2 B  8/18/2012   15 
2 A  8/19/2012 952.35     89.1  89.1 
2 B  8/19/2012   20 

J'ai essayé l'expression personnalisée suivante, mais il semble calculer une valeur de différence que pour les cas où il y a une date consécutive pour un ID donné.

Case 

when [Type]="A" then [Value] - Max([Value]) over (Intersect([ID],Previous([Date]))) 

else NULL 

L'expression est une tentative de filtrer au type « A » pour la déclaration OVER, de sorte que la date précédente est la date précédente que pour des valeurs classées dans la catégorie de type « A ». Cependant, il semble considérer la date précédente comme NULL si elle n'est pas une date consécutive (c'est-à-dire le jour précédent). Voir "Calculé" dans le tableau ci-dessus pour les résultats de cette expression.

J'ai également essayé d'ajouter Type à l'instruction Intersect, par ex. Intersection ([ID], [Type], Précédent ([Date]), mais je reçois un résultat similaire

+0

donc la valeur n'est pas toujours remplie? quel est le résultat attendu ? – scsimon

+0

J'ai mis à jour le post pour répondre à vos questions. Ajout de plusieurs colonnes de valeurs correspondant aux types différents. Ainsi, une colonne de valeur sera remplie dans une ligne pour seulement le type respectif, sinon null. J'ai également ajouté une colonne appelée "Expected" pour montrer le résultat que j'aimerais atteindre. –

Répondre

0

-t

[value] - max[value] over (intersect([Type],[ID],previous([Date]))) 

vous donne la colonne calculée vous voulez

Edit:. J'ai été en mesure de faire correspondre presque votre colonne prévue en utilisant cette formule (previousperiod au lieu de juste précédent), mais les deux premières lignes sont la même date donc ce n'est pas une correspondance exacte

+0

J'ai mis à jour mon message pour répondre à votre réponse. Il semble qu'inclure à la fois Type et ID dans l'instruction Intersect ne modifie pas le résultat. –

+0

J'ai mis à jour ma réponse avec une image d'une réponse approximative –

+0

J'ai essayé le script et peux récupérer vos résultats sur la table d'exemple que j'ai fournie. Le problème est que ma table actuelle est beaucoup plus compliquée que l'exemple que j'ai fourni, ayant un nombre significatif de "DataType" différents et de "Dates" intermédiaires avec de nombreuses valeurs NULL dans la colonne que j'essaie d'évaluer. Donc, le script fonctionne plus ou moins sur la table simple, mais pas sur la table réelle dans mon analyse. –