Archivabfrage - falsche "Duration" im aktuellen Zeitraum

Hallo,

ich habe ein Problem bei der Auswertung oder dem Auslesen von aggregierten Archivwerten. Der letzte Zeitraum, der eigentlich bis 31.12.2020 23:59:59 gehen sollte, geht nun immer bis zum aktuellen Zeitstempel.

Hier mal ein Code-Beispiel:


$Archiv_ID          = 45343;

//auszuwertende Variablen
$W_Bezug_Gesamt     = 41089;
$W_Lieferung_Gesamt = 50743;

$StartTime  = mktime(0, 0, 0, 1, 1, 2018);  
$EndTime    = mktime(0, 0, 0, 1, 1, 2021)-1;

$werte_Bez = AC_GetAggregatedValues($Archiv_ID, $W_Bezug_Gesamt,     4, $StartTime, $EndTime, 0);        
$werte_Lie = AC_GetAggregatedValues($Archiv_ID, $W_Lieferung_Gesamt, 4, $StartTime, $EndTime, 0);        

$StartDate  = array();
$EndDate  = array();

foreach($werte_Bez as $wert)
   {
    $StartDate[]  = date("d.m.Y H:i:s", $wert['TimeStamp']);
    $EndDate[]    = date("d.m.Y H:i:s", ($wert['TimeStamp'] + $wert['Duration']));
   } 
   
$LengthTable = count($StartDate);
   
$Table[0] = array_merge(array('Startdatum + Uhrzeit'), $StartDate);
$Table[1] = array_merge(array('Enddatum + Uhrzeit'),   $EndDate);
$Table[2] = array_merge(array('Bezug Gesamt'),     array_column($werte_Bez, 'Avg'));
$Table[3] = array_merge(array('Lieferung Gesamt'), array_column($werte_Lie, 'Avg'));

$Spalten = count($Table);

$Text = PHP_EOL;    
for ($line=0; $line<$LengthTable; $line++)
{
    for ($col=0; $col<$Spalten; $col++)
    {
        if ($col < ($Spalten-1))
            {
               $Val = $Table[$col][$line];
            $Text = $Text.strval($Val)."	";
            }
        else    
            {
                $Val = $Table[$col][$line];
             $Text = $Text.strval($Val); // letzte Spalte
            }
    }
    $Text = $Text.PHP_EOL;
}    

var_dump($Text);

Das Ergebnis ist folgendes:


Startdatum + Uhrzeit    Enddatum + Uhrzeit    Bezug Gesamt    Lieferung Gesamt
01.01.2020 00:00:00    07.01.2021 19:59:36    3123.564    3915.525
01.01.2019 00:00:00    01.01.2020 00:00:00    2984.182    3831.093

kann mir jemand sagen, was ich falsch mache?

viele Grüße
cervicor

Hat keiner eine Idee?

viele Grüße
cervicor

Hallo,

offensichtlich, war meine Anfrage nicht spezifisch genug. Hier noch mal Ergebnisse weiterer Tests. Bei einem neuen Test fand ich folgendes Verhalten bei einem einfachen Abfragescript:


<?
$ArcValues = AC_GetAggregatedValues(45343, 41089, 4, mktime( 0, 0, 0, 1, 1, 2019), mktime(0, 0, 0, 1, 1, 2021), 0);        

foreach($ArcValues as $ValueSet)
   {
    echo date("d.m.Y H:i:s",  $ValueSet['TimeStamp'])."	";
    echo date("d.m.Y H:i:s", ($ValueSet['TimeStamp'] + $ValueSet['Duration']-1))."	";
    echo sprintf("%01.5f", $ValueSet['Avg'])."
";
   } 
?>

Als Ergebnis bekam ich folgende Ausgabe:


01.01.2021 00:00:00    09.01.2021 18:02:49    216.77700
01.01.2020 00:00:00    31.12.2020 23:59:59    3123.56400
01.01.2019 00:00:00    31.12.2019 23:59:59    2984.18200

Hier hätte ich erwartet, dass die oberste Zeile nicht vorhanden ist, da das Enddatum ja hier auf dem 01.01.2021 liegt.

Übrigens, auch bei monatlicher Aggregation (im Script einfach die 4 auch eine 3 ersetzen), ist die erste Zeile vorhanden.

viele Grüße
cervicor

PS: ich hatte in mtkime erst Monat und Tag vertauscht. Mit der aktuell eingegebenen Werten ist das Ergebnis aber wie gezeigt.

Hallo cervicor,

ich glaube du hast da einen Fehler im Archiv gefunden. Die Duration wird bei der Abfrage live berechnet. Wenn kein folgender Wert mit abgefragt wird, dann wird fälschlicherweise die Duration bis jetzt genommen anstatt bis zum nächsten nicht mit abgefragten Wert. Da kümmere ich mich drum. Danke für das Feedback!

Zum zweiten Punkt: In der Abfrage werden Werte mit aufgenommen, sobald der Startwert innerhalb des Intervalls ist. Wenn du also bis inklusive dem 1.1.2020 00:00:00 abfragst, dann bekommst du auch den aggregierten Wert für 2020, da dies ja der dazugehörige Starttermin ist.

Hallo Dr. Niels,

Danke für die Antwort. Das habe ich soweit verstanden.

Ich werde also meine Abfrage erstmal mit dem 01.01. enden lassen, und dann manuell das unvollständige Intervall in meiner weiteren Auswertung in Excel manuell löschen bis der Fehler behoben ist. Dann setze ich den Endezeitpunkt eine Sekunde früher.

Ich hatte den Hinweis in der Doku falsch verstanden:

Es werden immer ganze aggregierte Zeiträume abgefragt. Dafür muss der Startzeitpunkt (abhängig von der Aggregationsstufe) der/des Stunde/Tages/Woche/Monats/Jahr im Zeitraum von Startzeit und Endzeit umfasst sein.

Ich dachte, dass auch wenn ich den Endzeitpunkt z.B. auf Februar 2021 setze nur der ganze Zeitraum bis zum Ende des letzten Jahren ausgewertet wird.

viele Grüße
Oliver

Da ich momentan viel mit dem Archiv arbeite, wollte ich auch gerade den Bug melden, dass die Duration des letzten abgefragten Werts immer bis zur aktuellen Uhrzeit geht, anstatt bis zum nachfolgenden nichtabgefragten Wert (sofern vorhanden). Aber da ist mir @cervicor wohl zuvor gekommen. :grinning:

@Dr.Niels Ist schon absehbar, wann der Fix dafür kommt? Die Bug-Meldung ist ja schon etwas her. Aber keinen Stress, gibt sicher dringenderes. :wink:

Gruß
Slummi