Hallo, wie kann ich die Differenz bilden aus den Werten in einer Spalte ?
Ich möchte meine Zählerstände (wie Gas, Strom usw.) monatlich aufschreiben und habe dazu eine Tabelle angelegt mit den Spalten Ablesedatum und Zählerstände. Jetzt möchte ich mir in einer dritten Spalte den Verbrauch ausrechnen lassen, also die Differenz der Zählerstände zwischen 2 Ablesedaten und jeweils in der Zeile des älteren Ablesedatums eintragen lassen. Welche Formel muss ich dazu verwenden ?
17 Antworten
-
Hallo Mario,
die Formel für das Berechnungsfeld 'Verbrauch' wäre:
---
let myDate:=Ablesedatum;
let oldDate:=max(select 'DEINE TABELLE' where Ablesedatum<myDate.Ablesedatum);
'Zählerstände'-first(select 'DEINE TABELLE' where Ablesedatum=oldDate).'Zählerstände'
---
Leo
-
Ich habe jetzt die Formel mit meinem Tabellenname in das Feld "Verbrauch" eingetragen
let myDate:=Ablesedatum;
let oldDate:=max(select 'Hauptgaszähler' where Ablesedatum<myDate.Ablesedatum);
'Zählerstände'-first(select 'Hauptgaszähler' where Ablesedatum=oldDate).'Zählerstände'jetzt meldet Ninox den Fehler:
Expression does not return a record: myDate in Zeile 2, Spalte 66
-
---
if 'Zählerstände' then
let myDate := Ablesedatum;
let oldDate := max((select 'Hauptgaszähler')[Ablesedatum < myDate].Ablesedatum);
'Zählerstände' - first((select 'Hauptgaszähler')[Ablesedatum = oldDate]).'Zählerstände'
end
---
-
Ich habe die neue Formel heute ausprobiert und sie funktioniert bis auf die erste Zeile. Wahrscheinlich rechnet Ninox die Differenz zwischen ersten Zählerstand und 0 so das Zählerstand und Verbrauch gleich ist. Daraufhin habe ich noch ein Feld angelegt als Anfangszählerstand und habe die Formel erweitert
if 'Zählerstände' = 'Anfangszählerstand' then
0
else
if 'Zählerstände' then
let myDate := Ablesedatum;
let oldDate := max((select 'Hauptgaszähler')[Ablesedatum < myDate].Ablesedatum);
'Zählerstände' - first((select 'Hauptgaszähler')[Ablesedatum = oldDate]).'Zählerstände'
end
endjetzt kann ich den gleichen Wert eintragen wie es in "Zählerstände" steht und bekomme dann als Verbrauch 0 raus. Damit bekomme ich evtl. auch einen Zählerwechsel hin.
Erstmal recht vielen Dank für die Hilfe.
Gibt es für solche Begriffe wie "let" usw Unterlagen oder Internetseiten was diese Ninox-Sprache bedeutet oder es erlernen kann, da ich in diesem Gebiet ein absoluter Anfänger bin, wenn die Formeln zu komplex werden.
-
Hallo Mario,
Es gibt in der Hilfe eine Funktions und Sprachreferenz auf englisch
https://ninoxdb.de/de/manual/erweiterte-Berechnungen/funktions-und-sprachreferenz
Using Variables
Sometimes it can be useful to store the result of a intermediate calculation and do further calculations based on that result. Consider the case where you want to check the age of a person like:if age(Birthdate) > 18 then "Grown-up"
else if age(Birthdate) > 12 then "Teenager"
else "Child"
end
Since age(Birthday) is used multiple times, things may be simplified with a variable which stores the result of the age calculation:let a := age(Birthdate);
if a > 18 then "Grown-up" else if a > 12 then "Teenager" else "Child" end
A variable is declared with a let statement:
let variable := expression;
Any expression following that let statement can make use of that variable.
var variable := expression
These variables can be modified afterwards, such as in loops.
let x := 1; ...; x := x + 1;
var y := 1; ...; y := y + 1;Leo
-
Ok, da werde ich da mal nachschauen.
Nochmals vielen Dank.
mfg
Mario
-
Hallo,
ich scheitere schon wieder an einer Formel mit Werten aus einer Spalte. Und zwar habe ich in meiner Tabelle 'Hauptgaszähler' noch ein Feld 'Verbrauch in €' angelegt und berechnen lassen - funktioniert - und ein Feld 'Jahr' für die Jahreszahl (z.B. 2018). Nun möchte ich in einem weiteren Feld 'Verbrauch in €/Jahr' alle Werte aus 'Verbrauch in €' aufsummieren lassen, die in dem gleichen Jahr angefallen sind und müsste dann zum nächsten Jahr (z.B. 2019) neu anfangen mit aufsummieren, so das ich in der letzten Zeile des Jahres den genauen Jahresverbrauch raus bekomme. Wäre das irgendwie möglich ?
(einmal angefangen mit einer Tabelle versucht man sie immer mehr zu erweitern)
-
Hallo Mario,
da du schon ein Ablesedatum hast, brauchst du das Feld Jahr für die Berechnung gar nicht. Man kann es so für ein Funktionsfeld schreiben:
---
let myYear:=year(Ablesedatum);
sum(select 'Hauptgaszähler'[year(Ablesedatum)=myYear].'Verbrauch in €')
---
Leo
-
Ich habe das Jahr mit reingenommen, weil mein Ablesedatum am 1. des Folgemonats ist und somit am Jahresende der letzte Eintrag (z.B. Dezember 'Ablesedatum' der 1.1. im Folgejahr) zum nächsten Jahr mit dazu gerechnet wird.
-
Ah so, dann ist es noch einfacher:
---
let myYear:=Jahr;
sum(select 'Hauptgaszähler'[Jahr=myYear].'Verbrauch in €')
---
Leo
-
Danke, das funktioniert einwandfrei. Kriegt man das auch irgendwie hin, das man eine PDF drucken kann mit z. B. nur Werte aus 2018. Auch wenn ich die Spalte 'Jahr' gruppiere zeigt es mir in der Druckervorschau trotzdem die ganze Tabelle. Ich hätte aber gerne einen Ausdruck über die Werte nur von einem Jahr, geht das.
-
Hallo Mario,
ja, du kannst ja auch in der Tabelle der Druckvorschau nach dem Jahr filtern und nur die Datensätze von 2018 anzeigen lassen.
Dazu klickst du einfach im Drucklayout auf die Tabelle und dann rechts auf "Anzuzeigende Spalten festlegen". Dort kannst dann die Filter für die einzelnen Felder festlegen, wenn du darauf klickst.
Gruß, Jörg
-
Danke für die Hilfe, in einer neuen Ansicht mit dem Filter 2018 klappt das wunderbar.
Noch eine andere Frage, ich habe eine Tabelle 'Hauptgaszähler', eine 'Gasunterzähler Heizung' jeweils mit den Spalten Monat, Jahr, Ablesedatum, Verbrauch in m3 und Zählerstande. Nun möchte ich noch eine Tabelle mit 'Gasunterzähler 1. OG anlegen, den es in Wirklichkeit nicht gibt sondern nur rechnerisch aus der Differenz zwischen 'Hauptgaszähler' und 'Gasunterzähler Heizung'. Nun soll sich die Tabelle quasi selbst füllen. Jahr, Monat, Ablesedatum sind gleich, also müssten nur übertragen werden und der Verbrauch ist halt die Differenz zwischen 'Hauptgaszähler' und Gasunterzähler Heizung'. Das müssten ja erstmal alles Berechnungsfelder werden, aber wie kann ich Jahr, Monat und Ablesedatum übertragen, wobei das Ablesedatum der wichtigste Eintrag ist, da er einmalig vorkommt und dadurch den Verbrauch pro Zeile am besten bestimmen kann.
-
Ist es nicht einfacher eine Ansicht zu erstellen statt die ganze Tabelle?
Leo
-
Wenn ich das richtig verstehe, einfach an die Tabelle 'Hauptgaszähler' die Spalten, die ich berechnet haben möchte (z.B. Verbrauch in € für Gasunterzähler 1. OG) hinzufügen und in der Ansicht dann nur die Werte filtern, die ich für meinen Gasunterzähler 1. OG haben möchte ?
-
Genau
-
Ja das funktioniert auch, vollkommen ausreichend, nochmals danke schön.
Content aside
- vor 6 JahrenZuletzt aktiv
- 17Antworten
- 5064Ansichten