2012-03-30 2 views
0

Je modélise un cube contenant des données d'inventaire. Par souci de simplicité, nous essayons de maintenir une dimension de date. Certaines de ces mesures contiennent le niveau de stock.SSAS - Date Dimension indiquant les valeurs futures non appropriées

Les utilisateurs finaux utilisent Excel pour visualiser les données des services d'analyse. Ce que je veux faire est d'arrêter cette dimension de montrer les valeurs où les transactions stock réelles se terminent.

Il existe d'autres mesures dans le cube qui nécessitent des informations futures. Par conséquent, la suppression de toutes les entrées de date dans le futur n'est pas autorisée.

Un exemple de mesure simplifiée:

CREATE [Measures].[Quantity On Hand]; 
SCOPE ([Measures].[Quantity On Hand]); 
    this = Aggregate(null:[Transaction Date].[Year - Quarter - Month].CurrentMember, [Measures].[Quantity Purchased]) 
      - Aggregate(null:[Transaction Date].[Year - Quarter - Month].CurrentMember, [Measures].[Quantity Sold]) 
    FORMAT_STRING(this) = "#,#.00;-#,#.00; "; 
END SCOPE; 

La dimension de date contient des dates futures.

Puis-je faire en sorte que la cote [Transaction Date] cesse d'afficher les informations après la dernière transaction de cette mesure (Date de la transaction la plus élevée dans la table de faits)?

Répondre

1

Vous devriez pouvoir utiliser la fonction CLOSINGPERIOD(Dim,Measure). Il affichera le dernier membre sur la dimension temporelle où la mesure est utilisée. Dans votre cas, la dernière entrée pour Quantité en stock ou Quantité vendue. Utilisez ceci comme une vérification pour ne pas calculer pour les dates futures. De même, si vous ne chargez aucune date future, vous pouvez également utiliser "aujourd'hui" comme contrôle pour ne pas charger de dates futures: StrToMember("[Time].[Day].&[" + Format(Now(), "yyyyMMdd") + "]") - où yyyyMMdd est le format que vous utilisez pour les niveaux de jour.

Questions connexes