Ein virtuelles Feld definieren

In diesem Abschnitt:

Vorgehensweise:

Referenz:

Ein virtuelles Feld kann in einer Anfrage so wie ein echtes Datenquellenfeld verwendet werden. Die Berechnung, die den Wert eines virtuellen Feldes bestimmt, wird für jeden abgerufenen Datensatz durchgeführt, der Prüfbedingungen für reale Felder erfüllt. Das Ergebnis der Formel wird behandelt, als ob es ein reales Feld in der Datenquelle wäre.

Sie können ein virtuelles Feld folgendermaßen definieren:

Tipp: Falls Ihre Umgebung den Parameter KEEPDEFINES unterstützt, können Sie KEEPDEFINES auf ON stellen, damit virtuelle Feldern nicht mit einem darauffolgenden JOIN-Befehl geleert werden. Genaueres finden Sie unter Datenquellen verbinden.


Nach oben

x
Referenz: Verwendungshinweise für die Erstellung von virtuellen Feldern

Nach oben

x
Syntax: Ein virtuelles Feld erstellen

Bevor Sie eine Reportanfrage anfangen, nehmen Sie Folgendes auf

DEFINE FILE filename[.view_fieldname] [CLEAR|ADD]  
fieldname[/format] [TITLE 'line1[,line2 ...']
 [DESCRIPTION 'description']=expression; 
fieldname[/format][WITH realfield]=expression; 
fieldname[/format] REDEFINES qualifier.fieldname=expression;
.
.
.
END

Hierbei gilt:

filename
Ist der Name der Datenquelle, für die Sie das virtuelle Feld definieren.

Falls die Reportanfrage eine alternative Ansicht hat, verwenden Sie filename mit view_fieldname.

Alle Felder, die verwendet werden, um das virtuelle Feld zu definieren, müssen sich auf nur einem Pfad in der Datenquelle befinden. Wenn dies nicht der Fall ist, können Sie die alternative Ansicht verwenden, welche DEFINE-Befehle für die alternative Ansicht erfordert. Für eine alternative Ansicht können virtuelle Felder keine qualifizierten Feldnamen haben. Weitere Informationen über alternative Ansichten finden Sie unter Eine Datenstruktur für verbesserten Abruf rotieren.

Die Befehlszeile DEFINE FILE muss sich auf einer anderen Zeile befinden als ihre virtuellen Felddefinitionen.

view_fieldname
Ist das Feld, auf dem eine alternative Ansicht in der entsprechenden Anfrage basiert. Es kann sein, dass Sie eine alternative Ansicht verwenden müssen, wenn sich die verwendeten Felder nicht auf nur einem Pfad in der normalen Ansicht befinden.
CLEAR
Löscht zuvor definierte virtuelle Felder, die mit der angegebenen Datenquelle assoziiert sind. CLEAR ist der Defaultwert.
ADD
Ermöglicht es Ihnen, zusätzliche virtuelle Felder für eine Datenquelle anzugeben, ohne bereits vorhandene virtuelle Felder freizugeben. Wenn Sie ADD weglassen, führt dies zu denselben Ergebnissen wie die Option CLEAR.
fieldname
Ist ein Name, der die WebFOCUS-Regeln für die Benennung von Feldern einhält. Indizierte Feldnamen in FOCUS-Datenquellen müssen kleiner oder gleich 12 Zeichen sein. Es kann der Name eines neuen virtuellen Feldes sein, das Sie definieren, oder ein vorhandenes in der Masterdatei festgelegtes Feld, das Sie neu definieren möchten.

Der Name kann eine beliebige Kombination aus Buchstaben, Ziffern und Unterstrichen (_) sein, und sollte mit einem Buchstaben anfangen.

Verwenden Sie keine Feldnamen des Typs Cn, En oder Xn (wobei n jede Sequenz aus zwei Ziffern ist), da diese für andere Verwendungen vorgesehen sind.

Format
Ist das Format des Feldes. Der Defaultwert ist D12.2. Informationen über Feldformate finden Sie im Handbuch Daten mit der WebFOCUS-Sprache beschreiben .
WITH realfield
Assoziiert ein virtuelles Feld mit einem Datenquellensegment, das ein reales Feld enthält. Details finden Sie in Verwendungshinweise für die Erstellung von virtuellen Feldern.
line1, line2...
Sind die Default-Spaltentitelzeilen, die für ein virtuelles Feld angezeigt werden sollen, es sei denn dies wird von einer AS-Phrase überschrieben.
description
Ist die Beschreibung, die mit dem virtuellen Feld assoziiert werden soll. Die Beschreibung wird in den Tools angezeigt, die Masterdateien durchsuchen.
REDEFINES qualifier.fieldname
Ermöglicht es Ihnen, ein Feld neu zu definieren oder ein Feld, dessen Name bereits in mehr als einem Segment besteht, neu zu berechnen. Wenn Sie das Format des Feldes ändern, wenn Sie es neu definieren, muss die Länge im neuen Format identisch oder kürzer sein als das Original. Zusätzlich wird die Umwandlung zwischen alphanumerischen und numerischen Datentypen nicht unterstützt.
expression
Kann eine arithmetische oder logische Formel oder Funktion sein, die verwendet wird, um den Wert von fieldname auszuwerten (siehe auch Formeln verwenden). Sie müssen jede Formel mit einem Semikolon beenden, außer der letzten, bei der das Semikolon optional ist.

Felder in der Formel können reale Datenfelder sein, Datenfelder in Datenquellen, die querverwiesen oder verbunden sind, oder zuvor definierte virtuelle Felder. Details finden Sie in Verwendungshinweise für die Erstellung von virtuellen Feldern.

END
Ist erforderlich, um den Befehl DEFINE FILE zu beenden. END muss sich in einer separaten Zeile in der Prozedur befinden.

Hinweis: Informationen über fehlende Attribute finden Sie unter Das MISSING-Attribut in einem DEFINE- oder COMPUTE-Befehl.



Beispiel: Ein virtuelles Feld definieren

In der folgenden Anfrage wird der Wert von RATIO berechnet, indem der Wert von DELIVER_AMT durch OPENING_AMT geteilt wird. Der Befehl DEFINE erstellt RATIO als ein virtuelles Feld, welches in der Anfrage verwendet wird, als ob es ein reales Feld in der Datenquelle wäre.

