2010-09-08 5 views
1

J'ai un cube avec une structure d'instantané typique et une granularité quotidienne (comme les quantités d'inventaire). J'aimerais pouvoir supprimer certaines données granulaires de ce cube, car nous avons quelque chose comme 270 000 000 lignes de données sources, le traitement du cube est lent et il n'y a pas de différence significative d'un point de données à l'autre, à le niveau du jour. Cependant, les utilisateurs veulent un niveau de détail graduel - des détails quotidiens pour le passé récent, puis mensuels ou trimestriels pour les périodes plus anciennes. Faire cela aiderait la situation MAIS - ils veulent aussi des graphiques qui "apparaissent" pour montrer des données pour chaque point de données et ne pas avoir de "trous" entre un point de données et le suivant. Donc, voici la question: si j'ai un cube avec une table de faits instantanés, et que le tableau a des valeurs journalières pour les 30 derniers jours, alors les valeurs mensuelles pour 6 mois, puis les valeurs trimestrielles pour les deux années précédentes, y a-t-il Est-il possible de rendre "spoof" les écarts par la sortie du cube, en répétant la dernière valeur de snapshot pour chaque jour "vide"? En d'autres termes, si je livre un graphique sur toute la période, je veux qu'il ait des plateaux qui répètent la dernière valeur non vide à travers chaque trou dans les données, mais sans encourir la peine de stockage de conserver toutes ces valeurs.SSAS Comment "remplir" des faits d'instantané en répétant la dernière valeur non vide

Répondre

0

Je suis proche de ça. Apparu avec le type d'expression récursive suivant, qui semble fonctionner (surtout). J'ai essayé de substituer dans la fonction ClosingPeriod() pour ranger, mais ce bit ne fonctionne pas:

/* Works! */ 
with member Measures.lastEstatementsCount as 
iif( 
    isleaf([Date].[Calendar].currentmember), 

    iif(
     isempty([Measures].[_Add E Statements Count]), 
     ([Date].[Calendar].prevmember, Measures.[lastEstatementsCount]), 
     Measures.[_Add E Statements Count] 
    ), 

    ( 
     (tail(descendants([Date].[Calendar].currentmember))).item(0), 
      Measures.[lastEstatementsCount] 
    ) 
) 
select 
    Measures.lastEstatementsCount on columns, 
    [Date].[Calendar].[Month Name] on rows 
from [EngagedMember]; 


/* Substituting ClosingPeriod() in the recursion doesn't for some reason */ 
with member Measures.lastEstatementsCount as 
iif( 
    isleaf([Date].[Calendar].currentmember), 

    iif(
     isempty([Measures].[_Add E Statements Count]), 
     ([Date].[Calendar].prevmember, Measures.[lastEstatementsCount]), 
     Measures.[_Add E Statements Count] 
    ), 

    ( 
     ClosingPeriod([Date].[Calendar].[Date], [Date].[Calendar].currentmember), 
      Measures.[lastEstatementsCount] 
    ) 
) 
select 
    Measures.lastEstatementsCount on columns, 
    [Date].[Calendar].[Month Name] on rows 
from [EngagedMember]; 
0

Vous pouvez dans le cube utiliser une mesure calculée par MDX pour le niveau de jour, qui recherche le dernier point de données disponible.

Je ne sais pas si cette idée est utile, mais c'est là que je commencerais à chercher.