none
SSAS - Calculations RRS feed

  • Allgemeine Diskussion

  • moin moin,

    ich hoffe, ich bin hier richtig mit meiner Frage ;-)

    ich bin dabei unter VS ne neuen CALCULATE in dem Cube zu erstellen. Die Calculations soll zwei zahlen dividieren. Dabei ist die Dividend kleiner als Divisor. Die Attribute sind als INT in DB hinterlegt. wenn ich sie SQL Query als flat caste kriege ich mein Ergebnis (siehe SQL).

    select 
             sum(tem.Datensätze_netto) as 'Datensätze_netto'
    	,sum(tem.netto) as 'netto'
    	,(sum(tem.netto)  / sum(tem.Datensätze_netto)) * 100 as 'Anteil Nettos'
    	,(cast(sum(tem.netto) as float) / cast(sum(tem.Datensätze_netto)as float)) * 100 as 'Anteil Nettos'
    	FROM (
    SELECT   *  FROM [My Table]) tem


    nun möchte ich neuen Measure in SSAS berechnen (siehe Bild). (sum([Measure].[Netto]) / sum([Measure].[Daatensätze Netto])) 

    Der Cube läuft Ohne Fehler, aber als Ergebnis im Report bekomme '#WERT!'

    kann jemand mir helfen?

    SSAS - Calculations

    Danke und VG

    fabi

    Donnerstag, 10. August 2017 10:37

Alle Antworten

  • Könnte sein, das sum(Netto) mal 0 ergibt?
    Division durch 0 ist nicht erlaubt und meist stirbt der SQL dann und es werden keine Werte mehr geliefert.

    Prüfe mal, ob du NULLIF verwenden kannst:

    sum(a) / NULLIF(sum(b), 0)

    Die Bedingung ist, dass ein Gesamtausdruck NULL ist, wenn ein Teilausdruck NULL ist.
    Eine Division durch NULL ergibt also NULL und keinen Fehler.

    Du solltest aber den Float-Cast auf das Feld und nicht auf das Ergebnis beziehen:

    sum(cast(Feld as float))

    da es ggf. vor dem Cast zu einem Überlauffehler kommen kann. Double precision erhöht aber die Genauigkeit.
    Und die 100 würde ich als 100.00 definieren, die ist dann ebenso Double.

    Donnerstag, 10. August 2017 12:19
  • Hallo Absti,

    danke für die schnelle Antwort.

    also die Null werte sind schon bei ETL ausgenommen. 

    meine Frage ist, wieso die Query einen Ergebnis habt, aber die neue CALCULATE nicht !? 

    Select 18.0/ 143.0
    
    = 0,1258

    VG

    Fabi


    Montag, 14. August 2017 07:49
  • Ggf. stört sich der SQL an den Ergebnisnamen deines Selects, da du 2 identische Felder erstellst (as XXX).
    Dies ist in SQL nicht zulässig und sollte eigentlich einen Fehler auslösen.
    Benenne die Felder mal in 2 Felder um.
    Montag, 14. August 2017 08:06
  • Hallo Absti,

    SQL ist ja nur ne Beispiel Code, mir geht es um den Cube bzw. Calculate der [Anteil Netto] berechnet.

    also (sum([Measure].[Netto]) ergibt zB. 18

    und sum([Measure].[Daatensätze Netto]))  ergibt 143 

    das Ergebnis von 

    (sum([Measure].[Netto]) / sum([Measure].[Daatensätze Netto]))  ist '#WERT!' ?!?!

    VG

    Fabi 


    Mittwoch, 16. August 2017 12:09
  • Durch die INT-Definition gibt es nur Integerarithmetik, das kann zu Überlaufmeldungen oder 0 führen.
    Versuche doch einfach mal folgendes:
    (sum([Measure].[Netto] * 1.00) / sum([Measure].[Daatensätze Netto] * 1.00)) 
    Ggf. musst du 1.00 durch 1,00 ersetzen.
    Bei Formeln wird immer in den höherwertigen Typ automatisch gecastet:
    1.00 = Double
    INT * Double = Double
    Mittwoch, 16. August 2017 12:42