DEFINE FILE SALES
RATIO = DELIVER_AMT/OPENING_AMT;
END
TABLE FILE SALES
PRINT DELIVER_AMT AND OPENING_AMT AND RATIO
WHERE DELIVER_AMT GT 50
END

Die Ausgabe ist:

DELIVER_AMT  OPENING_AMT           RATIO
-----------  -----------           -----
         80           65            1.23
        100          100            1.00
         80           90             .89


Beispiel: Ein Feld neu definieren

Die folgende Anfrage definiert das Feld Gehalt in der Datenquelle EMPDATA neu, so dass Sternchen für Jobtitel abgebildet werden, die das Wort EXECUTIVE verwenden:

DEFINE FILE EMPDATA                                            
SALARY REDEFINES EMPDATA.SALARY =                       
 IF TITLE CONTAINS 'EXECUTIVE' THEN 999999999999 ELSE          
 EMPDATA.SALARY;                                               
END                                                            
TABLE FILE EMPDATA                                             
SUM SALARY BY TITLE 
WHERE TITLE CONTAINS 'MANAGER' OR 'MARKETING' OR 'SALES' 
ON TABLE SET PAGE OFF
END

Die Ausgabe ist:

TITLE                          SALARY
-----                          ------
EXEC MANAGER               $54,100.00
EXECUTIVE MANAGER     ***************
MANAGER                   $270,500.00
MARKETING DIRECTOR        $176,800.00
MARKETING EXECUTIVE   ***************
MARKETING SUPERVISOR       $50,500.00
SALES EXECUTIVE       ***************
SALES MANAGER              $70,000.00
SALES SPECIALIST           $82,000.00
SENIOR SALES EXEC.         $43,400.00


Beispiel: Ein Feld neu definieren, das denselben Namen in mehreren Segmenten hat

Die folgende Anfrage verbindet die Datenquelle EMPDATA mit sich selbst. Dies ergibt eine Struktur mit zwei Segmenten, in der die Namen in beiden Segmenten identisch sind. Die Anfrage definiert dann das Feld Gehalt im oberen Segment (Tag-Name ORIG) so neu, dass alle Namen, die mit dem Buchstaben L anfangen, durch ein Sternchen ersetzt werden, und definiert das Feld Gehalt im untergeordneten Segement (Tag-Name NEW) so neu, dass alle Namen, die mit dem Buchstaben M anfangen, durch ein Sternchen ersetzt werden:

JOIN PIN IN EMPDATA TAG ORIG TO PIN IN EMPDATA TAG NEW AS AJ      
DEFINE FILE EMPDATA                                               
SALARY/D12.2M REDEFINES ORIG.SALARY = IF LASTNAME LIKE 'L%'  THEN 
                                      999999999999 ELSE ORIG.SALARY;
SALARY/D12.2M REDEFINES NEW.SALARY = IF LASTNAME LIKE 'M%' THEN   
                                     999999999999 ELSE NEW.SALARY * 1.2;
END                                                               
TABLE FILE EMPDATA                                                
PRINT ORIG.SALARY AS 'ORIGINAL' NEW.SALARY AS 'NEW'               
BY LASTNAME                                                             
WHERE LASTNAME FROM 'HIRSCHMAN' TO 'OLSON'                              
ON TABLE SET PAGE NOPAGE                                          
END

Die Ausgabe ist:

LASTNAME                ORIGINAL              NEW 
--------                --------              --- 
HIRSCHMAN             $62,500.00       $75,000.00 
KASHMAN               $33,300.00       $39,960.00 
LASTRA           ***************      $138,000.00 
LEWIS            ***************       $60,600.00 
LIEBER           ***************       $62,400.00 
LOPEZ            ***************       $31,680.00 
MARTIN                $49,000.00  *************** 
MEDINA                $39,000.00  *************** 
MORAN                 $30,800.00  *************** 
NOZAWA                $80,500.00       $96,600.00 
OLSON                 $30,500.00       $36,600.00

Nach oben

x
Vorgehensweise: Ein virtuelles Feld erstellen

So definieren Sie ein virtuelles Feld (Define-Objekt) in einer Prozedur:

  1. Rechtsklicken Sie auf die Prozedur im Prozeduren-Ordner und wählen Sie Im Developer Studio-Tool bearbeiten im Kontextmenü aus. Der Procedure Viewer wird geöffnet.
  2. Klicken Sie an einem Punkt, an dem Sie das virtuelle Feld in die Prozedur einfügen möchten, auf einen Komponenten-Konnektor (gelber Diamant). Klicken Sie dann auf den Button Define in der Toolbar Komponenten-Konnektor.
  3. Die Open-Dialogbox wird geöffnet. Wählen Sie die Masterdatei aus, von der Sie das virtuelle Feld erstellen möchten, und klicken Sie auf Öffnen.

    Die Dialogbox Define wird geöffnet. Genaueres finden Sie unter Define-Tool.

  4. Geben Sie den Namen des virtuellen Feldes in das Feld-Eingabefeld ein.
  5. Geben Sie eine Formel in die Formel-Box ein. Informationen darüber, wie Sie die Formate Alphanumerisch, Numerisch, Datum und CLOB zuweisen, finden Sie in den spezifischen Prozeduren.

    Informationen über Formeln finden Sie im Handbuch Reports mit der WebFOCUS-Sprache erstellen.

    Sie können auch eine Funktion in einer Formel verwenden, indem Sie auf den Button Funktionen in der Dialogbox Define klicken. Genaueres über Funkntionen finden Sie im Handbuch Funktionen verwenden .

Hinweis: Wenn Sie ein virtuelles Feld verfügbar machen möchten für die Verwendung mit allen Prozeduren während Ihrer Session, geben Sie den Befehl DEFINE in der Befehlskonsole ein. Das virtuelle Feld wird für die Dauer Ihrer Session beibehalten.


Nach oben

x
Vorgehensweise: Ein alphanumerisches Format mit dem Define-Tool zuweisen

Im Define-Tool-Fenster:

  1. Klicken Sie auf den Button Format .

    Die Dialogbox Format wird geöffnet.

  2. Wählen Sie Alphanumerisch als Formattyp aus.

    Die Defaultlänge ist 20. Sie wird im Eingabebereich Länge angezeigt.

  3. Um die Länge zu verändern, geben Sie im Eingabebereich Länge eine Zahl zwischen 1 und 4096 an.
  4. Klicken Sie auf OK.

