Skip to end of metadata
Go to start of metadata

You are viewing an old version of this content. View the current version.

Compare with Current View Version History

« Previous Version 6 Next »

Eftersom det är en omfattande uppdatering så noteras förändringarna i detta dokument

Rapporter

Rapporterna som vi gjorde i våras har fått gå till papperskorgen. I och med införande av filter så kan inte SQL användas utan istället så är datakällan Weave data-definition “skfab_view_damages” som användes.

När den ansluts i BIRT utan relation till dataslag så innehåller den alla poster som är tillgängliga för användaren. Effekten av filter finns med här så rapporterna får korrekt filtrerad data.

Fyra rapporter för statistik är klara för test

  1. Utveckling över tid: med attributen kategori. typ. område, plats, organisation och verksamhet

  2. Utveckling över tid gemensam: med attributen gemensamma kategori, typ, organisation, verksamhet och Regso-områden

  3. Jämförelse mellan två perioder: Samma attribut som för punkt 1

  4. Jämförelse mellan två perioder gemensam: Samma attribut som för punkt 2

Problemställningen nu när inte SQL kan användas är att hämta ut rätt mängd data baserat på rapport-parametrarna. Därför måste BIRT dataset fixas med att addera beräknande kolumner

Kolumner som beräknas för dataset two_periods

From_date_1, To_date_1, From_date_2, To_date_2

Korrekta jämförbara värden för datum ingående parameterar “från period 1 …”

//From_date_1
var dt =params["from_period_1"].value.toString().split('-');
var y = new Number(dt[0]);
var m = new Number(dt[1])-1;
var d = new Number(dt[2]);
BirtDateTime.date(y,m,d);

Period_1, period_2, Period_1_cost, period_2_cost, period och damage_date_trunc

För att veta vilka poster som ska vara med i period_1 repetitive period_2 så får kolumnen värdet 1 om den är med och värdet 0 om den inte är med är värdet 0. Summan av kolumnen är därmed antal poster. På samma vis sätt kostnad för för period_1_cost och period_2_cost när posten är inom perioden

//Period_1
if ( row["damage_date_trunc"] >= row["from_date_1"]  && row["damage_date_trunc"] <= row["to_date_1"] )
{
1
}
else
{
0
} 

Period används som hjälp för att filtrera

//Period
row["period_1"] +row["period_2"]

damage_date_trunc gör om damage_date till datum så det kan jämföras

//damage_date_trunc
var dt = row["damage_date"];
var y = dt.getFullYear();
var m = dt.getMonth();
var d = dt.getDate();
new Date(y,m,d);

Filter

För att minska ner dataset till bara relevanta poster så sätts filter baserat på kolumnen period

image-20240711-115005.png

Rapporten

Tabellelementet binds till dataset two_periods. Em grupp skapas efter önskat attribut, t-ex- operation_common. Summering på t.ex period_1_cost per grupp operation_common. Samma för period 2.

Detaljrden behövs inte eller kan göras osynlig.

Screenshot_2024-07-11_13-52-56.png

För diagram så grupperas informationen automatiskt

image-20240711-120301.png

Kolumner som beräknas för dataset one_period

För rapporten utveckling över tid så behövs inte period 2 kolumner men ytterligare en kolumn, group, för att gruppera tidsperiod

//group
function getQuarter(date) { 
  var month = date.getMonth() + 1; 
  return Math.ceil(month / 3); 
} 
function getWeek(d) {
    // Copy date so don't modify original
    d = new Date(Date.UTC(d.getFullYear(), d.getMonth(), d.getDate()));
    // Set to nearest Thursday: current date + 4 - current day number
    // Make Sunday's day number 7
    d.setUTCDate(d.getUTCDate() + 4 - (d.getUTCDay()||7));
    // Get first day of year
    var yearStart = new Date(Date.UTC(d.getUTCFullYear(),0,1));
    // Calculate full weeks to nearest Thursday
    var weekNo = Math.ceil(( ( (d - yearStart) / 86400000) + 1)/7);
    // Return array of year and week number
    return [weekNo];
}
function pad(num, size) {
    var s = "000000000" + num;
    return s.substr(s.length-size);
}
var dt = row["damage_date"];
//Year
if (params["groupPeriod"].value == "year") {
dt.getFullYear().toString();
//year-momnth
} else if (params["groupPeriod"].value == "month"){
dt.getFullYear() + "-" + pad(dt.getMonth()+1,2);
//year-quarter
} else if (params["groupPeriod"].value == "quarter"){
dt.getFullYear() + "-" + pad(getQuarter(dt),2);
year-week
} else if (params["groupPeriod"].value == "week"){
dt.getFullYear() + "-" + pad(getWeek(dt),2);
//date
} else if (params["groupPeriod"].value == "date"){
dt.getFullYear() + "-" + pad(dt.getMonth()+1,2) + "-" + pad(dt.getDate(),2);
}else{
dt.getFullYear().toString();
}
  • No labels