2016-07-12 55 views
5

Sto provando a confrontare i dati di previsione con i dati di vendita in un cubo. A volte abbiamo una previsione senza una vendita effettiva, a volte abbiamo una vendita senza previsione. Come si fa a mostrare lo 0% se uno o l'altro non esiste? Questo è il mio codice corrente ... Le linee verdi sono ok perché sta mostrando 0% dove una delle quantità non esiste. Voglio che faccia lo stesso per quelli rossi cerchiati.SSAS che si occupa di dati non collegati

CREATE MEMBER CURRENTCUBE.[Measures].[Forecast Accuracy Amount %] 
AS IIF([Measures].[Sales Line Amount TCUSD SF] <> 0 OR [Measures].[F Amount] <> 0, 1-ABS(DIVIDE(([Measures].[F Amount] - [Measures].[Sales Line Amount TCUSD SF]) , [Measures].[F Amount])), NULL), 
FORMAT_STRING = "Percent", 
VISIBLE = 1 , ASSOCIATED_MEASURE_GROUP = 'Sales Forecast' ; 

enter image description here

EDIT - se non esistono entrambi i valori di misura che sarebbero entrambi nulli e non venivano visualizzati. Quindi non vorrei che fosse visualizzata la percentuale e voglio solo fare il calcolo se una delle quantità non è 0. La precisione della previsione non dovrebbe mostrare il 100% se l'importo di f è 0 e c'è una vendita come mostrato nell'ultima img ... questa è l'ultima cosa da correggere ...

enter image description here

+0

0,00% viene restituito quando '1-ABS (divisione (([Measures] [F Importo] - [Misure] [Linea Sales Amount TCUSD SF]), [Misure]. [F Importo])) restituisce 0. Viene restituito uno spazio quando viene rilevato un valore NULL. Qual è il problema con questo? – SouravA

+0

@BeanFrog - non può. Vi sono dati "0" effettivi. – SouravA

+0

Non voglio spazi vuoti. Se uno degli importi non esiste, voglio mostrare lo 0%. Se cambio il NULL a 0 riempirà tutto lo spazio vuoto con 0 e SSAS mostrerà tutte le linee indipendentemente dal fatto che ci sia o meno una misura – jhowe

risposta

3

preferisco la sicurezza dei ISEMPTY:

CREATE MEMBER CURRENTCUBE.[Measures].[Forecast Accuracy Amount %] 
AS 
IIF(
    NOT ISEMPTY([Measures].[Sales Line Amount TCUSD SF]) 
    OR 
    NOT ISEMPTY([Measures].[F Amount]) 
    , 1-ABS(DIVIDE(
      [Measures].[F Amount] - [Measures].[Sales Line Amount TCUSD SF] 
      ,[Measures].[F Amount] 
      ) 
     ) 
    ,NULL 
), 
FORMAT_STRING = "Percent", 
VISIBLE = 1 , ASSOCIATED_MEASURE_GROUP = 'Sales Forecast' ; 

Un po 'più complicato:

CREATE MEMBER CURRENTCUBE.[Measures].[Forecast Accuracy Amount %] 
AS 
IIF(
    ISEMPTY([Measures].[Sales Line Amount TCUSD SF]) 
    AND 
    ISEMPTY([Measures].[F Amount]) 
    , NULL //<<if both are empty 
    , IIF(
     NOT ISEMPTY([Measures].[Sales Line Amount TCUSD SF]) 
     OR 
     NOT ISEMPTY([Measures].[F Amount]) 
     ,1-ABS(
      DIVIDE(
      [Measures].[F Amount] - [Measures].[Sales Line Amount TCUSD SF] 
      ,[Measures].[F Amount] 
     ) 
     ) 
     ,0 
    ) 
    ), 
FORMAT_STRING = "Percent", 
VISIBLE = 1 , ASSOCIATED_MEASURE_GROUP = 'Sales Forecast' ; 
+0

Ciao, non sono sicuro che tu abbia letto correttamente la domanda , Voglio che il calcolo funzioni, se quello delle misure non è 0, non voglio riempire tutte le misure con gli 0 in quanto porterà in tutte le voci indipendentemente dal fatto che siano usate o meno. Tutto quello che voglio fare è semplicemente aggiungere uno 0 per le righe in cui sono vuote come evidenziato nella foto – jhowe

+0

quando dici "Tutto quello che voglio fare è semplicemente aggiungere uno 0 per le righe dove sono vuote" intendi davvero " Tutto quello che voglio fare è semplicemente aggiungere uno 0 per le righe dove sono vuoti o 0 "? – whytheq

+0

ciao penso che il primo esempio farà quello che voglio ma non posso testare il secondo c'è un errore prima del secondo IIF e qual è la differenza tra NOT ISEMPTY e NONEMPTY? Stavo ottenendo risultati diversi ... – jhowe

2

Penso che la risposta di whytheq abbia fatto la maggior parte di esso. L'unica cosa che ritenevo necessaria era controllare se entrambi i valori sono più di zero per restituire un punteggio, e sì, funzionerà con qualsiasi dimensione consentita dal modello SSAS. Qualcosa di simile alla seguente dovrebbe darvi quello che vi serve:..

CREATE MEMBER CURRENTCUBE.[Measures].[Forecast Accuracy Amount %] 
AS 
IIF(
    ISEMPTY([Measures].[Sales Line Amount TCUSD SF]) 
    AND 
    ISEMPTY([Measures].[F Amount]) 
    , NULL //<<if both are empty 
    , IIF( 
      //Getting here means, at minimum, one of the measures is not empty 
      // Calculate the score only if both values are non equal to zero otherwise default to zero 
      [Measures].[F Amount] <> 0 AND 
      [Measures].[Sales Line Amount TCUSD SF] <>0 
     ,1-ABS(
      DIVIDE(
      [Measures].[F Amount] - [Measures].[Sales Line Amount TCUSD SF] 
      ,[Measures].[F Amount] 
     ) 
     ) 
     ,0 
    ) 
    ), 
FORMAT_STRING = "Percent", 
VISIBLE = 1 , ASSOCIATED_MEASURE_GROUP = 'Sales Forecast' ; 
+0

ho finito per usare scope per correggere le informazioni visualizzate ... – jhowe