Die Dialogbox Format wird geschlossen.

Weitere Informationen über Feldformate finden Sie unter Feldformate zuweisen im Handbuch Reports mit ReportPainter erstellen.


Nach oben

x
Vorgehensweise: Ein numerisches Format mit dem Define-Tool zuweisen
  1. Klicken Sie auf den Button Format .

    Die Dialogbox Format wird geöffnet.

  2. Wählen Sie einen Formatoption-Button im Abschnitt Formattypen aus:

    Die Default-Länge wird im Eingabebereich Länge angezeigt. Im Eingabebereich Dezimal wird die Anzahl der Dezimalstellen für Gleitkomma, Dezimal und Gepackt angezeigt.

  3. Um eine andere Länge zuzuweisen, geben Sie in den Eingabebereich Länge eine Zahl zwischen 1 und 9 für Gleitkomma an, zwischen 1 und 11 für eine ganze Zahl, zwischen 1 und 20 für Dezimal oder zwischen 1 und 33 für Gepackt.
  4. Um die Anzahl der Dezimalstellen für die Formate Gleitkomma, Dezimal oder Gepackt zu verändern, geben Sie die gewünschte Anzahl im Eingabebereich Dezimal an.
  5. Wenn Sie numerische Anzeigeoptionen aufnehmen möchten, wählen Sie diese Optionen im Abschnitt Bearbeitungsoptionen aus.
  6. Klicken Sie auf OK.

Die Dialogbox Format wird geschlossen.

Weitere Informationen über Feldformate finden Sie unter Feldformate zuweisen im Handbuch Reports mit ReportPainter erstellen.


Nach oben

x
Vorgehensweise: Ein Datum-/Zeitformat mit dem Define-Tool zuweisen

Im Define-Tool-Fenster:

  1. Klicken Sie auf den Button Format .

    Die Dialogbox Format wird geöffnet.

  2. Klicken Sie auf den Button Datum/Zeit im Abschnitt Formattyp.

    Die Dialogbox Datum- und Zeitformate wird geöffnet.

  3. Wählen Sie Datum als Feldformat aus.

    Die Optionen im Datumsbereich sind aktiviert.

    Hinweis: Die Dialogbox Datum- und Zeitformate erzwingt gültige Formatkombinationen von Nur Datum und DatumZeit basierend auf der Eingabe und dem ausgewählten Feld. Es kann sein, das manche Optionen für Ihre Auswahl nicht verfügbar sind.

  4. Wählen Sie ein Datumsformat in der Dropdown-Liste Format aus.

    Wenn ein Datumsformat ausgewählt wird, werden für das ausgewählte Format Formatzeichenfolge und Musterdatum angezeigt.

  5. Sie können optional die Optionen Monatsname, Tagesname, Präfix und Trennzeichen auswählen.
  6. Klicken Sie auf OK.

    Die Dialogbox Datum- und Zeitformate wird geschlossen. Das ausgewählte Format wird im Abschnitt Datum/Zeit in der Dialogbox Format angezeigt.

  7. Klicken Sie auf OK, um die Dialogbox Format zu schließen.

Hinweis: Administratoren und Entwickler sollten beachten, dass Datumsoptionen, die in einem virtuellen Feld eingestellt werden, Datumsoptionen überschreiben, die in der Masterdatei oder mit einem SET-Befehl eingestellt werden.


Nach oben

x
Referenz: Define-Tool

In der folgenden Abbildung sehen Sie das Define-Tool.

Define-Tool

Das Define-Tool verfügt über folgende Felder oder Optionen:

Feld

Zeigt den Namen des Temporärfeldes an.

Um ein Feld zu erstellen, geben Sie den Namen, den Sie verwenden möchten, in die Textbox Feld ein.

Um ein Feld zu bearbeiten, wählen Sie das Feld aus. Wenn Sie ein Feld auswählen, werden die entsprechenden Informationen in der Dialogbox Format und der Dialogbox Formel angezeigt. Sie können die Informationen bearbeiten, das Feld eliminieren, oder es ausführen.

Hinzufügen

Wenn ausgewählt gibt es an, dass die aktuellen Temporärfelddefinitionen der Liste mit Temporärfeldern hinzugefügt werden sollte, die zuvor für dieselbe Datenquelle definiert wurde.

Wenn dieser Button nicht ausgewählt wird, ersetzen die aktuellen Temporärfelder die zuvor für dieselbe Datenquelle definierten Temporärfelder.

In der Anwendungsansicht markiert dieser Vorgang alle Definitionen, die während der aktuellen Verwendung des Define-Tools erstellt wurden, um anderen virtuellen Feldern hinzugefügt zu werden, die für dieselbe Datenquelle bei einer früheren Verwendung des Tools definiert wurden.

Hinweis: Sie können mehrere virtuelle Felder bei einer einmaligen Verwendung des Define-Tools definieren und ausführen. Es werden jedoch, wenn Sie nicht Hinzufügen auswählen und die aktuelle Liste ausführen, andere virtuelle Felder gelöscht, die außerhalb der Masterdatei für dieselbe Datenquelle erstellt wurden. Virtuelle Felder, die in der Masterdatei erstellt wurden, bleiben wirksam.

Entfernen

Wenn ausgewählt, werden alle aktuellen Temporärfelddefinitionen gelöscht, die Sie zuvor der Liste der Temporärfelder hinzugefügt haben.

Format-Button

Öffnet die Dialogbox Format, in der Sie dem Temporärfeld ein Format hinzufügen.

Dialogbox Format

Zeigt den Feldtyp, die Feldlänge und die Anzeigeoptionen an. Der Feldtyp kann alphanumerisch, numerisch oder Datum/Zeit sein.

Button Optionen

Öffnet das Fenster Optionen, in dem Sie eine Segmentposition für ein Temporärfeld in der assoziierten Masterdatei etablieren können, und/oder Attribute zuweisen können, um einzustellen, wie fehlende Werte im virtuellen Feld gehandhabt werden.

Box Formeln

Zeigt die Formel an, die verwendet wurde, um das Feld zu bewerten.

