Fragensteller
SSAS - Calculations

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?
Danke und VG
fabi
- Typ geändert Dimitar DenkovMicrosoft contingent staff, Administrator Dienstag, 29. August 2017 12:17 Warten auf Rückmeldung
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. -
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
-
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