2016-07-12 10 views
5

Próbuję porównać dane prognozy z danymi sprzedaży w kostce. Czasami mamy prognozę bez faktycznej sprzedaży, czasami mamy sprzedaż bez prognozy. Jak wyświetlić 0%, jeśli jedna lub druga nie istnieje? To jest mój obecny kod ... Zielone linie są w porządku, ponieważ pokazują 0% tam, gdzie jedna z kwot nie istnieje. Chcę, żeby zrobił to samo dla czerwonych kół.Usługi SSAS dotyczące niepołączonych danych

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 - jeśli obie wartości środka nie istnieć będą zarówno być null i nie będzie wyświetlana. Więc nie chciałbym, aby wartość procentowa była wyświetlana i chcę wykonać obliczenia tylko wtedy, gdy jedna z wartości nie wynosi 0. Prognoza dokładności nie powinna wskazywać 100%, jeśli f jest równe 0 i jest sprzedaż, jak pokazano w ostatnim img ... to jest ostatnia rzecz, aby poprawić ...

enter image description here

+0

0,00% jest zwracany, gdy '1-ABS (dzielenie (([środki] [F Amount] - [środki] [Sprzedaż Linia Kwota TCUSD SF]), [Measures]. [F Amount])) 'zwraca 0. Puste jest zwracane po napotkaniu wartości NULL. Jaki jest problem z tym? – SouravA

+0

@BeanFrog - nie może. Istnieją rzeczywiste dane "0". – SouravA

+0

Nie chcę pustych miejsc. Jeśli któraś z kwot nie istnieje, chcę pokazać 0%. Jeśli zmienię wartość NULL na 0, to wypełnię puste miejsce wartością 0, a SSAS pokaże wszystkie wiersze, niezależnie od tego, czy jest miara, czy nie, – jhowe

Odpowiedz

3

wolę bezpieczeństwo 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' ; 

nieco bardziej skomplikowany:

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

Cześć, nie jestem pewien czy dobrze przeczytałeś pytanie , Chcę, aby obliczenia zadziałały, jeśli jeden ze środków nie jest równy 0 Nie chcę również wypełniać wszystkich miar wartościami 0, ponieważ spowoduje to wprowadzenie wszystkich elementów, niezależnie od tego, czy są one używane, czy nie. Wszystko, co chcę zrobić, to po prostu dodać 0 do wierszy, w których są puste, jak zaznaczono na zdjęciu – jhowe

+0

, kiedy mówisz "Wszystko, co chcę zrobić, to po prostu dodać 0 do wierszy, w których są puste" czy rzeczywiście masz na myśli " Wszystko, co chcę zrobić, to po prostu dodać 0 dla wierszy, w których są puste lub 0 "? – whytheq

+0

cześć Myślę, że pierwszy przykład zrobi to, co chcę, ale nie mogę przetestować drugiego, ale jest błąd przed drugim IIF i jaka jest różnica między NOT ISEMPTY i NONEMPTY? otrzymywałem różne wyniki ... – jhowe

2

Myślę, że odpowiedź Whytheqa zrobiła większość z tego. Jedyne, czego potrzebowałeś, to sprawdzenie, czy obie wartości są większe od zera, aby zwrócić wynik, i tak, będzie działać z dowolnym wymiarem dozwolonym przez Twój model SSAS. Coś jak poniżej powinny dać ci to, czego potrzebujesz:..

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

Skończyło się na używaniu zakresu, aby poprawić wyświetlane informacje ... – jhowe

Powiązane problemy