Geben Sie die Formel ein oder verwenden Sie die Liste Felder, den Rechner und die Funktionenliste, um die Formel zu erstellen.

Rechner-Buttons

Stellen Sie Zahlen und Operatoren zur Verfügung, die Sie zur Erstellung von numerischen, alphanumerischen, booleschen und bedingten Formeln verwenden können.

Klicken Sie auf die gewünschte Zahl bzw. den gewünschten Operator, um ihn der Formelbox hinzuzufügen.

  • Klicken Sie auf die Taste ( ) im Rechner, um einen Wert in Klammern zu setzen. Klammern beeinflussen die Reihenfolge, in der die angegebenen Operationen durchgeführt werden.
  • Klicken Sie auf die Taste ' ' im Rechner, um einen Wert in einfache Anführungszeichen zu setzen. Alphanumerische Literale und Datumsliterale werden in Hochkommata eingeschlossen.
  • Klicken Sie auf die Taste U im Rechner, um Einträge in der Formelbox in Großschreibung umzuwandeln. Bitte beachten Sie, dass bei Feldnamen auf Groß- und Kleinschreibung geachtet wird.
Check

Zeigt die Define-Phrase in Code an und weist auf Fehler hin.

Neu

Entfernt die Tools aus den Eingabefeldern, einschließlich der Textbox Feld und der zugehörigen Formel. Es wird auch das Format auf den Defaultwert D12.2 zurückgesetzt, und der Cursor in die Textbox Feld platziert, so dass Sie ein neues Feld erstellen können.

Löschen

Löscht das Temporärfeld, das in der Textbox Feld identifiziert ist. Das Feld ist nicht mehr verfügbar.

Funktionen

Öffnet die Dialogbox Funktionsargumente, die alle verfügbaren programmeigenen Funktionen auflistet. (Eine Funktion ist ein Programm, das Werte zurückgibt.)

Doppelklicken Sie auf die gewünschte Funktion, um sie der Formelbox hinzuzufügen. Markieren Sie dann in der Formelbox jedes Argument und ersetzen Sie es mit dem Wert oder dem Feldnamen, den Sie verwenden möchten. Genaueres finden Sie im Handbuch Funktionen verwenden .

Definierte Felder

Listet die Namen der Temporärfelder, die in der Masterdatei bereits assoziiert sind.

Felderliste

Listet die Felder auf, die in der Masterdatei definiert sind.



Beispiel: Ein virtuelles Feld erstellen

Mit Informationen in der Musterdatenquelle EMPLOYEE zeigt das folgende Beispiel, wie Sie ein virtuelles Feld (INCREASE) erstellen, um die jährliche Gehaltserhöhung zu berechnen, die jeder Angestellte erhält. In diesem Beispiel wird davon ausgegangen, dass Sie bereits eine Prozedur erstellt haben, mit der Sie dieses virtuelle Feld verwenden möchten.

  1. Öffnen Sie eine Prozedur, in der Sie ein virtuelles Feld erstellen möchten.
  2. Wählen Sie die Masterdatei EMPLOYEE aus und klicken Sie auf Öffnen.
  3. Öffnen Sie das Define-Tool von der Komponenten-Konnektor-Toolbar.
  4. Geben Sie INCREASE in das Eingabefeld Field ein.
  5. Klicken Sie auf den Button Format .

    Die Dialogbox Format wird geöffnet.

  6. Vergewissern Sie sich, dass die Option Dezimal unter Formattypen ausgewählt ist.
  7. Klicken Sie auf den Abwärtspfeil im Eingabebereich Länge, um die Feldlänge 8 anzugeben. Lassen Sie die Zahl 2 im Feld Dezimal.
  8. Wählen Sie die Option Bewegliches Dollarzeichen--M im Listenfeld Bearbeitungsoptionen aus.
  9. Klicken Sie auf OK, um die Änderungen vorzunehmen und zur vorherigen Dialogbox zurückzukehren.
  10. Klicken Sie auf den Tab Felderliste und doppelklicken Sie dann CURR_SAL.
  11. Geben Sie Folgendes ein, indem Sie die Zahl- und Operator-Buttons im Fenster Formeln verwenden:

    * .05

    Die Formel für das Feld Define wird jetzt angezeigt als CURR_SAL * .05.

  12. Klicken Sie auf OK.

Sie können dann das neue Feld (INCREASE) im Fenster Feld in den Report-Tools auswählen.


Nach oben

x
Vorgehensweise: Fehlender Wert-Attribute mit dem Define-Tool angeben
  1. Öffnen Sie das Define-Tool, indem Sie:
    • Wählen Sie Define in der Komponenten-Konnektor-Toolbar im Procedure Viewer aus.

      oder

    • Rechtsklicken Sie im Report Painter auf eine beliebige Stelle im Tab Felder des Object Inspectors und wählen Sie Neues virtuelles Define-Feld aus.

    Das Define-Tool wird geöffnet.

  2. Erstellen Sie eine Define-Formel.
  3. Klicken Sie auf den Button Optionen und markieren Sie die Checkbox Handhabung von fehlenden Werten überschreiben, um anzugeben, wie die Fehlender Wert-Attribute gehandhabt werden. Die Dialogbox Optionen ist in der folgenden Abbildung zu sehen.

    Optionen

  4. Klicken Sie zum Schließen der Dialogbox Options auf OK.

Weitere Informationen über Fehlende Feldwerte finden Sie unter MISSING-Attribut in einem DEFINE- oder COMPUTE-Befehl im Kapitel Datensätze mit fehlenden Feldwerten verarbeiten im Handbuch Reports mit der WebFOCUS-Sprache erstellen.


Nach oben

x
Vorgehensweise: Establish a Missing Segment Location Using the Define Tool
  1. Öffnen Sie das Define-Tool, indem Sie:
    • Wählen Sie Define in der Komponenten-Konnektor-Toolbar im Procedure Viewer aus.

      oder

    • Rechtsklicken Sie im Report Painter auf eine beliebige Stelle im Tab Felder des Object Inspectors und wählen Sie Neues virtuelles Define-Feld aus.

    Das Define-Tool wird geöffnet.

  2. Erstellen Sie eine Define-Formel.
  3. Klicken Sie auf den Button Optionen.
  4. Markieren Sie die Checkbox Das Temporärfeld mit dem realen Feld assoziieren, das ausgewählt ist und wählen Sie ein Feld aus. Die Dialogbox Optionen ist in der folgenden Abbildung zu sehen.

    Optionen

  5. Klicken Sie zum Schließen der Dialogbox Options auf OK.

