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:
Weitere Informationen finden Sie im Daten mit der WebFOCUS-Sprache beschreiben .
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.
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:
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.
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.
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.
Hinweis: Informationen über fehlende Attribute finden Sie unter Das MISSING-Attribut in einem DEFINE- oder COMPUTE-Befehl.
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
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
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
So definieren Sie ein virtuelles Feld (Define-Objekt) in einer Prozedur:
Die Dialogbox Define wird geöffnet. Genaueres finden Sie unter Define-Tool.
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.
Im Define-Tool-Fenster:
Die Dialogbox Format wird geöffnet.
Die Defaultlänge ist 20. Sie wird im Eingabebereich Länge angezeigt.
Die Dialogbox Format wird geschlossen.
Weitere Informationen über Feldformate finden Sie unter Feldformate zuweisen im Handbuch Reports mit ReportPainter erstellen.
Die Dialogbox Format wird geöffnet.
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.
Die Dialogbox Format wird geschlossen.
Weitere Informationen über Feldformate finden Sie unter Feldformate zuweisen im Handbuch Reports mit ReportPainter erstellen.
Im Define-Tool-Fenster:
Die Dialogbox Format wird geöffnet.
Die Dialogbox Datum- und Zeitformate wird geöffnet.
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.
Wenn ein Datumsformat ausgewählt wird, werden für das ausgewählte Format Formatzeichenfolge und Musterdatum angezeigt.
Die Dialogbox Datum- und Zeitformate wird geschlossen. Das ausgewählte Format wird im Abschnitt Datum/Zeit in der Dialogbox Format angezeigt.
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.
In der folgenden Abbildung sehen Sie das Define-Tool.
Das Define-Tool verfügt über folgende Felder oder Optionen:
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.
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.
Wenn ausgewählt, werden alle aktuellen Temporärfelddefinitionen gelöscht, die Sie zuvor der Liste der Temporärfelder hinzugefügt haben.
Öffnet die Dialogbox Format, in der Sie dem Temporärfeld ein Format hinzufügen.
Zeigt den Feldtyp, die Feldlänge und die Anzeigeoptionen an. Der Feldtyp kann alphanumerisch, numerisch oder Datum/Zeit sein.
Ö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.
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.
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.
Zeigt die Define-Phrase in Code an und weist auf Fehler hin.
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öscht das Temporärfeld, das in der Textbox Feld identifiziert ist. Das Feld ist nicht mehr verfügbar.
Ö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 .
Listet die Namen der Temporärfelder, die in der Masterdatei bereits assoziiert sind.
Listet die Felder auf, die in der Masterdatei definiert sind.
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.
Die Dialogbox Format wird geöffnet.
* .05
Die Formel für das Feld Define wird jetzt angezeigt als CURR_SAL * .05.
Sie können dann das neue Feld (INCREASE) im Fenster Feld in den Report-Tools auswählen.
Wählen Sie Define in der Komponenten-Konnektor-Toolbar im Procedure Viewer aus.
oder
Das Define-Tool wird geöffnet.
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.
Wählen Sie Define in der Komponenten-Konnektor-Toolbar im Procedure Viewer aus.
oder
Das Define-Tool wird geöffnet.
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.
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.
DEFINE FILE filename ADD
Hierbei gilt:
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
Informationen über Formeln finden Sie im Handbuch Reports mit der WebFOCUS-Sprache erstellen.
Vorgehensweise: |
Sie können mit dem ? DEFINE-Befehl alle virtuellen Felder anzeigen. Sie können auf diese Informationen auch im Define-Tool zugreifen.
? DEFINE
Weitere Informationen finden Sie im Reportanwendungen entwickeln .
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
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
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:
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.
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
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:
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).
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 .
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.
DEFINE FILE filename SAVE fld1/format1=expression1; fld2/format2=expression2; END TABLE FILE filename ... MODIFY FILE filename ... DEFINE FILE filename RETURN END
Hierbei gilt:
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.
DEFINE FILE filename format_field/A8 = expression; END
DEFINE format_field/A8 = expression; $
COMPUTE format_field/A8 = expression;
Hierbei gilt:
Nachdem das Formatfeld definiert wurde, können Sie es in einer Reportanfrage anwenden:
TABLE FILE filename display fieldname/format_field[/just] END
Hierbei gilt:
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
Im Define-Tool:
Sie können dynamische Formatierung auf eine Reportspalte anwenden.
Weitere Informationen über den ReportPainter finden Sie im Handbuch Reports mit dem ReportPainter erstellen .
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.
Die Open-Dialogbox wird geöffnet.
Das Define-Tool wird geöffnet.
Beachten Sie, dass die Spalte SALES die Formatvariationen anzeigt, die Sie für jedes Land in der DECODE-Funktion angegeben haben.
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.
(FOC32605) NON OPTIMIZABLE EXPRESSION WITH SQL. SYNTAX
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 |