2016-07-13 26 views
1

Ich muss einen Bericht erstellen, wo für jede Spalte eine vorherige Spalte vorhanden ist, die den Wert vom Datum 18 Monate zurück vom Datum gibt wird als Eingabe angegeben. Grundsätzlich bekomme ich Daten aus wenigen Spalten in Spotfire für ein bestimmtes Datum und möchte nur wenige der Spalten zeigen die Ausgabe, die 18 Monate zurück war.Sie müssen berechnete Spalten vom Eingabedatum -18 Monate in Spotfire für die tatsächlichen Spalten erstellen

-Code Summary-

Dies ist der Code, den ich in Spotfire zu implementieren. In diesem Bericht wird das Datum eines bestimmten einzelnen Tages eingegeben und Spaltenwerte dafür abgerufen. Die Unterabfrage wird für einige der Werte abgerufen und an die Hauptabfrage gesendet. In der Regel enthält dieser Bericht einige gemeinsame Spalten und wenige andere Spalten, die den Wert vom aktuellen Datum und den vorherigen Daten für die gleichen Spalten enthalten. Ich kann alle Spalten aus der Hauptabfrage implementieren, aber brauche Vorschläge, um Werte für die vorherigen Spalten zu erhalten, die in Spotfire berechnet werden oder trotzdem als Oracle view zu implementieren, da wir nur eine Eingabe für die Hauptabfrage erhalten und die Unterabfrage abziehen wird statisch nicht von Tagen/Monat [in diesem Fall seiner 18 Monate]

Codebeispiel: -

select st.x1, 
      cs.x2 , 
     sp.x3, sp.x4,  
     el.x5 current_zxc,  --New data 2 
     el.xxxx current_zvvxx, --New data 3 
     por.x6 current_zczxc, --New data 4 
     el.x7 current_sdcvzv, --New data 5 

     prev_yr_data.prev_1 previous_czzxczxc, 
     prev_yr_data.prev_2 previous_xcvv, 
     prev_yr_data.prev_3 previous_zcvzxz, 
     prev_yr_data.prev_4 PREVIOUS_czxcvzxv, 
     prev_yr_data.prev_5 previous_vvvxcvxc, 
     prev_yr_data.prev_6 previous_zxvxvv, 


    from table1 cs 
    inner join table2 usr on cs.xxx = usr.zzzzz 
    inner join table3 emp on emp.xxx = usr.zzzzz 
    inner join table4 gbst on cs.xxxs = gbst.zzzzz 
    inner join table5 sp on cs.xxx = sp.zzzzz 
    inner join table6 st on sp.xxx = st.zzzzz 
    inner join table7 ol on ol.xxx = cs.zzzzz 
    inner join table8 el on el.xxx = ol.zzzzz 
    inner join table9 spt on trim(upper(el.xxxx)) = trim(upper(spt.xxx)) 
    inner join table10 por on 
     por.xxx = el.xxxx and 
     por.xxxx = el.xxxx and 
     por.xxxx = cs.zzzzz 
    inner join 

    (select st.x1, 
     cs.zzzzz case_zzzzz, 
     cs.x2 prev_4, 
     sp.zzzzz , 
     sp.x3, sp.x4, 
     spt.zzzzz , 
     spt.xxx prev_1, --Old data 1 
     el.x5 prev_2, --Old data 2 
     el.x6 prev_3, --Old data 3 
     por.xxxx prev_5, --Old data 4 
     el.x7 prev_6 --Old data 5 
    from table1 cs 
    inner join table5 sp on cs.xxxx = sp.zzzzz 
    inner join table6 st on sp.xxxx = st.zzzzz 
    inner join table7 ol on ol.xxxx = cs.zzzzz 
    inner join table8 el on el.xxxxx = ol.zzzzz 
    inner join table9 spt on trim(upper(el.x_part_name)) = trim(upper(spt.x_part_number)) 
    inner join table10 por on 
     por.xxx = el.xxxx and 
     por.xxxx = el.xxxx and 
     por.xxxx = cs.zzzzz 
    where ol.date_time between add_months(to_date('date_input','mm/dd/yyyy'), -18) and to_date('date_input','mm/dd/yyyy') 
    ) prev_yr_data on 

    sp.zzzzz = prev_yr_data.zzzzz and 
    spt.zzzzz = prev_yr_data.zzzzzz 
    where ol.date_time >= to_date('date_input','mm/dd/yyyy') and ol.date_time < (to_date('date_input','mm/dd/yyyy') + 1) 
+0

Können Sie den Datensatz teilen – scsimon

+0

geben Sie mir etwas Zeit, wird versuchen, eine Probe eine ähnliche wie die tatsächliche zu teilen – direwolf

Antwort

1

würde ich vorschlagen, eine Transformation hinzuzufügen, wenn Sie in dem Datensatz berechnen Ihr Datum 18 Monate im Einbringungs Zukunft (oder Vergangenheit, was auch immer Sie bevorzugen). Dann können Sie in Spotfire einen Self-Join durchführen, wobei [Date] = [18MonthsForward] und die gewünschten Wertespalte (n) einbringen.

Die Schritte dieses aussehen wie dies zu erreichen, wenn sie unter Quelleninformationen angesehen:

2. Select Insert > Transformations... 
    Add the transformations: 
     a. Calculate new column 
      Name: 18MonthsForward 
      Expression: DateAdd("month",18,[Date]) 

3. Select Insert > Columns... 
     Select 'From Current Analysis' 
     Source location: Data Table 
     Automatic update. 
     Match columns: 
      Date => 18MonthsForward 
     Ignore columns: 
      Date 
     Select join method: LeftOuterJoin 
     Treat empty values as equal: False 

Als Schritt für Schritt Anleitung würden Sie:

(1) Wählen Sie Einfügen >> Transformation

(2) Wählen Sie Berechnung neue Spalte aus dem Dropdown

(3) Geben Sie den Ausdruck: DateAdd ("Monat", 18, [Datum]) und benennen Sie dies, was Sie bevorzugen

(4) Wählen Sie Einfügen >> Spalten

(5) aus aktuellen Daten auswählen und Ihre aktuellen Datentabelle wählen

(6) Machen Sie auf Datum und die neu berechneten 18MonthsForward Datumsspalte

(7) Wählen Sie Ihre Wertspalte als neue Spalte

Angehängt in einem Bild der Datendatentabelle. 18 months prior value