Weitere Informationen über Fehlende Feldwerte finden Sie unter Eine Segment-Speicherstelle für ein virtuelles Feld festlegen im Kapitel Datensätze mit fehlenden Feldwerten verarbeiten im Handbuch Reports mit der WebFOCUS-Sprache erstellen.


Nach oben

x
Mehrere virtuelle Felder definieren

Vorgehensweise:

Sie möchten eventuell mehr als eine Gruppe virtueller Felder für dieselbe Datenquelle haben, und manche oder alle virtuellen Felder in der Anfrage verwenden. Die Option ADD Hinzufügen ermöglicht es Ihnen, zusätzliche virtuelle Felder anzugeben, ohne vorhandene zu löschen. Wenn Sie die Option ADD Hinzufügen weglassen, werden zuvor definierte virtuelle Felder in dieser Datenquelle gelöscht.

Wenn Sie ein virtuelles Feld für eine bestimmte Datenquelle löschen möchten, verwenden Sie die Option CLEAR Löschen.



x
Syntax: Vorhandenen virtuellen Feldern ein virtuelles Feld hinzufügen
DEFINE FILE filename ADD

Hierbei gilt:

filename
Ist die Datenquelle.


Beispiel: Virtuelle Felder hinzufügen

Im folgenden Beispiel mit Anmerkungen ist die Verwendung der Optionen ADD und CLEAR für virtuelle Felder zu sehen:

1. DEFINE FILE CAR
   ETYPE/A2=DECODE STANDARD (OHV O OHC O ELSE L);
   END 
2. DEFINE FILE CAR ADD
   TAX/D8.2=IF MPG LT 15 THEN .06*RCOST
      ELSE .04*RCOST;
   FCOST = RCOST+TAX;
   END
  1. Der erste DEFINE-Befehl erstellt das virtuelle Feld TYPE für die CAR-Datenquelle. Informationen über die DECODE-Funktion finden Sie im Handbuch Funktionen verwenden .
  2. Es werden zwei oder mehr virtuelle Felder (TAX und FCOST) für die Datenquelle CAR erstellt. Die ADD-Option erlaubt es Ihnen, auf ETYPE, TAX und FCOST in zukünftigen Anfragen zu verweisen.


x
Vorgehensweise: Einer Gruppe virtueller Felder ein virtuelles Feld hinzufügen
  1. Geben Sie in der Dialogbox Define den Feldnamen in das Eingabefeld Feld ein.
  2. Geben Sie die gewünschte Formel in die Formelbox ein.

    Informationen über Formeln finden Sie im Handbuch Reports mit der WebFOCUS-Sprache erstellen.

  3. Wählen Sie den Options-Button Hinzufügen aus.
  4. Klicken Sie auf OK.

Nach oben

x
Virtuelle Felder anzeigen

Vorgehensweise:

Sie können mit dem ? DEFINE-Befehl alle virtuellen Felder anzeigen. Sie können auf diese Informationen auch im Define-Tool zugreifen.



x
Syntax: Virtuelle Felder anzeigen
? DEFINE

Weitere Informationen finden Sie im Reportanwendungen entwickeln .



x
Vorgehensweise: Virtuelle Felder anzeigen

Klicken Sie auf den Tab Definierte Felder im Define-Tool.


Nach oben

x
Ein virtuelles Feld löschen

Vorgehensweise:

Folgendes kann ein virtuelles Feld löschen, das in einer Prozedur erstellt wurde:

Anders als Felder, die in einer Prozedur erstellt werden, werden virtuelle Felder in der Masterdatei nicht auf die obige Weise gelöscht.

Geben Sie den folgenden Befehl aus, um alle virtuellen Felder für alle Datenquellen zu löschen:

DEFINE FILE * CLEAR
END


Beispiel: Virtuelle Felder löschen

Im folgenden Beispiel mit Anmerkungen ist die Verwendung der Optionen CLEAR für virtuelle Felder zu sehen:

1. DEFINE FILE CAR
   ETYPE/A2=DECODE STANDARD (OHV O OHC O ELSE L);
   END 
2. DEFINE FILE CAR CLEAR
   COST = RCOST-DCOST;
   END
  1. Der erste DEFINE-Befehl erstellt das virtuelle Feld TYPE für die CAR-Datenquelle. Informationen über die DECODE-Funktion finden Sie im Handbuch Reportanwendungen entwickeln .
  2. Die Option CLEAR löscht die zuvor definierten virtuellen Felder und es ist nur das virtuelle Feld COST im letzten DEFINE für weitere Anfragen verfügbar.


x
Vorgehensweise: Ein virtuelles Feld löschen

Klicken Sie im Define-Tool-Fenster mit dem Feld in der Textbox Feld auf Löschen.

Das Feld ist nicht mehr verfügbar.


Nach oben

x
Eine Segment-Speicherstelle für ein virtuelles Feld festlegen

Virtuelle Felder haben eine logische Position in der Datenquellenstruktur, genauso wie permanente Datenquellenfelder. Die logische Position eines virtuellen Feldes befindet sich auf dem niedrigsten Segment, auf das zugegriffen werden muss, um die Formel auszuwerten, und bestimmt den Ausführungszeitpunkt für dieses Feld. Betrachten Sie die folgende Datenquellenstruktur und den DEFINE-Befehl:

virtuelles Feld

DEFINE RATIO = DELIVER_AMT/RETAIL_PRICE ;

Die Formel für RATIO enthält wenigstens ein reales Datenquellenfeld. Was Reportfähigkeiten angeht ist das Feld RATIO wie ein reales Feld in der Masterdatei und befindet sich im niedrigsten Segment.

In manchen Datenquellen kann ein virtuelles Feld ausgewertet werden durch eine Formel, die keine realen Datenquellenfelder enthält. Eine solche Formel kann sich nur auf Temporärfelder oder Literale beziehen. Beispiel,

NCOUNT/I5 = NCOUNT+1;

oder

DATE/YMD = '19990101';

Da keine der Formeln ein Datenquellenfeld enthält (NCOUNT und das Literal sind in der Masterdatei nicht vorhanden), können ihre logischen Positionen in der Datenquelle nicht bestimmt werden. Sie müssen angeben, in welches Segment die Formel platziert werden soll. Um ein virtuelles Feld mit einem spezifischen Segment zu assoziieren, verwenden Sie die WITH-Phrase. Der auf WITH folgende Feldname kann jedes beliebige reale Feld in der Masterdatei sein.

Für FOCUS-Datenquellen kann es sein, dass Sie die Abrufgeschwindigkeit erhöhen können mit einem externen Index für das virtuelle Feld. In diesem Fall können Sie den Index mit einem Zielsegment außerhalb des Segments assoziieren, das das virtuelle Feld enthält. Sie finden im Handbuch Reportanwendungen entwickeln weitere Informationen über externe Indizes.



Beispiel: Eine Segment-Speicherstelle festlegen

Das Feld NCOUNT wird in dasselbe Segment platziert wie das Feld UNITS. NCOUNT wird jedes Mal berechnet, wenn eine neue Segmentinstanz abgerufen wird.

DEFINE FILE GGSALES
NCOUNT/I5 WITH UNITS = NCOUNT+1;
END

Nach oben

x
Virtuelle Felder mit einer Mehrpfad-Datenquelle definieren

Berechnungen eines virtuellen Feldes können Felder aus allen Segmenten einer Datenquelle enthalten, aber sie müssen sich auf einem eindeutigen absteigenden Pfad befinden. Unterschiedliche virtuelle Felder können sich selbstverständlich auf unterschiedlichen Pfaden befinden. Betrachten Sie beispielsweise die folgende Datenquellenstruktur:

unterschiedliche virtuelle Felder

Diese Datenquellenstruktur ermöglicht es Ihnen nicht, die folgende Formel zu schreiben:

NEWAMT = SALARY+GROSS;

Die Formel ist ungültig, da die Struktur voraussetzt, dass es für einen gegebenen EMPLOYEE mehrere SALARY-Segmente geben kann, und nicht klar ist, welches SALARY mit welchem GROSS assoziiert werden soll.

Um diese Operation durchzuführen, verwenden Sie die alternative Ansicht (wird unter Die Reportverarbeitung verbessern beschrieben).


Nach oben

x
Die Geschwindigkeit von Berechnungen in virtuellen Feldern erhöhen

Vorgehensweise:

Virtuelle Felder können in Maschinencode kompiliert werden, um Berechnungen zu beschleunigen.

Wenn Sie die Kompilierung von Formeln aktivieren, werden Formeln in IF-Kriterien auch kompiliert. In manchen Fällen enthält eine Formel in einem IF-Test zu viele Elemente für die Kompilierung (die Grenze ist 8192). In diesem Fall wird eine FOC1975-Meldung erzeugt, um anzugeben, dass die Formel nicht kompiliert werden konnte. Der Report wird jedoch erfolgreich fertiggestellt, und die Formel wird ohne Kompilierung richtig ausgewertet.

Sie können verhindern, dass virtuelle Felder kompiliert werden, und Sie können sie bei der Ausführung interpretieren, indem Sie die Einstellung des Parameters DEFINES SET ändern. Berechnungen werden dann jedes Mal interpretiert, wenn die Berechnung durchgeführt wird, was die Ausführungszeit der Prozedur verlängert.

Um Berechnungen zu kompilieren, muss ein C-Compiler auf Windows und UNIX verfügbar sein. Auf z/OS werden Berechnungen direkt in Maschinencode kompiliert. Wenn die Kompilierung aus irgendeinem Grund fehlschlägt, unterdrückt WebFOCUS automatisch die Option SET DEFINES=COMPILED. Genaueres über diesen Parameter finden Sie im Handbuch Reportanwendungen entwickeln .



x
Syntax: Die Kompilierung virtueller Felder einstellen
SET DEFINES = {COMPILED|OLD}

Hierbei gilt:

COMPILED

Kompilierte virtuelle Felder. COMPILED ist der Defaultwert auf z/OS.

OLD

Kompiliert virtuelle Felder nicht. OLD ist der Defaultwert auf Windows und UNIX.


Nach oben

x
Virtuelle Felder mit DEFINE FILE SAVE und RETURN beibehalten

Vorgehensweise:

Gelegentlich muss einer vorhandenen Anwendung neuer Code hinzugefügt werden. Wenn Sie Code hinzufügen, können Sie jederzeit vorhandene virtuelle Felder überschreiben, indem Sie ihre Namen versehentlich wiederverwenden.

Der Befehl DEFINE FILE SAVE bildet einen neuen Kontext für virtuelle Felder. Bei jedem neuen Kontext wird eine neue Schicht oder Befehlsumgebung erstellt. Wenn Sie zum ersten Mal auf eine neue Umgebung zugreifen, stehen alle virtuellen Felder, die in der vorherigen Schicht definiert wurden, zur Verfügung. Das Überschreiben oder Leeren einer Definition eines virtuellen Feldes betrifft immer nur die aktuelle Schicht. Sie können mit dem Befehl DEFINE FILE RETURN zum Default-Kontext zurückkehren, und die Definitionen der virtuellen Felder bleiben intakt.

Es können daher alle virtuellen Felder, die in der neuen Anwendung erstellt werden, entfernt werden, bevor Sie zur aufrufenden Anwendung zurückkehren, ohne dass sich dies auf vorhandene virtuelle Felder in dieser Anwendung auswirkt.

Ein Beispiel für DEFINE FILE SAVE und DEFINE FILE RETURN finden Sie unter Datenquellen verbinden.

Hinweis: Ein JOIN-Befehl kann nach einem DEFINE FILE SAVE-Befehl eingegeben werden. Sie müssen jedoch, um den Join-Kontext zu löschen, einen JOIN CLEAR-Befehl ausgeben, wenn der Join noch wirksam ist. Wenn nur virtuelle Felder und DEFINE FILE ADD nach einem DEFINE FILE SAVE-Befehl ausgegeben wurden, können Sie sie löschen, indem Sie den Befehl DEFINE FILE RETURN verwenden.



x
Syntax: Verhindern, dass virtuelle Felder überschrieben werden
DEFINE FILE filename SAVE 
fld1/format1=expression1; 
fld2/format2=expression2;
END
TABLE FILE filename ...
MODIFY FILE filename ...
DEFINE FILE filename RETURN
END

Hierbei gilt:

SAVE
Erstellt einen neuen Kontext für virtuelle Felder.
filename
Ist der Name der Masterdatei, die einen neuen Kontext erhält, und auf die die nachfolgenden virtuellen Felder angewendet werden, bevor der Befehl DEFINE FILE RETURN ausgegeben wird.
RETURN
Löscht den aktuellen Kontext, wenn er durch DEFINE FILE SAVE erstellt wurde, und stellt den vorherigen Kontext wieder her.

Nach oben

x
Dynamisch formatierte virtuelle Felder auf Reportspalten anwenden

Vorgehensweise:

Referenz:

Dynamische Formatierung ermöglicht es Ihnen, unterschiedliche Formate auf spezifische Daten in einer Spalte anzuwenden, indem Sie ein Temporärfeld verwenden, das dynamische Dateneinstellungen enthält. Sie können ein dynamisches Format erstellen, indem Sie eine Formel mit dem Define-Tool innerhalb oder außerhalb des ReportPainters schreiben.

Bevor Sie eine Reportspalte mit dem dynamischen Format formatieren können, müssen Sie den Report erstellen, und dann das Temporärfeld auf eine Spalte im Report anwenden. Sie können beispielsweise ein Temporärfeld erstellen, das unterschiedliche dezimale Währungsformate für Länder wie Japan (wo keine Dezimalstellen verwendet werden) and England (wo 2 Dezimalstellen verwendet werden) enthält. Diese Währungsformate werden als dynamische Formate betrachtet. Sie können dann das Temporärfeld, das die dynamische Formatierung enthält, auf eine Sales-Spalte anwenden. In einem Report spiegelt die Sales-Spalte die unterschiedlichen Währungsformate für jedes Land wider.

Das Feld, das die Formatspezifikationen enthält, kann Folgendes sein:

Das Feld, das die Formate enthält, muss alphanumerisch sein und wenigstens acht Zeichen lang sein. Es werden nur die ersten acht Zeichen für die Formatierung verwendet.

Es kann sein, dass das feldbasierte Format eine Länge angibt, die länger ist als die Länge des ursprünglichen Feldes. Wenn jedoch die neue Länge mehr als ein Drittel länger ist als die ursprüngliche Länge, kann es sein, dass die Reportspaltenbreite nicht breit genut ist, um den Wert zu enthalten (wird durch Sternchen im Feld gekennzeichnet).

Sie können ein feldbasiertes Format auf jeden beliebigen Feldtyp anwenden. Es muss jedoch das neue Format kompatibel sein mit dem ursprünglichen Format:

Wenn das feldbasierte Format ungültig ist oder eine unzulässige Typkonvertierung angibt, wird das Feld mit Pluszeichen (++++) in der Reportausgabe angezeigt.



x
Syntax: Ein Formatfeld definieren und anwenden

Nachdem das Formatfeld definiert wurde, können Sie es in einer Reportanfrage anwenden:

TABLE FILE filename 
display fieldname/format_field[/just]
END

Hierbei gilt:

display
Ist ein gültiger Anzeigebefehl.
fieldname
Ist ein Feld in der Anfrage, das neu formatiert werden soll.
format_field
Ist der Name des Feldes, das die Formate enthält. Wenn der Name des Formatfelds identisch ist mit einem expliziten Format, wird das explizite Format verwendet. Beispielsweise kann ein Feld namens I8 nicht für feldbasierte Neuformatierung verwendet werden, weil es als das explizite Format I8 interpretiert wird.
just
Ist eine Ausrichtungsoption: L, R oder C. Die Ausrichtungsoption kann vor oder hinter dem Formatfeld platziert werden, abgetrennt vom Format durch einen Schrägstrich.


Beispiel: Dynamisch formatierte Felder erstellen

Die folgende Anfrage formatiert das Feld SALES gemäß dem Wert des Feldes COUNTRY:

DEFINE FILE CAR
MYFORMAT/A8=DECODE COUNTRY ('ENGLAND' 'P15.3C' 'JAPAN' 'P15.0' ELSE 
'P15.2M');
END
TABLE FILE CAR
SUM SALES/MYFORMAT BY COUNTRY
END

Die Ausgabe ist:

COUNTRY          SALES
-------          -----
ENGLAND     12,000.000
FRANCE            $.00
ITALY       $30,200.00
JAPAN           78030.
W GERMANY   $88,190.00


x
Referenz: Verwendungshinweise für feldbasierte Neuformatierung


x
Vorgehensweise: Erstellen Sie ein virtuelles Feld, das dynamische Formatierung enthält

Im Define-Tool:

  1. Geben Sie den Namen des virtuellen Feldes in das Feld-Eingabefeld ein.
  2. Klicken Sie auf Format und geben Sie A8 (Alphanumerisch, 8 Zeichen) ein. Klicken Sie auf OK.
  3. Geben Sie die Formel in das Formelfenster ein oder verwenden Sie die Liste Felder, den Rechner oder die Funktionenliste, um die Formel zu erstellen. Die Formel sollte die Parameterwerte enthalten, die nötig sind, um die dynamische Formatierung zu definieren. Alle Formeln müssen großgeschrieben werden.
  4. Klicken Sie auf OK.

Sie können dynamische Formatierung auf eine Reportspalte anwenden.



x
Vorgehensweise: Eine Reportspalte mit dynamischen Formaten formatieren
  1. Rechtsklicken Sie auf eine Reportspalte im ReportPainter und wählen Sie Format aus.
  2. Klicken Sie auf den Options-Button Dynamisch im Bereich Formattypen.
  3. Wählen Sie das Feld mit dem gewünschten dynamischen Format in der Dropdown-Liste Formatfeld aus.
  4. Klicken Sie auf OK, um die Reportspalte zu formatieren.

Weitere Informationen über den ReportPainter finden Sie im Handbuch Reports mit dem ReportPainter erstellen .



Beispiel: Passende Formate für unterschiedliche Währungen einstellen

Im folgenden Beispiel ist zu sehen, wie das dynamische Feldformat verwendet werden kann, um unterschiedliche Währungsformate für spezifische Länder in einem Report einzustellen.

  1. Öffnen Sie die Prozedur, für die Sie das virtuelle Feld erstellen möchten, öffnen Sie dann das Define-Tool in der Komponenten-Konnektor-Toolbar.

    Die Open-Dialogbox wird geöffnet.

  2. Wählen Sie die Masterdatei CAR aus und klicken Sie auf Öffnen.

    Das Define-Tool wird geöffnet.

  3. Geben Sie MYFORMAT in die Feldbox ein.
  4. Klicken Sie auf den Button Format . Wählen Sie den Options-Button Alphanumerisch aus und geben Sie 8 als Länge an. Klicken Sie auf OK.
  5. Klicken Sie auf den Button Funktionen, um die Dialogbox Funktionsargumente zu öffnen:
    1. Wählen Sie DECODE in der Dropdown-Liste Eine Funktion auswählen aus. Die Funktion DECODE wird mit Platzhalter für die Argumente angezeigt.
    2. Wählen Sie COUNTRY als DECODE-Feldnamen aus.
    3. Geben Sie die tatsächlichen Werte und die Anzeigewerte ein, indem Sie in die folgenden Platzhalterfelder spezifische Werte eingeben, die die Dezimalstellen für jede Währung definieren: ENGLAND P15.2C JAPAN P15.0 ELSE P15.2M.
    4. Geben Sie den Defaultwert P15.2M ein, der zugewiesen werden soll, wenn der Code nicht in der Codeliste gefunden wird.
    5. Klicken Sie auf OK, um zum Define-Tool zurückzukehren. Die DECODE-Funktion wird als Define-Formel angezeigt.
  6. Klicken Sie auf OK, um das Define-Tool zu schließen.
  7. Wählen Sie Report in der Konnektor-Toolbox aus. Wählen Sie in der Dialogbox Öffnen CAR in der Liste der Masterdateien aus und klicken Sie auf Öffnen.
  8. Doppelklicken Sie im ReportPainter die Felder COUNTRY und SALES in der Felderliste.
  9. Wählen Sie die Spalte SALES aus und klicken Sie auf den Button Summe in der Toolbar Spalten.
  10. Rechtsklicken Sie die Spalte SALES und wählen Sie Format aus.
  11. Klicken Sie auf den Options-Button Dynamisch und wählen Sie das Feld MYFORMAT in der Dropdown-Liste Formatfeld aus.
  12. Klicken Sie auf OK, um die Formate, die mit dem Feld MYFORMAT assoziiert sind, auf die Spalte SALES anzuwenden.
  13. Wählen Sie die Spalte COUNTRY aus und klicken Sie auf den Button By in der Toolbar Spalten.
  14. Führen Sie den Report aus, wie es in der folgenden Abbildung zu sehen ist.

Führen Sie den Report aus

Beachten Sie, dass die Spalte SALES die Formatvariationen anzeigt, die Sie für jedes Land in der DECODE-Funktion angegeben haben.


Nach oben

x
Funktionsaufrufe mit SQL.Function-Syntax direkt an eine relationale Engine weiterreichen

Referenz:

Die SQL-Adapter können virtuelle Felder, die bestimmte SQL-Skalarfunktionen aufrufen, zur Verarbeitung an die relationale Engine weiterreichen. Dies ermöglicht es Ihnen, SQL-Funktionen in einer Anfrage zu verwenden, selbst wenn sie keine Entsprechung in der WebFOCUS-Sprache haben. Die Funktion muss auf Zeilen basieren und eine Parameterliste haben, die aus einer kommabegrenzten Liste der Spaltennamen oder Konstanten besteht. Um auf die Funktion in einer Formel zu verweisen, stellen Sie dem Funktionsnamen SQL voran.

Wenn sich das virtuelle Feld in der Masterdatei befindet, können sowohl TABLE-Anfragen als auch SQL-Anfragen, die sich für Automatic Passthru (APT) eignen, auf das Feld zugreifen. Wenn das virtuelle Feld von einem DEFINE FILE-Befehl erstellt wird, können TABLE-Anfragen auf das Feld zugreifen. Der Funktionsname und die Parameter werden ohne Übersetzung an die relationale Engine weitergereicht. Es muss daher die Formel, die das DEFINE-Feld erstellt, optimiert werden, da ansonsten die Anfrage fehlschlägt.



x
Referenz: Verwendungshinweise für Direktes SQL-Funktionsaufrufe


Beispiel: Die Funktion SQL CONCAT in einer Anfrage aufrufen

In diesem Beispiel wird das WebFOCUS-Muster Einzelhandelsdemo verwendet. Sie können diese Musterdatenquelle für einen relationalen Adapter erstellen, indem Sie auf die Anwendung rechtsklicken, in die Sie dieses Muster platzieren möchten, und Neu und dann Muster im Kontextmenü auswählen. Wählen Sie dann WebFOCUS - Einzelhandelsdemo in der Dropdown-Liste Musterprozeduren und Daten für aus und klicken Sie auf Erstellen.

Die folgende Anfrage mit der WebFOCUS-Datenquelle Einzelhandelsdemo verwendet die Funktion SQL CONCAT, um die Produktkategorie mit der Produktunterkategorie zu verketten.

SET TRACEUSER = ON
SET TRACEOFF = ALL
SET TRACEON = STMTRACE//CLIENT
SET TRACESTAMP=OFF
SET XRETRIEVAL = OFF
 
DEFINE FILE WF_RETAIL
CAT_SUBCAT/A50 = SQL.CONCAT(PRODUCT_CATEGORY, PRODUCT_SUBCATEG);
END
 
TABLE FILE WF_RETAIL
PRINT CAT_SUBCAT
BY PRODUCT_CATEGORY NOPRINT
END

Die Tracing-Ausgabe zeigt, dass der SQL-Funktionsaufruf an das RDBMS weitergereicht wurde.

SELECT      
CONCAT(T2."PRODUCT_CATEGORY",T2."PRODUCT_SUBCATEG"),  
T2."PRODUCT_CATEGORY",      
T2."PRODUCT_SUBCATEG"  
FROM    
wfr_product T2  
ORDER BY    
T2."PRODUCT_CATEGORY"   
FOR FETCH ONLY;

WebFOCUS