0% found this document useful (0 votes)
1K views158 pages

Jet Reports Help

This document provides an overview of how to install and configure Jet Reports software to create reports from various database sources like Great Plains and Navision. It discusses prerequisites, data connections, installing friendly names, and how to browse and retrieve data using filters and functions. It also covers building reports with the Report Builder tool, including features like calculations, pictures, and joining data from multiple sources.

Uploaded by

Stan Per
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
1K views158 pages

Jet Reports Help

This document provides an overview of how to install and configure Jet Reports software to create reports from various database sources like Great Plains and Navision. It discusses prerequisites, data connections, installing friendly names, and how to browse and retrieve data using filters and functions. It also covers building reports with the Report Builder tool, including features like calculations, pictures, and joining data from multiple sources.

Uploaded by

Stan Per
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 158

Jet Reports Help

iii
Table Of Contents
Welcome to Jet Reports ...................................................................................................... 1
About Jet Reports ................................................................................................................ 3
What is Jet Reports?........................................................................................................ 3
Prerequisite Knowledge .................................................................................................. 3
Startup and Configuration ................................................................................................... 5
Installing Jet Reports....................................................................................................... 5
Quick Installation Guide ............................................................................................. 5
Prerequisites ................................................................................................................ 6
Installing Jet Reports................................................................................................... 8
Jet License Files .......................................................................................................... 9
Manually Activating Jet Reports ................................................................................ 9
Configuring Jet Reports ................................................................................................ 10
Application Settings .................................................................................................. 10
Data Source Settings ................................................................................................. 11
Universal Data Link Properties ................................................................................. 15
Verifying Your Designer/Viewer Status ................................................................... 17
Great Plains Installation Topics .................................................................................... 17
Finding Great Plains Configuration Information ...................................................... 17
Installing Friendly Table/Field Names and Views in GP ......................................... 18
Navision Installation Topics ......................................................................................... 19
Finding Navision Configuration Information ........................................................... 19
Microsoft Navision C/Front ...................................................................................... 20
Jet Reports Help
iv
Multiple Concurrent Navision Versions ................................................................... 20
Navision Language Modules .................................................................................... 20
Navision License Files .............................................................................................. 21
Updating Navision Drilldown Forms........................................................................ 22
The Data View Creator ................................................................................................. 23
Introducing Data Views and the Data View Creator ................................................ 23
Configuring Tables in the Data View Creator .......................................................... 24
Creating and Editing Categories ............................................................................... 25
Creating and Editing Data Views ............................................................................. 25
Testing Data Views ................................................................................................... 26
Importing and Exporting Categories and Data Views .............................................. 27
Advanced Installation Topics ....................................................................................... 27
Visual FoxPro Prerequisites ...................................................................................... 27
Using Jet Reports with Citrix .................................................................................... 28
Installing Friendly Table/Field Names in a Universal Data Source ......................... 28
Creating Reports ............................................................................................................... 31
Finding My Data ........................................................................................................... 31
The Jet Browser ........................................................................................................ 31
Introducing the Browser ....................................................................................... 31
Finding Navision Data .............................................................................................. 32
Navision Zoom to Find a Table or Field Name .................................................... 32
Finding Great Plains and Universal Data.................................................................. 32
Databases with Multiple Schemas ........................................................................ 33
Table Of Contents
v
Introducing Friendly Names for Great Plains and Universal Connectors ............ 33
SQL Views ............................................................................................................ 33
Drilldown .................................................................................................................. 34
Retrieving My Data....................................................................................................... 35
Filtering Data ............................................................................................................ 35
Blank Filters .......................................................................................................... 35
Databases with Multiple Schemas ........................................................................ 36
Date Filters ............................................................................................................ 37
Excluding Closing Dates....................................................................................... 38
Filtering Based on Data from Another Table ....................................................... 38
Linking to Other Tables ........................................................................................ 40
Limiting the Number of Records in a Query ........................................................ 42
Limiting the Number of Scanned Records in a Query .......................................... 43
Sorting ................................................................................................................... 43
Special Characters in a Filter ................................................................................ 44
Wild Card Filters................................................................................................... 45
Specifying More Than Ten Filters in the NL Function ........................................ 46
Retrieving Navision Data .......................................................................................... 46
Navision Advanced Dimensions ........................................................................... 46
Navision Codes and No.'s with Special Characters .............................................. 47
Retrieving Great Plains and Universal Data ............................................................. 48
Blank Spaces in Database Fields .......................................................................... 48
Databases with Multiple Schemas ........................................................................ 48
Jet Reports Help
vi
Fiscal Year Beginning Balances in the GP GL function ...................................... 49
Jet GP Views ......................................................................................................... 49
SQL= ..................................................................................................................... 58
Introducing Filter Lookup ......................................................................................... 59
Introducing the NL Function .................................................................................... 59
Introducing the NF Function ..................................................................................... 62
Introducing the GL Function .................................................................................... 63
Introducing the Classic Report Wizard ..................................................................... 65
Introducing the Insert Jet Function Wizard (Jfx) ...................................................... 65
Introducing the Report Builder ................................................................................. 66
Building Reports With the Report Builder ............................................................... 67
Array Calculations .................................................................................................... 69
Design Mode Calculations ........................................................................................ 72
Loading Pictures ....................................................................................................... 72
Building a Report From Multiple Databases ............................................................ 73
Listing Data Sources ................................................................................................. 73
Showing Data Queries .............................................................................................. 73
Structuring Reports ....................................................................................................... 74
Introducing Automatic Rows and Regions ............................................................... 74
Introducing Automatic Column and Row Resizing .................................................. 77
Introducing Automatic Hidden Columns, Sheets and Rows .................................... 77
Conditionally Hiding Rows, Columns or Sheets ...................................................... 77
Grouping and Subtotaling ......................................................................................... 78
Table Of Contents
vii
Grouping and Subtotaling Tutorial ........................................................................... 78
Multi-level Grouping and Subtotaling Tutorial ........................................................ 80
Performance and Convenience ..................................................................................... 83
Introducing the NP Function ..................................................................................... 83
Evaluating Formulas ................................................................................................. 83
Improving Report Performance ................................................................................ 85
Canceling Long Calculations .................................................................................... 86
Useful Excel Features ................................................................................................... 86
Addressing Modes .................................................................................................... 86
Charts ........................................................................................................................ 87
AutoCorrection ......................................................................................................... 87
Dates ......................................................................................................................... 87
Named Ranges .......................................................................................................... 88
Now() and Today() ................................................................................................... 89
Protected Worksheets................................................................................................ 89
Sums from Auto Rows and Columns........................................................................ 89
Advanced Database Issues ............................................................................................ 90
Building a Report From Multiple Databases ............................................................ 90
Databases with Multiple Schemas ............................................................................ 90
Navision Codes and No.'s with Special Characters .................................................. 91
Multiple Local Navision Database Connections ....................................................... 91
Navision Advanced Dimensions ............................................................................... 91
Local Navision Databases ......................................................................................... 92
Jet Reports Help
viii
SQL= ......................................................................................................................... 92
Updating Navision Drilldown Forms........................................................................ 93
Blank Spaces in Database Fields .............................................................................. 95
The Jet Reports User Interface .......................................................................................... 97
Introducing the Jet Reports Menu and Toolbar ............................................................ 97
Jet Reports Keyboard Shortcuts .................................................................................. 100
Sharing Reports Created with Jet Reports ...................................................................... 101
Introducing Report Viewers ........................................................................................ 101
Introducing Report Options with Database Lookup ................................................... 102
Introducing Stored Viewer Data in Reports ................................................................ 105
Advanced Stored Viewer Data.................................................................................... 109
Moving a Workbook ................................................................................................... 111
Automating Reports and Programmability ..................................................................... 113
The Jet Scheduler ........................................................................................................ 113
Introducing the Jet Scheduler .................................................................................. 113
Scheduling a Jet Reports Task ................................................................................ 113
Using the Jet Scheduler to Email Using SMTP ...................................................... 114
Customing Scheduled E-mail ................................................................................. 115
AutoPilot ..................................................................................................................... 116
Introducing AutoPilot ............................................................................................. 116
AutoPilot Command Line Parameters .................................................................... 116
AutoPilot Mode ....................................................................................................... 118
Using AutoPilot to Update Report Options ............................................................ 118
Table Of Contents
ix
AutoPilot Command Line Substitutions ................................................................. 119
Using the Windows Task Scheduler ....................................................................... 119
AutoPilot Testing .................................................................................................... 120
Webpage Creation Format ...................................................................................... 120
Programming with Jet Reports.................................................................................... 120
Launching Jet Reports from Navision .................................................................... 120
Launching Jet Reports from VBA .......................................................................... 122
Reference ........................................................................................................................ 125
Filtering Reference...................................................................................................... 125
NF Function Reference ............................................................................................... 127
NP Function Reference ............................................................................................... 128
NL Function Reference ............................................................................................... 130
GL Function Reference ............................................................................................... 134
SQL= Reference ......................................................................................................... 139
Troubleshooting .............................................................................................................. 141
#NAME Errors ............................................................................................................ 141
#VALUE Errors .......................................................................................................... 141
AutoCorrection ........................................................................................................... 141
Design Mode Calculations .......................................................................................... 141
Canceling Long Calculations ...................................................................................... 141
Excel and Formula Limits ........................................................................................... 142
Excel Date Problems ................................................................................................... 142
Filter Ranges and Excel .............................................................................................. 143
Jet Reports Help
x
Formatting Cells as Text ............................................................................................. 143
Local Navision Databases ........................................................................................... 143
Multiple Local Navision Database Connections ......................................................... 143
NF Field Not Found in Field Cache ............................................................................ 144
Visual FoxPro Errors .................................................................................................. 144
Wild Card Filters......................................................................................................... 144
Glossary .......................................................................................................................... 147

1
Welcome to Jet Reports
Congratulations on using Jet Reports, which you can use to create any report, any way,
right now. If you need help installing Jet Reports, see the Install and Setup Track under
Startup and Settings. You can use the "Filter my help for:" drop-down list to see help
specifically tailored to your database.
If you are new to using Jet Reports, you might want to follow the Jet Tutorial which will
guide you on a tour through some of Jet's most useful features. If you have used Jet
Reports before, please check out the What's New topic to see the great new additions
we've made to the latest version. If you need support, you can post a support request on
our support website by going to http://www.jetreports.com and clicking the Support tab.
Good luck and welcome to Jet Reports!

3
About Jet Reports
What is Jet Reports?
Jet Report is a Microsoft Excel Add-in that integrates Excel with any database that has an
OLE or ODBC driver available so you can create reports with simple worksheet
functions. Instead of printing a report and re-entering data into worksheets, you can enter
formulas that read directly from your database and refresh the data right in Excel.
Jet Reports adds four functions to Excel: NL, NF, NP and GL. The NL allows you to
retrieve any field from any record in any table. You can set up to ten filters to define
which record(s) you want.
The NF Function is a shortcut. You can define which record you want with the NL
function and then you can retrieve multiple fields from that record with the NF function.
By using the NF function, you do not have to retype all the filters for each field you want
to retrieve.
The NP function is a utility function which allows you to do certain tasks to speed up
your reports or make them more convenient. You can use NP to create date filters,
evaluate formulas or do array operations, among other things.
The GL function combines multiple NL functions to make General Ledger reporting even
easier for Navision and Great Plains users. The GL function is not available in Jet
Reports Universal.
Prerequisite Knowledge
To use Jet Reports you should have at least a basic understanding of both Microsoft
Excel and your database (be it Navision, Great Plains, or some other database). You
should also understand how to use worksheet formulas and have some experience
building Excel worksheets.

5
Startup and Configuration
Installing Jet Reports
Quick Installation Guide
The following steps are covered in greater detail in the Installation Track.
1. Download the Jet Reports installer (*.exe) from the support section of
http://www.jetreports.com.
2. Copy your Jet license file (*.jlf) from the email sent to you into the same folder
where you downloaded the Jet Reports installation file.
3. Run the Jet Reports installation file you just downloaded.
4. The activation wizard should start upon completion of the installation.
1. You must be an administrator in order to use the activation wizard. If you
are not an administrator, you will have to manually activate Jet Reports.
5. If your name appears as a designer in the Jet Reports license file, check your user
name in Excel to make sure it matches the Jet license file exactly. The Excel user
name is found in Excel Options/Popular in Excel 2007 and Options/General in
earlier versions.
6. Select Jet/Settings and select Browse next to the Jet license folder. Browse to the
directory where your Jet license file is located and click OK.
7. If you are using Navision:
1. Verify that your current Navision license file is present in your client
directory and is named fin.flf.
2. Verify that you have a version of C/Front installed that matches your
Navision version.
8. If you are using Great Plains:
1. If you want to use Jet Reports Friendly table/field Names or Jet Views,
verify that a database administrator has run the "JetGPUpdate.exe" utility
in the Jet Reports\Great Plains folder.
9. If you are using any other database type (i.e. FoxPro, SQL Server, Oracle, etc):
1. Determine if there is an OLE driver written specifically for your database
and install it.
2. If you are using a MS SQL Server based database, the OLE driver for MS
SQL Server is already installed.
3. If there are no OLE drivers available, locate and install an ODBC driver
for your database.
10. When installing Jet Reports for the first time, you will need to configure a
connection between Jet Reports and your database by selecting Jet/Data Sources.
1. If you are using Navision, see the topic on Finding Navision Configuration
Information.
2. If you are using Great Plains, see the topic on Finding Great Plains
Configuration Information.
Jet Reports Help
6
3. If you are using any other database type (i.e. FoxPro, SQL Server, Oracle,
etc.), you will have to configure it manually. Open Excel, select Jet/Data
Sources. Select File/New, type a name, and select Universal under Type.
Select the Properties button. See Configuring the Data Link Properties for
more information.
11. If you need to make any changes to your data source, in Excel click the Jet/Data
Sources and make any changes. See the Data Sources topic for more information.
12. Check your Jet menu or ribbon in Excel and confirm that you have a designer or
viewer menu as appropriate.
13. Browse through the new Jet Reports HTML Help system which is accessible in
Excel from Jet/Help.
14. Enjoy using Jet Reports!
Prerequisites
All Users
The Microsoft .NET Framework 2.0 must be installed. This can be downloaded and
installed via Microsoft Windows Update. If you don't have it installed, the Jet Reports
installer will install it for you.
Navision Users
Before you can use Jet Reports with Navision, you must have the following software
installed.
Excel XP or later.
The Navision Client with executable version 4.0 Service Pack 1 or later.
Navision C/FRONT.
Windows 2000 or later.
You must install a Navision client and we recommend Navision C/FRONT, which is
included in the SDK. Ideally, you should install exactly the same version of C/FRONT as
your Navision server and client. Since Navision often releases minor version changes, the
best way to insure you have the same version is to use the same CD for C/FRONT that
you used to install the rest of your Navision software.
A Navision License file that permits C/FRONT must be saved as FIN.FLF in the
Navision Client program folder. This is the same folder in which you find Fin.EXE. You
must copy the Navision License file to each workstation that will run Jet Reports. This is
a requirement of C/FRONT, not the Navision Client so if you do not copy the license file
to each machine, Jet Reports will not be able to connect to the database even if the
Navision Client works perfectly.
If you want to use the drilldown feature of Jet Reports, you may need to update the
drilldown forms as explained in Updating Navision Drilldown Forms. To use drilldown,
both Jet Reports and the Navision client must connect to a database server. Both the
Startup and Configuration
7
Navision and the SQL server options are supported. The drilldown feature is not
compatible with local databases so if you try to use drilldown while connected to a local
database, you may experience problems.
Review Navision Security
To use Jet Reports, a user must have cross company permissions to read the Company
table, execute permission for C/FRONT and read permission for the tables the user is
allowed to include in reports. Users with C/FRONT execute permission can see all fields
in the tables to which they have been granted read permission. Field level security is not
available when a user is granted both read permission on a table and execute permission
for C/FRONT. It is very helpful to grant Jet Reports users the execute permission for
Tools/Zoom so they can see all field values inside Navision.
Configuring Navision Security
If you do not have the appropriate permissions to read the Company table, you will
receive the message, "You do not have permissions to read the company table in
Navision..." when you try to test your connection in Jet Reports. To use Jet Reports, a
user needs a role with no company defined that gives them read permission to the
Company table. If a user does not have such a role assigned to them with no company
defined, then you will need to create this role. The role must have read permission for
both the Table and Table Data for the Company table. You must add this role with no
Company defined for any user who needs to use Jet Reports. This will not grant any
additional privileges to the user. In order to create this new role and assign it to users you
must be a Super user.
Great Plains and Universal Users
Before you can use Jet Reports with a Universal Connector, you must have the following
software installed.
Excel XP or later.
Windows 2000 or later.
Microsoft Dynamics GP version 8 or later.
The OLE or ODBC software for your database. Jet Reports will run faster using
OLE drivers than ODBC drivers so we recommend that you search for an OLE
driver even if you already have an ODBC driver installed. For database
installations that use MS SQL Server (including Great Plains), your computer
already has an OLE driver for MS SQL Server avaliable.
If you want to use Friendly Names or Jet Views in Great Plains, someone with
database administrator privileges should run the "Jet GP Updater.exe" program
located in the Jet Reports program folder. This operation is detailed in Installing
Friendly Table/Field Names and Views in GP.
Review Great Plains Security
Jet Reports Help
8
To use Jet Reports with Great Plains, a user needs a login to the Great Plains database
server with read permissions for both the company database(s) and the DYNAMICS
database. Great Plains can be configured in a number of different ways. In some cases, a
user's login to the Great Plains application may also be a valid login to the database
server. In other cases, the application login may map to an entirely different database
login or to a Windows login. Any Great Plains user who needs to use Jet Reports will
need to be given a login or have permissions assigned to their Windows login for their
GP database server that includes read information for both the company database(s) and
the DYNAMICS database.
Installing Jet Reports
The Jet Reports installation files can be found in the Downloads area on
http://support.jetreports.com.
Upgrading from Prior Versions of Jet Reports
Before installing Jet Reports, you should uninstall all previous Jet Reports version,
including any beta versions (if applicable).
If you have already installed the current version of Jet Reports, but did not uninstall
previous versions and encounter any problems, simply uninstall all versions (including
the current version) and then reinstall the current version.
Silent installation
You can install Jet Reports with no user interaction at all. This feature is primarily useful
when creating automated installation scripts. The command line syntax for a silent
installation is as follows:
<Installer.exe> /L<LCID> /v /qn
Replace <Installer.exe> with the Jet Reports installation file. Replace <LCID> with the
language code from the table of supported languages below. When the above command
is executed, Jet Reports will be installed with no user interaction but not activated.
To silently activate Jet Reports for the current user, you can use the Activation Wizard
with the -s command line option. The Activation Wizard is JetActivate.exe in the Jet
Reports folder.
Languages LCID
Danish 1030
Dutch 1043
English
(United
States)
1033
Startup and Configuration
9
French
(France)
1036
German 1031
Japanese 1041
Korean 1042
Slovenian 1060
Spanish 1034
Swedish 1053
Turkish 1055

Jet License Files
When you install Jet Reports, you will have to put your Jet license file in the Jet Reports
program folder, or configure Jet Reports to use an alternate location. You can store your
Jet License file in a different folder than the Jet program folder, such as a shared network
folder, by updating the Jet License Path under Jet/Settings. If you have received your
license by email, you should check the extension to make sure that it is .jlf. Some email
programs will change the extension of ASCII files to .txt, which will break Jet Reports.
For Navision users, if your Navision license changes, you will also need a new Jet
license.
Non-Navision Jet license files have the Jet Reports license number for a filename. The
name should end in U and have a ".JLF" extension.
Manually Activating Jet Reports
Excel needs to be configured to recognize Jet Reports as an Add-In. Since Excel stores
Add-In configuration by user, if multiple users use the same workstation or server, this
step must be done for each user. There are a two ways to activate Jet Reports. If you are
an user with administrative privileges, you can use the Jet Activation Wizard. This
wizard runs automatically after you install Jet or it can be run from the start menu. You
can also use Excel to activate Jet Reports manually (especially in Excel 2000 where the
automatic activation may not work or if you are a limited user).
To Activate Jet Reports manually do the following.
Open Excel and go to the Excel Add-Ins (Excel Options/Add-Ins/Go in Excel
2007 or Tools/Add-Ins in earlier versions).
Click the Browse button and browse to the Jet Reports folder.
If you are using Excel 2007, double-click the JetReports.xlam file. In earlier
Excel versions, double-click the JetReports.xla file.
If prompted, click Yes to overwrite the file.
Jet Reports Help
10
Click OK. You should now see a Jet menu or ribbon.
Configuring Jet Reports
Application Settings
After installation, you must configure Jet Reports. From Excel, use the Jet/Settings menu.
The Settings lists options that affect all of Jet Reports, regardless of the data source type.
Jet License File Path
By default, the Jet Reports license file is stored in the Jet Reports program folder. If you
want to store the Jet license file somewhere else, you can enter the path in Jet License
File Path. If you store the license files on a network shared drive, you wont need to copy
Jet license files to each workstation. Navision users still need to copy the Fin.flf file as
described in the Prerequisites.
Simulate Viewer Mode
Simulate Viewer Mode temporarily removes design privileges so that a report Designer
can test reports before they are distributed to report Viewers.
User Interface Language
Setting the user interface language changes the language in which Jet Reports windows
will be displayed. Only languages into which Jet Reports has been translated appear in
the list.
Lookup Limits
The Lookup Sample Value Limit controls how many sample values are returned for
lookups in the Jet Browser, the Jfx, the Wizards, and Report Options. The Lookup
Record Scan Limit controls how many records are scanned in the Jet Browser, the Jfx,
the Wizards, and Report Options.
Show Data Source in Toolbar
This enables or disables the Quickswitch feature on the toolbar which lets you see and
change the default Data Source/Company on the Jet toolbar.
Auto Debug
When checked, after a report is run, Jet Reports automatically selects the first cell in your
report worksheet that contains a #VALUE! and runs the debug function to attempt to give
you an error message explaining the source of the #VALUE!. This feature is equivalent
to the Jet/Debug menu option except that it happens automatically.
Preserve Page Breaks
Startup and Configuration
11
When checked, Jet Reports will replicate manual page breaks occurring within a
replicator region. This can degrade performance, so unless manual page breaks are
necessary, it is recommended that this setting be left unchecked.
Data Source Settings
A data source is a connection to a database. You must define and configure at least one
data source in order to use Jet Reports to connect to a database. Depending on the
database you use, the settings that Jet needs to connect to it are different.
You use the Data Sources option to define one or more data sources. Use the File/New
menu to add a new data source. Use the Edit/Delete menu to delete Data Sources.
When creating a new data source, use Type to specify whether you are connecting to a
Navision, Universal, or Great Plains database. If your database was created by any
program other than Navision or Great Plains, use the Universal type.
For all data sources, there are buttons next to the Data Sources drop down to set the
currently selected data source to be the default data source or to test the connection to the
database. Clicking the link next to the colored orb at the bottom of the form displays your
Jet Reports license file. Note that this requires you to configure the data source correctly
before it will work. The Test Connection button tests your database connection and
informs you of your status as a Report Designer or Report Viewer. You should only
select this button after you have finished setting up the data source.
Navision Data Sources Options
Each option for configuring a Navision Data Source is detailed below.
Tools Menu/Update Dilldown Forms
On the tools menu, select Update Drilldown Forms if you want to update your Navision
drilldown forms. For more information on updating the drilldown forms, see the section
Updating Navision Drilldown Forms. After selecting this menu option, you must click the
Browse button and browse to your exported Navision object text file. Then you must
click the Update button to update the forms.
Navision Client Program Folder
If you have more than one version of Navision on your computer, you may need to
specify the folder that contains the FIN.EXE program for the version of Navision that
corresponds to the version of the database or server you are trying to access.
Language Module Folder and Language
These are detailed in Using a Navision Language Module.
Authentication
Jet Reports Help
12
Choose whether to use Windows or Database Server Authentication. Your choice here is
dictated by how your Navision database is configured. If you are not sure, check with
your IT staff or with your Navision Solution Center.
If you choose Database Server Authentication, you can enter a User ID and Password. If
you leave either of these fields blank, the user will be prompted for database login
credentials when they attempt to connect. Although the password is encrypted, the
encrypted password could be used to gain access to Navision data through Jet Reports.
Encrypted passwords are stored in exported options files and in the registry.
Server Type
User Server type to specify whether you are connecting to a Local Database File, a
Navision Database Server, or a Microsoft SQL Server.
Server
Enter the name of the server in Server.
If you are unsure what to enter in these fields, you can look in Navision under
File/Database/Information on the Database and Connection tabs. Note: You must be
connected to your database in Navision before you can use File/Database/Information.
Database
If you are using a Microsoft SQL Server type, type the name of the database here.
If you are using a Local Database File type, click the "..." button and browse to the
Navision database file you want to use.
Net Type
Enter the appropriate network protocol in Net Type.
If you are unsure what to enter in these fields, you can look in Navision under
File/Database/Information on the Database and Connection tabs. Note: You must be
connected to your database in Navision before you can use File/Database/Information.
Company
Enter the company name that you will use the most in Company. This will be the default
company used by Jet Reports. Use the drop down to select the company name. Clicking
the drop down opens a connection to the database.
Universal Data Sources Options
Startup and Configuration
13
Once you have selected the Universal Data Source, most of the configuration options on
the Data Sources screen will disappear. The majority of the configuration options are
located under the Properties button.
Enable Friendly Names for this data source
Check the box if you want to use Friendly Names on your universal data source. More
details on configuring and using friendly names are under the topic Installing Friendly
Table/Field Names.
Friendly Name Group
If you choose to Use Friendly Names, you can actually create multiple named groups of
friendly names. For example, if you need to support multiple languages, you could create
a group of friendly names for each language you wanted to support. Those groups can be
selected here. For information on creating friendly name groups, see Installing Friendly
Table/Field Names.
Display Format
If you have chosen to use Friendly Names, you have the option to change the format in
which Table and Field names are displayed. This option will only work correctly if you
install the Friendly Table/Field name feature. There are four options for formatting the
Table and Field names: Friendly, Physical, Friendly (Physical) and Physical (Friendly).
For the Friendly and Friendly (Physical) options, Jet Reports will display the Friendly
names and sort by Friendly Name. This can be useful if you are searching for a Friendly
name. When you drag and drop a field onto Excel, Jet Reports will give you formulas and
column headings based on the Friendly names. For the Physical and Physical (Friendly)
options, Jet Reports will sort the names by Physical name so the tables will all be
grouped together by category. When you drag and drop a field onto Excel, Jet Reports
will give you formulas and column headings based on the Physical names.
Trim Trailing Spaces from Text Fields
Some databases may insert a certain number of spaces after values in text fields in order
to achieve equal length strings in the text fields. This may prevent you from filtering
correctly on those fields. You can select this option in order to trim off those spaces to
make using these fields easier.
Table and Fields Names are Case-Sensitive Names
Some databases, such as Great Plains, are case sensitive with respect to field and table
names queries. This means that if you enter Customerid in Jet Reports and the actual field
name is CustomerID, some databases will give you an ambiguous error message. When
the Case Sensitive Names option is turned on, Jet Reports will check the table and field
names that you enter to make sure they have the correct case before querying the
database. If you have entered Customerid and should have entered CustomerID, Jet
Jet Reports Help
14
Reports will direct you to your error. If you turn this option off, you may get ambiguous
error messages if your database has case sensitive names.
Blank Filters Match Null Values
If you would like to treat null values and blank values equivalently in your database,
check the Blank Filters Match Null Valeus option.
Great Plains Data Sources Options
Authentication
Choose whether to use Windows or Database Authentication. Your choice here is
dictated by how your Great Plains database is configured. If you are not sure, check with
your IT staff or with your Great Plains VAR.
If you choose Database Server Authentication, you can enter a User ID and Password. If
you leave either of these fields blank, the user will be prompted for database login
credentials when they attempt to connect. Although the password is encrypted, the
encrypted password could be used to gain access to Great Plains data through Jet Reports.
Encrypted passwords are stored in exported options files and in the registry.
Server
Enter the name of your Great Plains SQL Server here. You may need to contact your IT
staff or Great Plains VAR to get this information.
Company
Enter the company name that you will use the most in Company. Use the drop down to
select the company name. Clicking the company drop down opens a connection to the
database.
Enable Friendly Names for this data source
Check the box if you want to use Friendly Names. More details on configuring and using
friendly names are under the topic Installing Friendly Table/Field Names.
Friendly Name Group
If you choose to Enable Friendly Names, you can actually create multiple named groups
of friendly names. For example, if you need to support multiple languages, you could
create a group of friendly names for each language you wanted to support. Those groups
can be selected here. For information on creating friendly name groups, see Installing
Friendly Table/Field Names.
Display Format
Startup and Configuration
15
If you have chosen to use Friendly Names, you have the option to change the format in
which Table and Field names are displayed. This option will only work correctly if you
install the Friendly Table/Field name feature. There are four options for formatting the
Table and Field names: Friendly, Physical, Friendly (Physical) and Physical (Friendly).
For the Friendly and Friendly (Physical) options, Jet Reports will display the Friendly
names and sort by Friendly Name. This can be useful if you are searching for a Friendly
name. When you drag and drop a field onto Excel, Jet Reports will give you formulas and
column headings based on the Friendly names. For the Physical and Physical (Friendly)
options, Jet Reports will sort the names by Physical name so the tables will all be
grouped together by category. When you drag and drop a field onto Excel, Jet Reports
will give you formulas and column headings based on the Physical names.
Trim Trailing Spaces from Text Fields
Some databases may insert a certain number of spaces after values in text fields in order
to achieve equal length strings in the text fields. This may prevent you from filtering
correctly on those fields. You can select this option in order to trim off those spaces to
make using these fields easier.
Table and Fields Names are Case-Sensitive Names
Some databases, such as Great Plains, are case sensitive with respect to field and table
names queries. This means that if you enter Customerid in Jet Reports and the actual field
name is CustomerID, some databases will give you an ambiguous error message. When
the Case Sensitive Names option is turned on, Jet Reports will check the table and field
names that you enter to make sure they have the correct case before querying the
database. If you have entered Customerid and should have entered CustomerID, Jet
Reports will direct you to your error. If you turn this option off, you may get ambiguous
error messages if your database has case sensitive names.
Blank Filters Match Null Values
If you would like to treat null values and blank values equivalently in your database,
check the Blank Filters Match Null Valeus option.
Universal Data Link Properties
The Data Link Properties Window opens when you click the Properties button when
configuring a Universal Data Source. You should click on the Provider tab at the top of
the screen to start your configuration.
Provider Tab
The provider tab allows you to select the OLE DB Provider that matches your database.
There are many cases where you have several possible options for connecting to your
database. One good example of having several valid connection options is MS Access.
The Jet OLE DB Provider and the OLE DB Provider for ODBC Drivers will both allow
Jet Reports Help
16
direct connection to an Access database file such as Northwind.mdb. Likewise, there is
an Oracle OLE DB Provider as well an SQL OLE DB Provider, and both of those
database types allow ODBC connections. In general, it is faster to use a direct OLE
connection instead of ODBC. The OLE DB Provider for ODBC Drivers also requires that
you separately configure an ODBC connection to your database.
Connection Tab
Once you have selected your data provider, (see previous topic) click the Next button or
click on the Connection tab.
On the Connection tab, you can specify where your data is located and how to connect to
it. The fields displayed on this tab depend upon the OLE DB Provider selected. For
example, if you select the OLE DB Provider for Oracle, the Connection tab displays
fields for the server name and login. If you select the OLE DB Provider for SQL Server,
then the server name, type of authentication, and database must be furnished.
In most cases, once you have configured the Connection tab, you can click the Test
Connection button to determine if Jet Reports can connect to your database. If your
database connection works you will get the following message.
Advanced and All Tabs
Use the Advanced tab to view and set other initialization properties for your data. The
Advanced tab is provider-specific and displays only the initialization properties required
by the selected OLE DB provider. For more information about advanced initialization
properties, refer to the documentation provided with each specific OLE DB provider.
Use the All tab to view and manually edit all OLE DB initialization properties available
for your OLE DB provider. Properties can vary depending on the OLE DB provider you
are using. For more information about the initialization properties, refer to the
documentation provided with each specific OLE DB provider.
Setting up Northwind
The NorthWind database is a sample access database that comes with MS Office so it is
used as an example in the Jet Reports Universal User Guide. By default in Office 2003,
NorthWind is installed at C:\Program Files\Microsoft
Office\Office11\Samples\NorthWind.mdb. If you have Office XP, substitute Office10 for
Office11. If you have Office 2000, substitute Office9 for Office11. After you select the
Microsoft Jet OLE DB Provider on the Provider tab of the Data Link Properties window,
click Next to enter the path to the database. You will need to enter Admin as the User
name and select the Blank password option. Click Test Connection and you should have
access to NorthWind.
This topic is not relevant to Navision or Great Plains connectors.
Startup and Configuration
17
Verifying Your Designer/Viewer Status
If you are only licensed as a Viewer in Jet Reports, the Jet/Design option will be grayed
out and will not be usable. If you are licensed as a Designer, then the Jet/Design option
will be available. If you should be licensed as a Designer and you do not get the
Jet/Design option, there are two common problems.
If Jet Reports cannot find a valid Jet license file, you will not get the Jet/Design option.
You should check that your Jet license file (.JLF) is in the Jet License File Path specified
in Jet/Settings. If the path in the settings is empty, the default location is the Jet Reports
program folder. You can test the integrity of your data source configuration by clicking
the Test Connection button in Jet/Data Sources. You should receive a message that you
are licensed as a Viewer or a Designer. If there is a connection problem or a problem with
your Jet license, you will get an error message related to the cause of the problem.
If your user name in Excel does not match your name in the Jet Reports license file
exactly, you will not get the Jet\Design option. To verify that your name is entered in
Excel correctly, click hyperlink next to the colored orb at the bottom of Jet/Data Sources.
If you scroll down, you should see a list of designer names. Your name here needs to
match your Excel user name, which you can find in Excels Options/Popular (Excel 2007)
or Excel Tools/Options/General (earlier versions of Excel).
Great Plains Installation Topics
Finding Great Plains Configuration Information
Server Name
Great Plains users need to know several pieces of information in order to configure their
Jet Reports data source. First, they must know the Server name. To find this, first open
the Great Plains application.

On the login screen, there is a Server listed. This is NOT the name of your Great Plains
server. Copy this name down and then go to Start\Control Panel\Administrative
Tools\Data Sources (ODBC). On the System DSN tab, you should see the same name
that was listed in the Great Plains application.

Double-click on this data source to configure it. On the first screen, at the bottom, you
should see a Server listed. This is the name of your actual GP server, which you need to
enter into the Jet Reports options.

Jet Reports Help
18
Authentication
Next, you need to determine your login type and information. Great Plains can be
configured in a number of different ways. In some cases, you can use the same
username/password for Jet that you use to login to Great Plains. However, Great Plains is
not always configured like this; in some cases the application login may map to an
entirely different database login or to a Windows login. If your Great Plains application
login doesn't work and if Windows authentication doesn't work, then you will probably
have to ask your Great Plains database administrator for the login information to the
database. You need read access for both the company and dynamics databases.
Company
Finally, you need the name of the Great Plains company to use in Jet Reports. In the
Great Plains application, the screen after the login screen shows you the list of companies
availabe. These are the same companies available in Jet Reports.

This topic is only applicable to Great Plains users.
Installing Friendly Table/Field Names and Views in GP
Friendly Names
If you are using Great Plains, you will quickly notice that the table and field names that
are listed in the Browser window are somewhat cryptic. The Jet Reports Browser can
display your table and field names in several easily readable formats, similar to the Smart
List window in Great Plains. The friendly name feature requires three tables which you
can automatically create and populate using the Jet GP Update utility. This utility will
add the JETFPG, JETTMAP, and JETFMAP tables to your database and populate them
with them with the Friendly Names provided by Great Plains. This utility is called "Jet
GP Updater.exe" and can be found in the Jet Reports program folder. Before running this
utility you need to have configured a "Great Plains" data source in Jet Reports and have
your Great Plains application open.
Views
In Great Plains, you may have noticed that sometimes even with friendly names installed
it is difficult to figure out what certain status field and type field values mean since they
are often just lists of integers in the database. It is also difficult at times to figure out how
certain tables are related for creating certain types of reports such as sales, purchasing, or
general ledger reports. To solve both of these problems, Jet Reports has created Jet Views
for some common report writing areas. These views can be installed by using the same
Jet GP Update utility used to install friendly names. This utility adds SQL views to the
GP company database with the prefix "Jet ". So the sales view is called "Jet Sales", the
purchasing view is called "Jet Purchasing", etc. It also adds the Jet Date View and the
Startup and Configuration
19
JET_DATE table which is required to use the Jet Date view. Jet Date allows you to easily
pull any dates you need out of the database.
Running the Utility
1. Run the "Jet GP Update.exe" utility. You will see this message indicating the
tables that will be added to your database.
2. Make sure you have the Great Plains application open and have logged in.
3. Choose the Jet Reports Great Plains data source for which you would like to add
Friendly Names. See Data Sources for more information on configuring your GP
data source.
4. Choose the Company for which you would like to add Friendly Names.
5. Choose whether to add Friendly Names, the Jet Date Table, Jet Views, or all
three. Click "Run" and the utility will run.
6. Once the utility is finished, configure your Great Plains data source to use
Friendly Names and look for the Jet Views and Jet Date Table in the Report
Wizard and Jfx.
Navision
Friendly Names are not necessary in Navision.
Navision Installation Topics
Finding Navision Configuration Information
You can find Navision configuration information such as server type, server name, net
type, and authentication type in the Navision client program. To do this, open the
Navision client and go to File\Database\Information.

If you are using a Navision server or local connection, you will find most of the
information you need to configure Jet Reports on the Connection tab.

If the Connection is Local, then you want a Navision-Local data source in Jet Reports. If
the Connection is Server, then you need a Navision-Server data source in Jet Reports.
The Server Name and Net Type are also needed to configure your Jet Reports data
source.
If you are using a Navision SQL Server, you will find most of the information you need
to configure Jet Reports on the Database tab.

Jet Reports Help
20
To configure a Navision-SQL Server type data source in Jet Reports, you need the Server
Name, Database Name, and Net Type.
In either Navision-Server or Navision-SQL Server, you need to know what type of
authentication you use to access the database. The authentication is the security method
used by Navision to determine the identity of the person connecting to the database. If
you have to type a username/password in each time you open Navision, then you are
using Database authentication. You will have to supply your Navision
username/password to Jet Reports in order for it to connect to Navision. If you do not
have to type in a username/password each time you open Navision, then you are using
Windows authentication. Navision and Jet Reports will use your Windows login
credentials to connect.
Microsoft Navision C/Front
Microsoft Navision C/Front is the interface that Jet Reports uses to communicate with
Navision. C/Front is part of the Navision SDK, and can be installed from the Navision
client CD from either the Devkit or SDK folder, depending on the version of Navision. It
is recommended that C/Front be installed when using Jet Reports with Navision. The
version of C/Front should match the version of the Navision client installed (the version
of the executables). If you run multiple versions of Navision, you should install only one
version of C/Front (see Multiple Concurrent Navision Versions).
Microsoft Navision C/Front is only applicable to Navision users.
Multiple Concurrent Navision Versions
Jet Reports can work with multiple versions of Navision on the same machine.
You should install one and only one version of C/FRONT. You should install the version
of C/FRONT that matches your most recent version of Navision. It is very important to
fill in the proper path in the Navision Client Folder in the Jet/Data Sources. Jet Reports
chooses the version of C/FRONT based on the version in the Fin.exe file found in the
Navision Client Folder.
One common way to use this feature is to change the Default Data Source depending on
which version of Navision you want to use. You can also use the "DataSource=" feature
of the NL function or fill in the Data Source field of the GL function. See Building a
Report From Multiple Databases and the NL Function Reference for more information on
DataSource=.
This topic is only relevant to Navision connectors.
Navision Language Modules
Startup and Configuration
21
In Navision, you can enter table names, field names, and options in your language if you
export a Navision Language Module from Navision and tell Jet Reports where to find it.
The language module should have the same name as the three letter language code and an
".flm" extension. You can save the language module in the language folder beneath your
Navision Client program folder. For example, for Danish, you might export your file to
the following directory.
"C:\Program Files\Navision Attain\Client\DAN\DAN.FLM"
Jet Reports only needs the captions stored in the table objects. To export a Language
Module, go into Navision and from the menu choose Tools/Object Designer.
From Object Designer, click the Table button and then select all tables by clicking the
square in the top left corner of the Table list. You can also choose the menu option
Edit/Select All.
After you have selected All Tables, choose Tools/Language Module/Export.
Enter the appropriate File Name, Language, and click OK.
Next, open Excel and go to Jet/Data Sources. If necessary, browse to the directory in
which you saved the language module in Language Module Folder. Enter the three letter
language code in Language.
Instead of placing all Language Modules in the language subfolder of the Navision Client
Program Folder, you can place them in a common network folder and put the path to that
folder in Langauge Module Folder.
Jet Reports will first look in the folder specified in the Language Module Folder for the
language module file. If you don't specify a language module folder, it will look in the
language subfolder of the Navision Client Folder. If an appropriate language module is
not found, Jet Reports will use default Cronus captions if available.
This topic is only relevant for Navision users.
Navision License Files
To use Jet Reports with Navision, a Navision License file with the C/Front granule must
be saved as Fin.FLF in the Navision Client folder. This is the same folder in which you
find the Fin.EXE file. You must copy the Navision License file to each workstation that
will run Jet Reports. This is a requirement of Microsoft Navision C/Front, which Jet
Reports uses to connect to Navision. If you do not copy the Navision Fin.FLF license file
to each machine, Jet Reports will not be able to connect to the database even if the
Navision Client works correctly.
Navision license files are only applicable for Navision users.
Jet Reports Help
22
Updating Navision Drilldown Forms
The drilldown forms in Jet Reports match the relationships between tables and drilldown
forms for the objects in Navision. If a table does not have a drilldown form, drilldown for
that table will not be available. The default drilldown forms will work for most default
tables in Navision. However, if you have added tables or changed the default drilldown
forms, you need to update the Jet Reports drilldown forms. Jet Reports stores the
drilldown forms separately for each data source. If you have more than one data source
you need to update each one.
In some cases, you might need to add a drilldown form and then update the
corresponding table since not all tables in Navision have drilldown forms. After you are
satisfied with all the drilldown form/table relationships in Navision, export the table
definitions to a text file. You might not be able to export all tables to text due to license
restrictions. You must export all the tables that you want to change. Every time you
update drilldown forms, all previous changes you have imported are deleted. So each
time you export tables in order to update drilldown forms, make sure to include all the
tables that you need to drilldown into.
After the tables are exported, open Excel and go to Jet/Data Sources. Select
Tools/Update Drilldown Forms, select the exported text file, and click Update.
In order to perform the operations described above, follow the following procedure.
In Navision:
1. Please note that due to the Navision granule needed to export objects as text, this
will probably have to be done by a Navision provider. End users usually do not
have the necessary granule in their Navision license.
2. Open Navision and select Tools/Object Designer.
3. Select the table for which you would like to update the drilldown form, and click
Design.
4. Scroll to the bottom of the list of fields and select the first line that does not
currently contain data.
5. Select View/Properties, then click on the Value field for the DrillDownFormID
Property.
6. Click on the up arrow, and select the appropriate form.
7. Close the Properties window and the Table Designer, and select Yes when asked
if you would like to save.
8. With the name of the updated table still selected, select File/Export.
9. In the Save as Type drop-down menu, select Text Format.
10. Save the file to the directory of your choice.
In Jet Reports:
1. Open Excel and go to Jet/Data Sources.
Startup and Configuration
23
2. Go to Tools/Update Drilldown Forms..
3. Under Navision Object Text File, select the .txt file that you have just exported
from Navision.
4. Click the Update button.
5. Click OK to close the Jet Data Sources.
You should now be able to drill down from your Jet Report.
This topic is only relevant for Navision connectors.
The Data View Creator
Introducing Data Views and the Data View Creator
The Data View Creator is a tool for advanced users to create and edit the data views that
are available in the Jet Reports Report Builder tool. This utility can also be used to
translate Data Views for use in non-English speaking locales. Currently, data views are
only available for Dynamics NAV data sources.
Data Views
Each data view represents a collection of tables, filters, fields, and relationships that are
pre-packages so that an end user can quickly generate custom reports in the business area
that the data view was designed for. Some example of business areas are Sales
Document History, Cash receipts, and Purchase History by Item.
Data Views are composed of the following elements:
Data View Name
Description
Category
Base Table
Filters
Fields
Captions
Sort Order
Relationships
Data View
Name
This is the name of the data view that will be visible to the end user in
the Report Builder. It must be unique within the category and should
clearly identify the business area that the data view is designed for.
Description This is the description that will appear next to the data view on the
first screen in the Report Builder.
Category Data views are contained in categories. Categories are like folders
which can hold sub categories and/or data views.
Base Table The base table defines the detail row of any report created with this
Jet Reports Help
24
data view. One detail row will appear on the report for every record
in the base table.
Filters Filter can be optionally added to the base table. For example. Entry
Type=Payment, Open=Yes could limit customer entries to open
payments.
Fields Fields in the base table or related tables can be included or excluded
from the data view. Fields can be sorted and optionally given specific
captions for the data view. One example of the need for specific
captions in Dynamics NAV is the Source No. field on the Item
Ledger Entry table. In an Item Sales data view, the Source No.
field could be expressed as Customer No., whereas in an Item
Purchases data view it might be expressed as Vendor No..
Limiting the use of captions is recommended as they must be
manually translated if the data view is to be used in multiple
languages.
Field
Relationships
Some fields contain relationship to other tables. For example. Sell-
To Customer No. in the Sales Order would relate to the No. field
in the Customer table. Relationships are used for groupings and can
also be navigated in the Report Builder by the user to include fields
from related tables.

Configuring Tables in the Data View Creator
The Data View Creator can be found on the start menu (Start/All Programs/Jet
Reports/Dynamics NAV/Data View Creator). When you open the Data View Creator for
the first time, or when you choose a data source for the first time, you will be prompted to
load table relationships. This process loads all the tables and fields from the database
along with the default table and field relationships. If you choose not to load table
relationships, you will not be able to create or edit data views for that data source.
Before creating data views, it is recommended that you configure tables. When you
configure tables you can create relationships between tables that may not already exist as
defaults in the database. You can also select a default set of fields for each table that will
be included for that table when it is added to a data view. These default fields can also be
given a default sort order. Selecting default fields and sorting them can significantly
speed up the process of creating data views.
To open the table configuration tool, go to Tools/Table Configuration. You will see a list
of tables on the left, a list of all fields for the selected table in the middle, and the default
fields for that table on the right. After loading the table relationships for the first time, all
fields in all tables will be set as default fields.
In order to select default fields, first select a table, and then check the boxes next to the
fields you want to be defaults in the All Fields list. Checked fields will appear in the
Startup and Configuration
25
Default Fields list. To remove default fields, simply uncheck them. Drag and drop fields
within the Default Fields list in order to sort them in the order you want them to appear to
the user of the Report Builder.
You can also use the Table Configuration screen to add relationships that do not exist by
default in the database. Fields that have links to other tables appear in bold in both the All
Fields and Default Fields lists.
To create a new link, right-click a non-bold field you wish to relate to another table and
select Create/Edit Link. The Table Link Editor window will appear. At the top you will
see the table and field that you selected. You will also see a combo box with the foreign
table. Use this combo box to select the table that you would like to relate this field to.
You will then see a combo box with the foreign field. Use this combo box to select the
field on the foreign table that directly corresponds to the field which you originally
selected. If the relationship is defined by links between more than one set of fields, you
can select additional relating fields from the drop down lists at the bottom of the window.
Existing relationships can be edited by right-clicking bold fields and selecting Create/Edit
Link. Relationships can be removed by right-clicking bold fields and selecting Remove
Link.
Creating and Editing Categories
Categories function like folders into which you can put sub-categories or data views.
Categories are displayed in a tree view on the left side of the main Data View Creator
window. When a category is selected, data views contained in that category will be
displayed in the right pane of the window.
To create a category, right-click in the category pane and select New. If you right-click
on an existing category, a new sub-category will be created in that category. Otherwise a
new category will be created at the base level. You can also create a sub-category by
creating a new base category and dragging and dropping or cutting and pasting it into
another base category. For example you could create a base category of Sales and a base
category of By Salesperson. Dragging the By Salesperson category and dropping it into
the Sales category will leave the Sales category as the base category with a sub-category
of By Salesperson.
To rename a category, right-click on it and select Rename and type the new name. As
with folders, a category cannot be named the same name as another category existing at
the same level. To delete a category, right-click on it and select Delete. All sub-
categories and data views in that category will also be deleted.
Creating and Editing Data Views
To create a new data view, select a category, then right-click in the Data Views pane and
select New. The first step when creating a data view is to type a name for the data view
Jet Reports Help
26
and select the base table. The name of the data view can be changed later, but the base
table is a permanent part of the data view, so be careful when making your selection.
The second step in creating a data view will be to type a description of the data view.
Users of the Report Builder will see this description when they are selecting a data view.
This description should give them a good idea of what the data view contains. This is the
first step that you will see when you edit an existing data view.
The next step in creating a data view is to select fields that will appear on the data view.
The field browser control used to create the data view is the exact same field browser
control that Report Builder users will use to select fields and groupings to appear on their
reports. If you configured the tables on the data view, the default fields you selected will
already be checked. Checked fields will be added to the data view and will appear in the
Report Builder. If a field is bold, it is a linking field to another table. If you select a
linking field and then click the arrow that appears next to it, it will navigate you to the
linked table where you can check fields from that table. Navigate back by clicking one of
the bread crumb buttons at the top of the field selection control. Also note that the fields
that you see in the list are the actual fields as they appear in the database, not the
captions. For example you may not find the ZIP Code field in the list but you will see a
Post Code, and instead of State you will see County. If you are planning on adding any
default filters to the data view, add the fields you want to filter in this step.
The next step in creating a data view is to add captions to the fields. This is the alternate
name for a field that the Report Builder users will see. Select a table from the combo box
at the top and you will see the fields you selected from that table in the grid below. If you
leave captions blank, they will be retrieved from the database when the data view is
selected in the Report Builder. For most fields, this is desirable since the captions
retrieved from the database will be in the users local language. For some fields, though,
where the name may be incomplete or ambiguous, it is desirable to specify a different
caption. If you are translating a data view, look for fields that have captions and translate
the captions into the desired language.
The next step in creating a data view is to order fields. Select a table from the combo box
at the top and you will see the fields you selected from that table below. Drag and drop
fields or use the Move Up and Move Down buttons to put them in the order in which you
wish users of the Report Builder to see them.
The final step in creating a data view is to add default filters. Default filters can only be
added to the fields you selected in the base table.
Select Finish and the data view will be created and added to the selected category.
You can also edit, rename, or copy and paste data views by right-clicking on them in the
Data Views pane of the main window of the Data View Creator.
Testing Data Views
Startup and Configuration
27
After creating a data view, the next step is to test it. Open Excel, make sure the default
data source is set to the one for which the data view was created, and click the Report
Builder button. In the Report Builder, browse for your data view and select Next. Add
fields and groupings from the data view to the report. Ask yourself if all the fields which
you might need are present in the data view. If not, you may need to go back and add
them to the data view in the Data View Creator. Add filters and subtotals and click the
Finish button to create the report. Make sure that the report is created and runs as
expected.
Importing and Exporting Categories and Data Views
After creating categories and data views, you will probably want to distribute them to
other users or add them to a different data source. Exporting and importing categories and
data views allow you to accomplish these tasks.
Categories (and the data views in them) can be imported into the Data View Creator by
selecting File/Import/Data View Categories and browsing to the category file to
import. Categories can be exported from the Data View Creator by selecting
File/Export/Data View Categories, selecting the categories to export, and typing a
filename that you would like to export the categories to.
Data views can be imported into the Data View Creator by selecting File/Import/Data
Views, selecting a category into which to import the data views, and browsing to the
file that you would like to import. Data views can be exported from the Data View
Creator by selecting File/Export/Data Views, selecting a category from which to export
data views, selecting the data views to export, and typing a filename to export the data
view to.
Both categories and data views can be imported into a particular Jet Reports data source
without using the Data View Creator. In Excel, open the Jet Data Source Settings, select
the desired data source and click File/Import/Data View Categories or File/Import/Data
Views, then follow the same steps outlined above to import either categories or data
views.
Advanced Installation Topics
Visual FoxPro Prerequisites
To use Jet Reports with Visual FoxPro, you must install the Microsoft OLE DB Provider
for Visual FoxPro. You must install the version of the OLE DB Provider that matches
your version of Visual FoxPro. Then you must select this DB Provider on the Provider
tab in the Properties of the Universal Data Source.
This topic is only applicable to Universal connectors.
Jet Reports Help
28
Using Jet Reports with Citrix
If you want to use Jet Reports with Citrix, you will need to publish your entire desktop to
have full use of all Jet Reports features. You will need to have Jet Reports, Excel and
your data source all installed on the Citrix desktop. If you are using Jet Reports with
Navision, Navision Client and C/Front have to be installed on the Citrix desktop as well.
If you are using an OLE connector, you will need to have the OLE driver installed for
your particular database. If you are using ODBC, you need to have a data source
configured in your ODBC Data Source Administrator, as well as the connection to that
data source configured in Jet Reports.
The Excel and Jet Reports settings are stored on a per-user basis. This means that each
user will have to run "Activate" from the Start Menu to get access to Jet and enter their
username and password. It also means that your database security will be maintained
since each user's credentials are stored separately.
Installing Friendly Table/Field Names in a Universal Data Source
Universal Databases (Not Great Plains)
Jet Reports provides the ability to use Friendly Names if you are using a Universal
Connector. Often times the field and table names defined in your database are not as
intuitive as you might wish. Friendly Names gives you the ability to define your own
names for the fields and tables in your database and then use them in Jet Reports. In order
to use this functionality you will need to add three tables to your database: JETFPG,
JETTMAP, and JETFMAP and then configure your Jet Reports data source to use
Friendly Names.
JETFPG holds the Friendly Name Group. Groups give you the ability to have multiple
Friendly Names for a single table or field. This would be useful for translating your tables
and fields into multiple languages.
JETFPG table definition
Fields FPG JETNAME
Type Integer VarChar
Primary
Key
Yes Yes
Description Number uniquely identifying the Friendly
Name Group.
Name of the Friendly
Name Group.
JETTMAP maps the existing table name to a Friendly Name and Group.
JETTMAP table definition
Fields FPG TFN TPN
Startup and Configuration
29
Type Integer VarChar VarChar
Primary
Key
Yes Yes No
Description Number uniquely
identifying the Friendly
Name Group.
Friendly Name
of the Table.
Table name as defined in
the database. (Actual
table name.)
JETFMAP maps the existing field name to the table it is on as well as the Friendly Name
and Group.
JETFMAP table definition
Fields FPG TPN FFN FPN
Type Integer VarChar VarChar VarChar
Primary
Key
Yes Yes Yes No
Description Number
uniquely
identifying the
Friendly Name
Group.
Table name as
defined in the
database. (Actual
table name.)
Friendly
Field
Name.
Field Name as
defined in the
database.
(Actual field
name.)
Once these three tables have been added and populated with your desired Friendly Names
you will be able to use either Friendly or Actual names in your Jet Reports.
Navision
Friendly Names are not necessary in Navision.

31
Creating Reports
Finding My Data
The Jet Browser
Introducing the Browser
The Jet Browser makes your reports easier and faster to design. It is a window into your
database, allowing you to scroll through the tables and fields available, look at values for
each field, or drilldown on the data. It also allows you to drag and drop fields onto your
report to create several types of formulas automatically. By default, the Jet Browser will
show you the table list for the default data source. You can scroll up and down through
the list of tables and select any table to get a list of fields, then right-click a field and
select Sample Values to get a list of sample values. If you drag one of the fields onto your
report, the Jet Browser will put a formula on your report based on the setting you have
selected.
Count
If you select the "Count" option and drag a table to Excel, an NL function that counts the
records in that table will be created.
If you select the "Count" option and drag a field to Excel, an NL function that counts the
unique values for that field will be created.
Sum
If you select the "Sum" option and drag a numeric field to Excel, an NL function that
sums the values for that field will be created.
First
If you select the "First" option and drag a table to Excel, an NL function that lists the first
record in the table will be created. The NL function itself will be hidden when the report
is run. If you then drag fields to that same row or column, NF functions will be created
for those fields.
If you select the "First" option and drag a field to an empty row and column, an NL
function that lists the first unique value for that field (sorted by the values of the field)
will be created.
Rows
Jet Reports Help
32
If you select the "Rows" option and drag a table to Excel, an NL function that lists all the
records in the table down rows will be created. The NL function itself will be hidden
when the report is run. If you then drag fields to that same row, NF functions will be
created for those fields.
If you select the "Rows" option and drag a field to an empty row, an NL function that
lists the unique values for that field down rows will be created.
If you select the "Rows" option and drag multiple fields into an empty row, an NL
function that lists all the records in the table down rows will be created and NF functions
for each selected field will be created in the same row.
Columns
If you select the "Columns" option and drag a table to Excel, an NL function that lists all
the records in the table across columns will be created. The NL function itself will be
hidden when the report is run. If you then drag fields to that same column, NF functions
will be created for those fields.
If you select the "Columns" option and drag a field to an empty column, an NL function
that lists the unique values for that field across columns will be created.
If you select the "Columns" option and drag multiple fields into an empty column, an NL
function that lists all the records in the table across columns will be created and NF
functions for each selected field will be created in the same column.
Sheets
If you select the "Sheets" option and drag a field to an empty column, an NL function that
lists the unique values for that field as separate sheets will be created.
Finding Navision Data
Navision Zoom to Find a Table or Field Name
Jet Reports adds the Jet menu to Excel but makes no modification to Navision so if you
are not already familiar with the structure of Navision, you can use the Navision tools
that you already know.
First, find the information that you want to report on in Navision, and then open Zoom
from the Tools menu. Navision will display the name of the table that information is in,
as well as all the fields associated with that table.
This information is only relevant to Navision users.
Finding Great Plains and Universal Data
Creating Reports
33
Databases with Multiple Schemas
Some databases such as Microsoft SQL Server and Oracle group objects such as tables
and records by the owner (or group of owners) of the object. This logical grouping is
called a schema and it can be used to restrict which tables a user can access. In many
SQL Server databases, the DBO user is the owner of all database objects so "DBO" is the
only schema name in the database. Oracle databases generally have a schema per user
along with multiple administrative schemas.
Jet Reports will obtain the default schema for your user from your server and unless your
database has multiple schemas, you will not need to override that default. If you do need
to override the default schema, you can specify the schema with the Schema= keyword.
The Schema= keyword goes in a Filter Field parameter of the NL function and the
schema name goes in the following Filter parameter. For example, to access all records in
a table named Customer that are owned by the SYSTEM user group, you would use the
following NL function:
=NL("Rows","Customer",,"Schema=","SYSTEM")
This topic does not apply to Navision users.
Introducing Friendly Names for Great Plains and Universal Connectors
If you are using Jet Reports to connect to a Great Plains database, you may have noticed
that the table and field names are somewhat cryptic. It is often hard to tell what kind of
data they contain (i.e. Sales, Purchases, Customers, etc.). For this reason, Jet Reports
supports Friendly Names for Great Plains databases, which are more descriptive table and
field names that can be helpful in locating your data. Once friendly names are installed,
you can configure the Great Plains data source to display the table and field names as you
see fit.
Friendly names can be configured to display either the friendly name first or the physical
name first. If the friendly name comes first, table and field names in the Jet Browser are
in alphabetical order according to their friendly names. This can be easier to search
through since the names are easier to read. If the physical name comes first, table and
field names are in alphabetical order according to their physical name. This can be easier
to search through if the tables are grouped by the type of data they contain (i.e. all of the
physical table names related to the General Ledger begin with "GL").
The Jet Reports formulas have the ability to accept both friendly and physical table and
field names. Regardless of which name format you decide to use, the outcome of the
formulas is the same.
This information is only necessary with a Great Plains database.
SQL Views
Jet Reports Help
34
If you are using SQL Views, it is possible to access these views as if they are standard
tables in your database. You must keep in mind, however, that views do not contain a
primary key so you must use a field cache rather than a record key in NL functions.
When an NL Function has an array of fields in the Field parameter, it returns a value
called a field cache into the cell. This is a text value that identifies all the field values and
their data types. If you use the NF function with the cell address containing a field cache
as the first argument and one of the field names contained in it as the second argument,
the NF function will return the value of the field. Field caches are required when the table
does not have a primary key. Please see the section entitled Introducing the NF Function
for more details.
Drilldown
Whenever you make a change to a worksheet, the drilldown button (to the right of cells
with Jet formulas) is turned off. This is because displaying the drilldown button removes
the ability to undo changes. To perform a drilldown when the drilldown button is not
displayed, use the menu option Jet/Tools/Drilldown or the Drilldown button on the Jet
toolbar or ribbon. After choosing Jet/Tools/Drilldown from the menu, the drilldown
button will remain enabled until the next change is made to the worksheet.
You can put multiple NL , GL or NF functions in a cell, but only one is used for
drilldown. If there are multiple functions in one cell, the function that Jet Reports will use
for drilldown is unpredictable, so if you want a predictable drilldown, put only one NL,
GL or NF function in each cell.
The value reached by the drilldown could be different from the value displayed in the cell
if the database has changed since you last refreshed the workbook.
Drilling down from a formula with an NL function that contains "Rows","Columns" or
"Sheets" in the What argument may not return the expected result. These formulas return
multiple values and the drilldown result will also return multiple values. If you click on
the first result of an NL function and then drill down, you may expect to see only the first
result; instead you will see all the results of the NL function, filtered the same as in the
report. To see only the first result, you will either have to filter your drilldown results or
drilldown on an NF function instead. Usually NL functions are in hidden rows or
columns so this is generally not a problem.
Navision Drilldown
If you use array filters, you may not be able to drilldown on the cell. That is because
Navision will not accept an array as a filter, so Jet Reports attempts to create a set of
filters that will uniquely select exactly the same records as the array filter. This is often
possible when there are only a few records selected, but if there are too many records, Jet
Reports will report that drilldown is impossible.
Creating Reports
35
The drilldown form displayed in Navision depends on the table in the function. Some
tables contain values that are derived from other tables. For example, the Sales ($) field
in the Customer table is derived from the Cust. Ledger Entry table. If you want a
drilldown that shows the records in the Ledger table, you need to use a sum formula on
that table instead of using Sales ($) from the Customer table.
If Navision is already open but you have minimized its window, you must manually
switch to the Navision window to see the drilldown results. If the window is not
minimized, Navision will automatically become the foreground application.
Universal and Great Plains Drilldown
The Universal/GP drilldown window has several special capabilities. You can sort the list
of records returned by clicking on the column header of the column you want to sort by.
Click once to sort ascending and again to sort descending.
Data columns can be hidden by right-clicking anywhere in the column and selecting
"Hide Column". Multiple columns can be hidden or shown by right-clicking and
selecting "Add/Remove Columns" and checking all columns that you want visible.
Data can be filtered for a particular value by clicking the drop down arrow below the
column header and selecting the desired value for that column. Multiple filters can be set
this way. Filters can by cleared by either selecting (All) in the drop down for each filter,
by right-click and selecting "Clear Filters" to clear all filters, or by clicking "Clear
Filters" in the bottom right of the window to clear all filters.
Retrieving My Data
Filtering Data
Blank Filters
Sometimes you want to filter an NL function based on the output of another NL function
which could return a blank value. The NL function does not allow you to use blank
filters, and you will get a #VALUE error message if you fill in a FilterField argument and
leave the corresponding Filter argument blank.
In Navision, an example of this would be retrieving an Item Description based on the
output of an NL that listed Item No.s from Sales Invoices. You could have Sales Invoices
that do not have item numbers so the NL command would return a blank value. Assume
that an NL function that lists item numbers is in cell C4. We want to filter an NL in D4
based on the contents of C4.
In this case, you can use two single quotes (') around the filter value. You could use the
following formula.
Jet Reports Help
36
=NL(1,"Item","Description","No.",""&C4&"")
Although this formula is a little hard to read, it is putting a single quote character (') on
either side of the C4 reference. The & function is an Excel function that combines two
strings of text into one so the result of this formula will be the value in cell C4 with a
single quote character on either side of it. If C4 contains the Item No. of Shampoo1, the
resulting filter will be Shampoo1. If C4 is blank, the result is (two single quotes), which
is a valid Navision filter for blank fields.
An easier to read variation on the filter for blanks is "@@" in front of the value in C4.
The function becomes the following.
=NL (1,"Item","Description","No.","@@"&C4)
In Northwind, an example of this would be in the case of retrieving orders based on the
output of an NL that listed postal codes from orders. You could have orders that did not
have postal codes so the NL command could return a blank value. Assume that an NL
function that lists postal codes is in cell C4. You want to filter an NL in D4 based on the
contents of C4.
In this case, you can use two single quotes (') around the filter value. You could use the
following formula.
=NL(1," Orders"," OrderID"," ShipPostalCode",""&C4&"")
Although this formula is a little hard to read, it is putting a single quote character (') on
either side of the C4 reference. The & function is an Excel function that combines two
bits of text into one so the result of this formula will add a single quote character on
either side of the value in cell C4. If C4 contains the Order ID Shampoo1, the resulting
filter will be Shampoo1. If C4 is blank, the result is (two single quotes), which is a valid
filter for blanks.
An easier to read variation on the filter for blanks is "@@" in front of the value in C4.
The function becomes the following.
=NL(1," Orders"," OrderID"," ShipPostalCode","@@"&C4)
Databases with Multiple Schemas
Some databases such as Microsoft SQL Server and Oracle group objects such as tables
and records by the owner (or group of owners) of the object. This logical grouping is
called a schema and it can be used to restrict which tables a user can access. In many
SQL Server databases, the DBO user is the owner of all database objects so "DBO" is the
only schema name in the database. Oracle databases generally have a schema per user
along with multiple administrative schemas.
Creating Reports
37
Jet Reports will obtain the default schema for your user from your server and unless your
database has multiple schemas, you will not need to override that default. If you do need
to override the default schema, you can specify the schema with the Schema= keyword.
The Schema= keyword goes in a Filter Field parameter of the NL function and the
schema name goes in the following Filter parameter. For example, to access all records in
a table named Customer that are owned by the SYSTEM user group, you would use the
following NL function:
=NL("Rows","Customer",,"Schema=","SYSTEM")
This topic does not apply to Navision users.
Date Filters
There are many times when you want to make your report easy for an end user to work
with but need to use variable date ranges to retrieve the data for the report. An example of
this is a report that lists the sales activity for the month, the year to date and the previous
year. Instead of requiring the user to enter all of the date filters that the report needs, you
can calculate the date ranges based on a single start date. The formulas for calculating
various dates relative to a start date are detailed below in the Excel section.
Since Excel stores dates as numbers, it can be difficult to format a date range correctly to
use as a filter. The NP("DateFilter") function provides an easy way to do this. Assuming
that D4 contains the first of the month, the formula for calculating the filter for the whole
month is listed below.
=NP("DateFilter",D4, Date(Year(D4), MONTH(D4)+1, 1)-1)
If D4 equaled 2/1/2003, the result of the above formula would be "2/1/2003..2/28/2003".
The formula for calculating the filter for the year to date for the month in cell D4 is listed
below.
=NP("DateFilter", Date(Year(D4), 1, 1), Date(Year(D4), MONTH(D4)+1, 1)-1)
If D4 was "2/1/2000", the result of the formula above would be "2/1/2000..2/29/2000".
Note that Excel will take care of leap years for you.
The formula for calculating the filter from the same month last year until the month in
cell D4 is listed below.
=NP("DateFilter", Date(Year(D4)-1, Month(D4), 1), Date(Year(D4)-1, MONTH(D4)+1,
1)-1)
If D4 equaled 5/1/2004, the result of the above formula would be "5/1/2003..5/31/2003".
Jet Reports Help
38
Excluding Closing Dates
You can exclude closing dates from your query when you are using date filters by putting
<>C& in front of your date filter, which will then no longer include the closing dates.
The example below is using the Cronus USA database, which has closing dates of
12/31/99, 12/31/00, and 12/31/01.
=NL ("Sum","G/L Entry","Amount","Posting Date","<>C&01/01/99..01/01/02")
This will, in effect, create the filter:
"01/01/99..01/01/02&<>C12/31/99&<>C12/31/00&<>C12/31/01".
This information is only relevant for Navision users.
Filtering Based on Data from Another Table
Sometimes you will want to filter one table based on data from a related table. Jet
Reports has two mechanisms to help you do this, Link= and NL("Filter"). While both
mechanisms return the same result, which one you should use depends on data being
returned from each table. Link= will greatly increase performance when the records
returned for the primary table is smaller than (or of equivalent size to) the records
returned for the secondary table (i.e. the G/L Account table filtered by the G/L Entry
table). Link= must also be used when there are multiple fields linking the 2 tables since
NL("Filter") cannot return more than one field. NL("Filter") should be faster in
situations where the number of records returned from primary table is much larger than
the number of records returned from the secondary table (i.e. the Cust. Ledger Entry table
filtered by the Customer table).
Universal Examples
Using Link=
In Northwind, the Order Subtotals table does not have the OrderDate in it, but the Orders
table does. The OrderID is common to both tables, so if you wanted to list Order
Subtotals based on an OrderDate, you could write an NL formula like the following.
=NL("Rows","Order
Subtotals","Subtotal","Link=","Orders","OrderID","=OrderID","OrderDate","1/1/96..6/3
0/96")
Note that the first argument after the "Link=" is the name of the secondary table. The
successive arguments thereafter represent FilterField/Filter pairs that will be applied to
this table (i.e. "OrderDate" and "OrderID" are fields in the Orders table, not the Order
Subtotals table). Filter values with an equals sign ("=") pre-pended to them represent the
linking fields from the primary table. In the above example, the NL function will examine
the value of the OrderID field for each record in the Order Subtotals table and will only
include the record if a corresponding record exists in the Orders table where the
Creating Reports
39
"OrderDate" field is in the specified range and the "OrderID" fields are equivalent. Note
that there can be multiple linking fields.
Using NL("Filter")
In Northwind, let's say you wanted a list of orders where the subtotal for the order was
greater than 100. You would start out with an NL formula like the following.
=NL("Rows","Orders",,"OrderID",{List of OrderIDs with a subtotal greater than 100})
In the formula above, you need an NL formula which will replace the English description
of the OrderID filter. You can use NL("Filter") to create the OrderID filter from the
Order Subtotals table as shown in the formula below.
=NL("Filter","Order Subtotals","OrderID","Subtotal",">100")
Finally, you need to replace the English description in the first formula with the second
formula as shown below.
=NL("Rows","Orders",,"OrderID",NL("Filter","Order
Subtotals","OrderID","Subtotal",">100"))
There is one NL function inside another. The inner NL function returns a list of OrderIDs
that Jet Reports can use as a filter for the Orders table.
Navision Examples
When performing cross-table filtering, you may not be able to drilldown on the cell. That
is because Navision will not accept a list as a filter, so Jet Reports attempts to create a set
of filters that will uniquely select the exact same records. This is often possible when
there are only a few records selected. However, if there are too many records, Jet Reports
will report that drilldown is not possible.
Using Link=
Lets say you would like to create a list of invoice numbers that contain item sales. You
can list the invoice numbers from the Sales Invoice Header table, but need to use the
Sales Invoice Line table to ensure that each invoice contains an item sale. Since all you
would like to do is create a list of invoice numbers, you do not need a complete list of
Sales Lines for each invoice. Rather, all you want to know is whether an entry containing
an item sale exists. To do this, your formula would look something like the following:
=NL("Rows","Sales Invoice Header","No.","Posting
Date","7/1/05..7/31/05","Link=","Sales Invoice Line","Document
No.","=No.","Type","Item")
Jet Reports Help
40
Note that the first argument after the "Link=" is the name of the secondary table. The
successive arguments thereafter represent FilterField/Filter pairs that will be applied to
this table (i.e. "Document No." and "Type" are fields in the Sales Invoice Line table, not
the Sales Invoice Header). Filter values with an equals sign ("=") pre-pended to them
represent the linking fields from the primary table. In the above example, the NL function
will examine the value of the No. field for each record in the Sales Invoice Header table
and will only include the record if a corresponding record exists in the Sales Invoice Line
table where the "Type" field is "Item" and the "Document No." field is equivalent. Note
that there can be multiple linking fields.
Using NL("Filter")
The Cust. Ledger Entry table is generally much larger than the Customer table since each
Customer can have many ledger entries associated with them. The Cust. Ledger Entry
does not have the customer name on it, but the Customer table does. The customer
number is common to both tables, so if you wanted to list Cust. Ledger Entries based on
the customer name, you would start out with an NL formula like the following:
=NL("Rows","Cust. Ledger Entry",,"Customer No.",{List of Customer No.'s with names
starting with A.})
You need to replace the English description of the list in the formula above with an NL
formula. The NL formula that generates customer numbers filtered by the customer name
is below:
=NL("Filter","Customer","No.","Name","A*")
Finally, you need to replace the English description in the first formula with the second
formula as shown below:
=NL("Rows","Cust. Ledger Entry",,"Customer
No.",NL("Filter","Customer","No.","Name","A*"))
There is one NL function inside another. The inner NL function returns the customer
number filter that is then used in the Cust. Ledger Entry table.
Linking to Other Tables
Link= gives users advanced filtering capabilities in Jet Reports. Link= is available for all
connector types.
S""imple Linking
The following formula will return the "Document No." field for each Sales Invoice Line
in the system.
Creating Reports
41
=NL("Rows","Sales Invoice Line","Document No.")
The following formula will return only sales invoice lines where the "Type" field is
"Item".
=NL("Rows","Sales Invoice Line","Document No.","Type","Item")
Link= can be used to filter on a field that is not on the Sales Invoice Line table (such as
the "Posting Date" field on the Sales Invoice Header table) as follows:
=NL("Rows","Sales Invoice Line","Document No.","Type","Item","Link=","Sales
Invoice Header","No.","=Document No.","Posting Date",">1/1/2009")
Nested Linking
Link= statements can be combined to fulfill more complex filtering requirements. For
example, assume that you would like to see the territories with sales during a given
period.
A simple formula could be used if the territory is available on the table that contains the
historical sales information and if you wanted the territory assignment at the time that the
sale was made. If on the other hand, the territory is not available, or you want the
currently assigned territory, you can do this by combining link= statements as follows:
=NL("Rows","Territory","Code","Link=","Customer","Territory
Code","=Code","Link=","Sales Invoice Header","Sell-to Customer No.","=No.","Posting
Date",">1/1/2009")
In this example we linked the Territory to the Customer and the Customer to the Sales
Invoice Header. Then we filtered by the "Posting Date" field to get territories with sales
for a specific period.
Linking Multiple Tables
Link= statements can also be combined to handle situations where a single table is linked
to multiple tables. For example, suppose we want to see sales invoices where the
territory is "SouthEast" and the vendor is "30000". To do this we can link from the Sales
Invoice Line table to the Customer table with the "Territory Code" field filtered for
"SouthEast" and, in addition, link from the Sales Invoice Line table to the Item table with
the "Vendor No." field filtered for "30000".
=NL("Rows","Sales Invoice Line",,"Type","Item","Link=Sales Invoice
line","Customer","No.","=Sell-to Customer No.","Territory
Code","SouthEast","Link=Sales Invoice Line","Item","No.","=No.","Vendor
No.","30000")
Jet Reports Help
42
Note that the Link= statements include the primary table (Sales Invoice Line) which
indicates that links should restart from the primary table rather than linking in the nested
fashion demonstrated in the previous section. It is possible to mix these models and have
multiple links as well as nested link.
One other thing to note is that filters applied to the primary table like the filter on the
"Type" field in this example should occur before any Link= statements.
NL(Link)
The NL function only allows 10 FilterField/Filter argument pairs. The NL(Link)
function can be used to specify linked tables when more than 10 pairs are needed for a
linking statement.
This example formula was used in the nested link section and links from the Territory
table to the Customer table and then from the Customer table to the Sales Invoice Header
table.
=NL("Rows","Territory","Code","Link=","Customer","Territory
Code","=Code","Link=","Sales Invoice Header","Sell-to Customer No.","=No.","Posting
Date",">1/1/2009")
This is example could be created using the NL(Link) function as follows:
A B C
1 =NL("Rows","Territory","Code","Link=",B1) =NL("Link","Customer",,"Territory
Code","=Code","Link=",C1)
=NL("Link","Sales
Invoice
Header",,"Sell-to
Customer
No.","=No.","Posting
Date",">1/1/2009")
2

Limiting the Number of Records in a Query
You can place a limit on the number of records that NL will return by entering "Limit="
in one of the FilterField parameters and entering a maximum number in the
corresponding Filter parameter.
With Navision, the following example prints the Customers with the ten largest sales.
=NL("Rows","Customer","Name","-Sales ($)","*","Limit=",10)
With Northwind, the following example will print the OrderIDs of the ten largest orders.
Creating Reports
43
=NL("Rows","Order Subtotals","OrderID","-Subtotal","*","Limit=",10)
Limiting the Number of Scanned Records in a Query
ScanLimit= allows you limit the number of records scanned by Jet Reports when
querying the database. This can be useful in areas like lookups where performance is
important and a small scan of records will provide sufficient detail for lookups.
ScanLimit= is different than Limit= because ScanLimit= limits the number of records
scanned during a query, whereas Limit= scans all records returned by the query, but
limits the number of records returned by the formula. Thus ScanLimit= can significantly
reduce the query time but at the expense of not necessarily returning all records matching
the filters.
Neither Limit=, nor ScanLimit= affect NL(Count) or NL(Sum) functions.
ScanLimit= is applicable to Dynamics NAV data sources only.
Sorting
Normally, sorting is in ascending order based on the field values returned; however, you
can override the normal sorting and sort in ascending order or descending order based on
any field in the table you are using. If you want to sort ascending, put a "+" followed by
the field name in the FilterField parameters. To sort descending, put a "-" followed by the
field name in the FilterField parameters. The filtering properties of the FilterField remain
intact so you can enter a filter in the Filter parameter. If you want to sort on a field
without a filter, put a "*" in the corresponding filter since blank filters are not allowed.
With Northwind, the following NL function sorts by CompanyName while filtering for
CompanyName starting with B.
=NL("Rows","Customers",,"+CompanyName","B*")
The following NL function sorts Invoice ProductIDs by CustomerID then by the
Quantity, in reverse order.
=NL("Rows","Invoices","ProductID","+CustomerID","*","-Quantity","<>0")
With Navision, the following NL function sorts by Search Name while filtering for
Search Names starting with B.
=NL("Rows","Customer",,"+Search Name","B*")
The following NL function sorts Customer Names by state (in ascending order) then by
sales (in descending order) where sales cannot be 0.
Jet Reports Help
44
=NL("Rows","Customer","Name","+State","*","-Sales ($)","<>0")
Using Navision Keys to Optimize Sorting
Jet Reports can sort on any field but if you are sorting in ascending order, you can easily
improve the performance of the report by adding a Navision key to the table that you are
getting data from. To maximize performance, the key should have all of the fields you are
sorting on in the same order as they appear in your NL function. If you do not know how
to add a key in Navision, contact your Navision Solutions Center for assistance. If you
are returning a field with the NL command, this field also needs to be included in the key
to optimize speed.
Jet Reports Sorting vs. Navision Sorting
When possible, Jet Reports will allow Navision to perform all sorting. This is generally
preferred because Navision uses keys to sort and is very fast as a result. If a key that
matches the filters exactly is not found, however, Jet Reports will sort the resulting data
list internally. The following examples illustrate the fields needed in a Navision key to
guarantee that Jet results are sorted the same as Navision.
This NL sorts by state, then by Customer No.
=NL("Rows","Customer","No.","+State","*","Sales ($)","<>0")
The key that will sort correctly needs to start as follows.
State, No.,
This can be followed by other fields. Since No. is the primary key, it is included
automatically at the end of the key so a key of State would suffice.
In some situations, allowing Jet Reports to perform the sort may result in a sort order that
seems inconsistent, especially in the case of Code fields. Code fields (i.e. "No." in the
"Customer" table) can contain both numbers and letters, and they sort differently
depending on whether you are using a native Navision Server or a Navision SQL Server
(please see the Navision Help C/Side Reference Guide for details). Jet Report's internal
sorting mechanism sorts Code fields the same as a native Navision Server.
Special Characters in a Filter
Characters such as |><=.()&@ are considered special characters by Jet Reports. If you
need to include any of these characters as part of filter value then you need to precede the
filter with "@@". The "@@" will pass the filter in as a literal string and be evaluated
properly. If you have two periods in a filter string (i.e. "A.M."), the filter includes special
characters and needs to be prefixed by "@@".
Creating Reports
45
For example, if you need to filter by a customer named "John(Houston)" you will need to
place the "@@" in front of "John(Houston)". The resulting formula would look like the
following.
=NL ("Rows","Customers","CustomerID","ContactName","@@John(Houston)")
=NL("Rows","Sales Invoice","No.","Customer","@@John(Houston)")
Since the name John(Huston) would often be located in an adjacent cell, below is the
equivalent formula using a cell reference.
=NL("Rows","Customers","CustomerID","ContactName","@@"&C3)
=NL("Rows","Sales Invoice","No.","Customer","@@"&C3)
If you need to combine several filters together that all include special characters, you
need to enclose each filter item in single quotes (') instead.
For example, if you need to filter by customers named "John A.M." or "Ben & Jerrys",
you need to use the logical OR (a vertical bar |). If there are no special characters, your
filter will look like the following.
=NL("Rows","Customers","CompanyName","CompanyName","John|Ben")
=NL("Rows","Customer","Name","Name","John|Ben")
Since you have two names that both contain special characters and you cannot use the
@@ since you need the | to evaluate as a logical OR, you must use single quotes instead.
The following formula shows the proper method of constructing the filter.
=NL("Rows","Customers","CustomerID","CompanyName","John A.M|Ben & Jerrys")
=NL("Rows","Sales Invoice","No.","Customer","John A.M|Ben & Jerrys")
Again, these names could be coming from cell references, so the equivalent formula with
cell references is below.
=NL("Rows","Customers","CustomerID","CompanyName","'"&C3&"'|'"&C4&"'")
=NL("Rows","Sales Invoice","No.","Customer","'"&C3&"'|'"&C4&"'")
Wild Card Filters
The * and ? are wild card filters. Wild card filters cannot be used as part of a range filter
in the Navision connector. This means that filters, such as "A*..C*" are not valid.
Likewise, "<>A?..B?" is not valid. If you want to create a filter including everything
Jet Reports Help
46
starting with A through C, the filter would simply be "A..CZ". If you want to create a
filter that will exclude everything starting with A through C, you need to think of the
filter as including everything except the things starting with A through C. When you
think of the filter as including values, then D.. is the filter you would use. Note that
"<>A*&<>B*&<>C*" would also work since no ranges are involved.
This topic applies only to the Navision connector.
Specifying More Than Ten Filters in the NL Function
Filters= allows you use a range to specify filters in NL formulas. This allows you to use
more than 10 field/filter pairs, makes report design more obvious, and makes it easier to
add filters to a report later.
The following formula contains several filters:
=NL(Rows,Sales Invoice Header,,Sell-To Customer No.,10000,Salesperson
Code,JH,Posting Date,>1/1/2009)
This formula can be expressed as follows:
A B C
1 Sell-To
Customer
No.
10000
2 Salesperson
Code
JH
3 Posting
Date
>1/1/2009
4
5 =NL("Rows","Sales Invoice
Header",,"Filters=",$B$1:$C$3)

Note that the range must contain field/filter pairs. The Report Builder utilizes Filters=
and can be used to create examples.
Retrieving Navision Data
Navision Advanced Dimensions
If you have the Navision Advanced Dimensions granule, you can use a dimension code in
the Field or FilterField arguments of the NL function with tables that have advanced
dimensions. Jet Reports creates "virtual fields" for each of the dimension codes.
Creating Reports
47
Since advanced dimensions are stored in secondary tables, this feature greatly simplifies
writing reports with Advanced Dimensions. Because the data must be retrieved from two
tables, using Advanced Dimensions might take longer than using fields that are in the
same table.
Jet Reports will add virtual fields for dimension codes to custom tables if the custom
tables are designed just like the standard tables using the same secondary tables to store
advanced dimensions and the same field numbers and key structures.
Virtual fields for dimension codes will not be visible in the Jet Browser field lists.
If you have created an Advanced Dimension with the same name as a field in the table
from which you are pulling data, Jet Reports will use the field in the table rather than the
Advanced Dimension. An example of this occurs in the Cronus database that ships with
Navision. In the Sales Line table (table 37) there is a field named Area (field 82). In the
same database, there is an Advanced Dimension named Area. If you use "Area" in an NL
or NF function that references the Sales Line table, Jet Reports will use the Area field
from the Sales Line table rather than the Advanced Dimension named Area. The simplest
fix for this problem is to rename the Advanced Dimension. If you do not want to rename
the Advanced Dimension, you will have to pull the data out of the table that stores the
Dimension Entries instead.
Advanced Dimensions are only available under Navision.
Navision Codes and No.'s with Special Characters
Characters used in Navision filters like "&","|", and ".." should not be used as values in
Code or No. fields. In addition, you should not use blank Codes or No.'s. Using blanks or
special characters in your Code or No. fields will cause problems with reporting and
filtering in both Navision and Jet Reports. Fortunately, it is rare to find blanks or special
characters in Code or No. fields.
When field values contain filter characters like "&", you must put the field values in
single quotes to use them in a filter. For example, if customer IDs have embedded "&"s
you can filter on the customer ID as follows.
B2: =NL ("Rows","Customer","No.")
B3: =NL(,"Customer","Name","No.","'"&B2&"'")
Note the customer number is in a formula that surrounds it with single quotes:
"'"&B2&"'". This causes Navision to consider any embedded special characters as part of
the field value.
This information is only necessary for Navision users.
Jet Reports Help
48
Retrieving Great Plains and Universal Data
Blank Spaces in Database Fields
Some databases, including Great Plains, store text data in fixed length fields. One
example of a fixed length text field is the Customer Name in Great Plains. Great Plains
defines this field as 25 characters and if you put a short name like Bob into the customer
entry screen, Great Plains will store Bob in the database as Bob followed by 22 spaces. In
Great Plains, and most other databases that store their text fields at a fixed length, the
application interface will conceal the blank spaces from you. If you filter for "Bob",
Great Plains will find the customer "Bob " even though there are 22
spaces after the name and you did not enter "Bob*" as the filter. Great Plains will also
display this username as "Bob", trimming the trailing spaces so you never see them.
Jet Reports can provide an equivalent translation between text values and filters if you
activate the "Trim trailing spaces from text fields" option under Jet/Data Sources. We
recommend that Great Plains users activate this option. It may also be useful for other
database types depending on how the database application represents empty space. This
feature is not available when using ODBC drivers unless the Data Source is of type Great
Plains. Please note that enabling this option may incur a slight performance hit to the run
time of reports, depending on the size of the database and number of text values that are
affected.
Navision users do not need to worry about Blank Spaces in their database fields.
Databases with Multiple Schemas
Some databases such as Microsoft SQL Server and Oracle group objects such as tables
and records by the owner (or group of owners) of the object. This logical grouping is
called a schema and it can be used to restrict which tables a user can access. In many
SQL Server databases, the DBO user is the owner of all database objects so "DBO" is the
only schema name in the database. Oracle databases generally have a schema per user
along with multiple administrative schemas.
Jet Reports will obtain the default schema for your user from your server and unless your
database has multiple schemas, you will not need to override that default. If you do need
to override the default schema, you can specify the schema with the Schema= keyword.
The Schema= keyword goes in a Filter Field parameter of the NL function and the
schema name goes in the following Filter parameter. For example, to access all records in
a table named Customer that are owned by the SYSTEM user group, you would use the
following NL function:
=NL("Rows","Customer",,"Schema=","SYSTEM")
This topic does not apply to Navision users.
Creating Reports
49
Fiscal Year Beginning Balances in the GP GL function
In Great Plains, Period 0 is a special period. It holds the fiscal year beginning balance.
Normally you wouldn't specify it in either the start period or the end period of a GL
function. Period zero balances are automatically included if you omit the start period.
Great Plains processes period zero balances differently for Open Years and Historical
Years and for Balance Sheet Accounts and Income Statement Accounts. Jet Reports
automatically deals with this complexity if you omit the start period when you want to
include the beginning balance. Only one period zero balance is normally included in a
returned value, but determining which period zero balance to include can be complex,
and this is best left to Jet Reports.
If you specify a period zero in a start or end period, you override Jet Reports. Jet Reports
only includes the period zero balances you specify in the start and/or end periods, even if
this might not result in a valid beginning balance.
It may be necessary to specify period zero in the rare case where you have deleted
balances for a historical year and need to return a beginning balance as of the first fiscal
year with balances. To retrieve the beginning balance, use period zero as both the start
period and end period. For example, if you deleted balances for fiscal year 2001 and you
wanted to know the beginning balances as of the start of fiscal year 2002, you should put
2002/0 in both start period and end period.
This topic is only applicable to Great Plains users.
Jet GP Views
In Great Plains, you may have noticed that sometimes even with friendly names installed
it is difficult to figure out what certain status field and type field values mean since they
are often just lists of integers in the database. It is also difficult at times to figure out how
certain tables are related for creating certain types of reports such as sales, purchasing, or
general ledger reports. To solve both of these problems, Jet Reports has created Jet Views
for some common report writing areas.
A Jet View combines multiple tables, bringing together important information for a
particular area. Jet Views look like other tables in your database, and you can write
functions and reports using them just like you would a table. The following is a full
description of each Jet View, including the GP tables and fields that each view gets its
information from.
Name: Jet Customer Master
Description: There is one row for each customer in Great Plains company being viewed.
This view also includes address information, salesperson information and customer
Jet Reports Help
50
balance. This view is good for customer informational reporting such as lists, labels, etc.
and is a good jumping off point for other reports organized by customer.
Technical: RM00101 Customer Master
RM00102 Address Master (Link = Customer Number and Address Code) Address 1,
Address 2, Address 3, City, State, Zip Code, Country, Country Code, Phone 1, Phone 2,
Phone 3, Fax, Location Code, UPS Zone
RM00301 Salesperson Info (Link = Salesperson ID) Salesperson First Name,
Salesperson Last Name, Commission Code, Commission Percentage
RM00103 Customer Details (Link = Customer No.) Customer Balance
Name: Jet Customer Open Transactions
Description: There is one row for each entry in the customer open transactions file in the
Great Plains company being viewed. This view is good for customer transaction
reporting such as aging and open transactions lists.
Technical: RM20101 Customer Transactions (only non-void transactions)
RM40401 Customer Document Type (Link = Document Type) Document Type
RM00101 Customer (Link = Customer Number) Customer Name, Customer Class,
Customer Status (Active/Inactive), Customer Territory, Customer Salesperson, Customer
Contact, Customer Phone 1, Customer Credit Limit Amount, Customer Payment Terms,
Customer Balance Type (Open/Bal Fwd)
RM00103 Customer Details (Link = Customer No.) Customer Balance
Name: Jet Customer Open Application
Description: There is one row for each entry in the applied transactions file in the Great
Plains company being viewed.
This view allows you to see the transactions that are applied to a transaction that you
already have. An example of this can be found in the sample A/R aging report which
uses this view linked into the Jet Customer Open Transactions view.
Technical: RM20201 Applied Transactions
RM40401 Customer Document Type (Link = Applied to Doc Type) Applied To Doc
Type
Name: Jet Customer Period Balance
Creating Reports
51
Description: There is one row for each Customer Record and Fiscal Period. This view
allows you to see balance for a particular customer for a particular period in the Great
Plains company being viewed.
Technical: RM20101 Customer Number, Period Balance
SY40100 Year Filter, Period ID, Period Start, and Period End
Name: Jet Date
Description: There is one row for each Day, Week, Month, Quarter, and Year between
1/1/1900 and 12/31/2100. This view allows you to see dates of different types(date, week,
month, quarter, year). It also allows for the easy creation of date filters for reports.
Technical: JET_DATE Period Start, Period End, Period Type, Period No, Period Name
Name: Jet Fiscal Period
Description: There is one row for each fiscal period for each Series in the Great Plains
company being viewed. This view allows you to see the start and end date of each period
for the fiscal year, the number of periods in the fiscal year, the period name and whether
or not the fiscal period is closed for the series.
Technical: SY40101 Fiscal Year (Link = Fiscal Year), Start Date, End Date, Number
of Periods, Is Historical Year.
Name: Jet GL Account
Description: There is one row for each GL Account in the Great Plains company being
viewed. This view allows you to see the account number, its category, its description,
the individual segments for the account, and their descriptions, the posting type, and
whether or not its active.
Technical: GL00100 Account Description, Posting Type, Active
GL00105 Account Index (Link = Account Index), Account Number, Segments
GL00102 Category Number(Link = Category Number), Category Description
Name: Jet GL Transactions
Description: There is one row for each GL Transaction in the Great Plains company
being viewed. This view allows you to see the transaction date, description, account,
credit amount, debit amount, transaction amount, period, document date, vendor, account
category, and account description for each transaction.
Jet Reports Help
52
Technical: GL20000 Transaction Description, Transaction Date, Account Index (Link
= Account Index), Credit Amount, Transaction Amount, Debit Amount, Period ID,
Document Date, Vendor Name
GL30000 - Transaction Description, Transaction Date, Account Index (Link = Account
Index), Credit Amount, Transaction Amount, Debit Amount, Period ID, Document Date,
Vendor Name
GL00105 Account Number, Segments
GL00102 Category Number(Link = Category Number), Category Description
GL00100 Account Description, Posting Type
Name: Jet Item All Locations
Description: There is one row for each Item in the Great Plains company being viewed.
The quantities reflect the total of all locations. This view allows you to see the Item
Number, Description, Type, Cost, Weight, Class, Class Description, Valuation Method,
Unit of Measure, Price Level, Price Group, Price Method, Country of Origin, Quantity on
Hand, Quantity Committed, Quantity Sold, Quantity Returned, Quantity On Order, and
Quantity Back Ordered.
Technical: IV00102 Item Number, Item Description, Item Type, Standard Cost,
Current Cost, Shipping Weight, Drop Ship Index, Class Code, Lot Type, Valuation
Method, Unit of Measure Schedule, Warranty Days, Price Level, Item Code, Price
Group, Price Method, Purchasing Unit Of Measure, and Selling Unit Of Measure.
IV00102 (Link = Item Number) Quantity Committed, Quantity Sold, Quantity
Returned, Quantity On Order, and Quantity Back Ordered.
IV40800 (Link = Price Level) Pricel Level Description
IV40900 (Link = Price Group) Price Group Description
IV40400 (Link = Class Code) Class Description
IV40201 (Link = Unit of Measure Schedule) Unit Of Measure Schedule Desc, Base
Unit of Measure
Name: Jet Item by Location
Description: There is one row for each Item in the Great Plains company being viewed
for each location. This view allows you to see the Item Number, Description, Type, Cost,
Weight, Class, Class Description, Valuation Method, Unit of Measure, Price Level, Price
Creating Reports
53
Group, Price Method, Country of Origin, Quantity on Hand, Quantity Committed,
Quantity Sold, Quantity Returned, Quantity On Order, and Quantity Back Ordered.
Technical: IV00102 Item Number, Item Description, Item Type, Standard Cost,
Current Cost, Shipping Weight, Drop Ship Index, Class Code, Lot Type, Valuation
Method, Unit of Measure Schedule, Warranty Days, Price Level, Item Code, Price
Group, Price Method, Purchasing Unit Of Measure, and Selling Unit Of Measure.
IV00102 (Link = Item Number) Quantity Committed, Quantity Sold, Quantity
Returned, Quantity On Order, and Quantity Back Ordered.
IV40800 (Link = Price Level) Pricel Level Description
IV40900 (Link = Price Group) Price Group Description
IV40400 (Link = Class Code) Class Description
IV40201 (Link = Unit of Measure Schedule) Unit Of Measure Schedule Desc, Base
Unit of Measure
Name: Jet Payroll Transactions
Description: There is one row for each payroll transaction in the Great Plains company
being viewed. This view allows you to see the check number, date, department, payroll
code, document type, amount, employee name, and employee number for each payroll
transaction.
Technical: UPR30300 Check Date, Check Number, Department, Payroll Code,
Transaction Beginning Date, Transaction Ending Date, Pay Rate, Transaction Amount,
Pay Advance, State, Local Tax, Workers Comp, Shift Code, Days Worked, Taxable
Wages, Weeks Worked, and Employee Class.
UPR00100 (Link =Employee Number) Employee Number, Employee Last Name,
Employee First Name, Employee Middle Name, Social Security Number, Birth Date,
Gender, Job Title, Location ID, Vacation Available, Sick Time Available, and Marital
Status
Name: Jet Project Accounting
Description: There is one row for each Customer, Contract, Project, and Cost Category
in the Great Plains company being viewed. This view allows you to see the Customer
number, Contract, Project, forecasted profit, forecasted quantity, forecasted cost, actual
revenue, actual costs, actual quantities, and actual billings for each Cost Category.
Technical: PA01301 Cost Category ID, Forecast Quantity, Forecast Total Cost,
Forecast Profit, and Forecast Profit Amount.
Jet Reports Help
54
PA33302 (Link = Project Number) Posted Revenue, Posted Cost, Posted Quantity, and
Posted Billings
PA01201 (Link = Cost Category) Project Number
PA01111 (Link = Customer Number) Customer Number, Contract Number
Name: Jet Purchase Detail
Description: There is one row for each purchase line in the Great Plains company being
viewed. This view allows you to see the unit cost, extended cost, item number, item
description, document date, PO status, PO number, vendor number and quantity for each
PO line. Both posted and open POs are available.
Technical: POP30100 PO Number, PO Status, PO Type, Confirm With, Document
Date, Promised Date, Promised Ship Date, Required Date, Requisition Date, Shipping
Method, Vendor Number, Vendor Name, Minimum Order, Vendor Address Code,
Vendor Company ID, Primary bill-to Address Code, Primary Ship-to Address Code,
Vendor Company Name, Vendor Contact, Address 1, Address 2, Address 3, City, State,
Zip Code, Country Code, Country, Phone 1, Phone 2, Phone 3, Fax, Payment Terms ID,
Discount Date, Due Date, Created Date, Buyer ID, and POP Contract Number.
POP10100 PO Number, PO Status, PO Type, Confirm With, Document Date, Promised
Date, Promised Ship Date, Required Date, Requisition Date, Shipping Method, Vendor
Number, Vendor Name, Minimum Order, Vendor Address Code, Vendor Company ID,
Primary bill-to Address Code, Primary Ship-to Address Code, Vendor Company Name,
Vendor Contact, Address 1, Address 2, Address 3, City, State, Zip Code, Country Code,
Country, Phone 1, Phone 2, Phone 3, Fax, Payment Terms ID, Discount Date, Due Date,
Created Date, Buyer ID, and POP Contract Number.
POP30110 (Link = PO Number) PO Line Status, Line Item Number, Line Item
Description, Line Quantity Ordered, Vendor Line Item Number, Vendor Line Item
Description, Location Code, Unit of Measure, Unit Cost, Extended Cost, Item Required
Date, Item Requested Date, Release By Date, Released Date, Line Number, and Release.
POP30110 (Link = PO Number) PO Line Status, Line Item Number, Line Item
Description, Line Quantity Ordered, Vendor Line Item Number, Vendor Line Item
Description, Location Code, Unit of Measure, Unit Cost, Extended Cost, Item Required
Date, Item Requested Date, Release By Date, Released Date, Line Number, and Release.
POP10110 (Link = PO Number) PO Line Status, Line Item Number, Line Item
Description, Line Quantity Ordered, Vendor Line Item Number, Vendor Line Item
Description, Location Code, Unit of Measure, Unit Cost, Extended Cost, Item Required
Date, Item Requested Date, Release By Date, Released Date, Line Number, and Release.
Name: Jet Purchase Header
Creating Reports
55
Description: There is one row for each PO in the Great Plains company being viewed.
This view allows you to see the PO document information including PO document totals.
It shows document date, shipping method, subtotal, freight amount, miscellaneous
charges, tax amount, vendor number, vendor name, and discount amounts. Both posted
and open POs are available.
Technical: POP30100 PO Number, PO Status, PO Type, Confirm With, Document
Date, Promised Date, Promised Ship Date, Required Date, Requisition Date, Shipping
Method, Remaining Subtotal, Subtotal, Freight Amount, Misc Charges Amount, Tax
Amount, Vendor Number, Vendor Name, Minimum Order, Vendor Address Code,
Vendor Company ID, Primary Bill-to Address Code, Primary Ship-to Address Code,
Vendor Company Name, Vendor Contact, Address 1, Address 2, Address 3, City, State,
Zip Code, Country Code, Country, Phone 1, Phone 2, Phone 3, Fax, Payment Terms ID,
Discount Dollar Amt, Discount Percent Amt, Discount Amt Available, Discount Date,
Due Date, Created Date, Buyer ID, Freight Tax Amt, Misc Tax Amount, and POP
Contract Number.
POP10100 PO Number, PO Status, PO Type, Confirm With, Document Date, Promised
Date, Promised Ship Date, Required Date, Requisition Date, Shipping Method,
Remaining Subtotal, Subtotal, Freight Amount, Misc Charges Amount, Tax Amount,
Vendor Number, Vendor Name, Minimum Order, Vendor Address Code, Vendor
Company ID, Primary Bill-to Address Code, Primary Ship-to Address Code, Vendor
Company Name, Vendor Contact, Address 1, Address 2, Address 3, City, State, Zip
Code, Country Code, Country, Phone 1, Phone 2, Phone 3, Fax, Payment Terms ID,
Discount Dollar Amt, Discount Percent Amt, Discount Amt Available, Discount Date,
Due Date, Created Date, Buyer ID, Freight Tax Amt, Misc Tax Amount, and POP
Contract Number.
Name: Jet Sales Detail
Description: There is one row for each sales line in the Great Plains company being
viewed. This view allows you to see the line item numbers and descriptions, unit cost,
unit price, extended price, remaining price, and quantities for each sales line. Both the
posted and open sales lines are included.
Technical: SOP30200 Document Type, Document Number, Posting Date, Document
Date, Order Date, Invoice Date, Document Back Order Date, Document Fulfillment Date,
Document Actual Ship Date, Due Date, Location Code, Customer Number, Customer
Name, Customer PO Number, Contact Person, Ship to Name, Address 1, Address 2,
Address 3, City, State, Zip Code, Country Code, Country Name, Phone 1, Phone 2,
Phone 3, Fax, Shipment Method, Document Status, Void Status, Currency ID,
Salesperson ID, Sales Territory, UPS Zone, and Document Payment Amount Received.
SOP10100 Document Type, Document Number, Posting Date, Document Date, Order
Date, Invoice Date, Document Back Order Date, Document Fulfillment Date, Document
Actual Ship Date, Due Date, Location Code, Customer Number, Customer Name,
Jet Reports Help
56
Customer PO Number, Contact Person, Ship to Name, Address 1, Address 2, Address 3,
City, State, Zip Code, Country Code, Country Name, Phone 1, Phone 2, Phone 3, Fax,
Shipment Method, Document Status, Void Status, Currency ID, Salesperson ID, Sales
Territory, UPS Zone, and Document Payment Amount Received.
SOP30300 (Link = Document Number) Line Item Number, Line Item Description, Unit
of Measure, Unit Cost, Unit Price, Unit Extended Price, Unit Remaining Price, Unit
Quantity, Unit Qty Damaged, Unit Qty Returned, Unit Qty on Hand, Unit Qty Ordered,
Unit Qty Received, and Unit Qty on Invoice.
SOP10200 (Link = Document Number) Line Item Number, Line Item Description, Unit
of Measure, Unit Cost, Unit Price, Unit Extended Price, Unit Remaining Price, Unit
Quantity, Unit Qty Damaged, Unit Qty Returned, Unit Qty on Hand, Unit Qty Ordered,
Unit Qty Received, and Unit Qty on Invoice.
Name: Jet Sales Detail
Description: There is one row for each sales order in the Great Plains company being
viewed. This view allows you to see the customer, document amount, document status,
and document date for sales documents. Both the posted and open sales documents are
included.
Technical: SOP30200 Document Type, Document Type Description, Document
Number, Posting Date, Document Date, Order Date, Invoice Date, Document Back Order
Date, Document Fulfillment Date, Document Actual Ship Date, Due Date, Location
Code, Customer Number, Customer Name, Customer PO Number, Contact Person, Ship
to Name, Address 1, Address 2, Address 3, City, State, Zip Code, Country Code, Country
Name, Phone 1, Phone 2, Phone 3, Fax, Shipment Method, Document Status, Void
Status, Currency ID, Salesperson ID, Sales Territory, UPS Zone, and Document Payment
Amount Received, Commission Amount, Discount Available Amount, Document
Amount, and Subtotal.
SOP10100 Document Type, Document Type Description, Document Number, Posting
Date, Document Date, Order Date, Invoice Date, Document Back Order Date, Document
Fulfillment Date, Document Actual Ship Date, Due Date, Location Code, Customer
Number, Customer Name, Customer PO Number, Contact Person, Ship to Name,
Address 1, Address 2, Address 3, City, State, Zip Code, Country Code, Country Name,
Phone 1, Phone 2, Phone 3, Fax, Shipment Method, Document Status, Void Status,
Currency ID, Salesperson ID, Sales Territory, UPS Zone, and Document Payment
Amount Received, Commission Amount, Discount Available Amount, Document
Amount, and Subtotal.
Name: Jet Vendor Open Application
Description: There is one row for each apply-from document in the Great Plains
company being viewed. This view allows you to see the amount applied, remaining
Creating Reports
57
amount, the vendor, the document type, the document number, and the due date for each
open payable document.
Technical: PM10200 Applied To Doc Number, Voucher Number, Applied Amount,
Applied From Doc Number, Applied From Doc Date, and Vendor Number.
PM40102 (Link = Applied To Doc Type) Applied To Doc Type and Applied From Doc
Type.
PM30300 Applied To Doc Number, Voucher Number, Applied Amount, Applied From
Doc Number, Applied From Doc Date, and Vendor Number.
Name: Jet Vendor Open Transactions
Description: There is one row for each open payable document and the amount applied
in the Great Plains company being viewed. This view allows you to see the amount
applied, remaining amount, the vendor, the document type, the document number, and
the due date for each open payable document.
Technical: PM20000 Document Number, Document Date, Due Date, Discount Date,
Amount, Remaining Amount, Vendor Balance, Discount %, Discount Available,
Discount Taken, Purchases Amount, Freight Amount, Misc Amount, Tax Amount, Trade
Discount Amount, Write Off Amount, PO Number, Shipping Method, Currency ID,
Payment Type, Apply Withholding, Batch Number, Batch Source, and Voucher Number.
PM40102 (Link = Document Type) Document Type Type.
PM00200 (Link = Vendor Number) Vendor Number, Vendor Name, and Vendor Class.
Name: Jet Vendor Period Balance
Description: There is one row for each period in the fiscal calendar of the Great Plains
company being viewed. This view allows you to see the balance for a vendor as of a
particular period.
Technical: PM20000 Vendor Number, Period Balance.
SY40100 (Link = Period End, Period Start, Year Filter) Year Filter, Period ID, Period
Start, and Period End.
Name: Jet Vendor Master
Description: There is one row for each vendor and each period in the fiscal year in the
Great Plains company being viewed. This view allows you to see information about each
individual vendor. Such as: Vendor Number, Vendor Name, Address, Class, Contact,
Phone, Fax, Shipping Method, Payment Terms, Amount Billed, and Amount Paid.
Jet Reports Help
58
Technical: PM00100 (Link = Vendor Class ID) Class Description, and Vendor Class
ID.
PM00200 Vendor Number, Vendor Name, Primary Address Code, Purchase Address
Code, Ship From Address Code, Remit To Address Code, Class Description, Contact,
Address 1, Address 2, Address 3, City State, Zip Code, Country, Phone 1, Phone 2,
Phone 3, Fax, UPS Zone, Shipping Method, Status, Currency ID, Minimum Order,
Payment Terms ID, Min Payment Percent, Min Payment Amount, Max Invoice Amount,
Comment 1, Comment 2, Credit Limit Amount, Discount Grace Period, Due Date Grace
Period, and Country Code.
PM00202 (Link = Vendor Number) Period Filter, Year Filter, Amount Billed, Amount
Paid, and Number of Invoices.
SQL=
SQL= is a power feature for the Universal Connector to allow absolutely any data to be
retrieved from any database. This feature is intended for advanced users only. This
section is not intended to teach you SQL, but only to show you how to use the SQL=
feature.
SQL= allows you to use SQL queries directly in the NL function while having Jet
Reports' user-friendly filtering capabilities. This allows you to create rows, columns or
sheets from SQL queries and to use cell references for user editable filters that will be
converted into SQL filters and placed in your SQL query. This function allows you to do
complicated SQL Joins that are not possible using the current Jet Reports Universal
connector. It also allows you to make the SQL server do the work of sorting the resulting
data.
SQL= Example
Please note that the table/field names and date ranges in this example will work with
Great Plains 8.0.
In Great Plains, many tables store a G/L account index instead of the actual G/L account
number. Users want to sort by the G/L account number. In SQL, you could join two
tables to produce this result. The SQL statement might be something like the following.
"SELECT ACTNUMST, IVIVINDX
FROM IV30300 LEFT JOIN GL00105 ON IVIVINDX = ACTINDX
WHERE DOCDATE BETWEEN '2004-01-20' AND '2004-01-31'
ORDER BY ACTNUMST, IVIVINDX"
Creating Reports
59
This query returns a list of G/L account numbers and the G/L account index for accounts
to which inventory have been expensed during the last 11 days of January, 2004, sorted
by the G/L account number. The corresponding SQL= statement is as follows.
"SQL=SELECT DISTINCT ACTNUMST, IVIVINDX FROM IV30300 LEFT JOIN
GL00105 ON IVIVINDX = ACTINDX WHERE %Filter1% ORDER BY %Sort%"
Notice that %Filter1% will be replaced by Jet Reports filters in the NL function. You
must put "ORDER BY %Sort%" if any of your NL function filters does a sort that you
want to affect the SQL statement. You can put this statement in a separate cell, say C5,
and use a cell reference as the NL table parameter . The "SQL" "What" parameter is used
to illustrate the resulting SQL query. You can put "Rows" as the "What" argument to
return the actual rows.
=NL("SQL",$C$5,"ACTNUMST","1S=DOCDATE",C18,"+1S=ACTNUMST","*","+1S
=IVIVINDX","*")
Note that even though there are multiple filter fields/filters, you only need a single
%Filter1% replacement string since there is only one WHERE clause. If you had Sub
queries or Joins that had additional Where clauses, you would need to use multiple
%FilterX% replacement strings if the fields and filters did not match in the two tables.
SQL= is not available for a Navision connector.
Introducing Filter Lookup
When using the Jet Insert Function wizard, Report Wizard or Report Options with
Database Lookup, you may be presented with a filter lookup window.
You will see a list of data values from your database. This list contains the first 100
unique values from the first 1000 records in the table (these limits can be changed in
Jet/Settings). You can simply click on a value in the list and click OK or double click a
value and this value will be inserted as your filter.
The second way to create a filter is with the Current Filter text box at the bottom of the
window. You can click a value in the list and click the Insert Selected Value button to
insert it into the Current Filter box. You can also click on any of the Insert Filter Operator
buttons to insert that particular operator. You can also type in the Current Filter box
manually. Once you have successfully created the desired filter, click OK and it will be
inserted into your filter.
Introducing the NL Function
Jet Reports adds the NL worksheet function to Excel. This function retrieves data from
your database based on the function parameters that you set.
Jet Reports Help
60
With Navision, the following example of an NL Formula retrieves the balance of
customer "10000".
=NL(,"Customer","Balance","No.","10000")
The formula tells Jet Reports to return the Balance field in the Customer table for the
record that has a customer No. of "10000".
With Northwind, the following example of an NL Formula retrieves the phone number
for a customer with the CustomerID "ALFKI".
=NL(,"Customers","Phone","CustomerID","ALFKI")
The formula tells Jet Reports to return the Phone field in the Customers table for the
record that has a CustomerID of "ALFKI".
In this example, the first parameter is not used, so you enter a comma to move to the
second parameter, which is the table name. The third parameter is the field to return. The
fourth is a filter field, and the last parameter is the filter value. The easiest way to get this
formula is to use the Jet Browser to drag the "Phone" field out of the "Customers" table
with the Browser's Return option set to "First". You now have an NL formula without the
filters. You can add the filters using the Jet Function Wizard (Jfx).
Since only one record in the table matches the filter set, Jet Reports knows exactly what
to return. What do you think the following formula would return?
=NL(,"Customers","ContactName","Region","CA")
=NL(,"Customer","Balance","State","CA")
Since you might have more than one customer in the state of California, Jet Reports will
return the name of the first customer it finds in California. If you omit the first parameter,
NL always returns the field of the first record it finds that matches the filters. Returning
the first record is usually used when the filters specify exactly one record.
More Northwind Examples
How would you get the Sum of the Quantities for all Invoices for customers in London?
Here is the formula.
=NL("Sum","Invoices","Quantity","City","London")
This formula will find all Invoices that have a City of London and return the Sum of their
Quantities. If you only wanted quantities for Invoices in London for the product named
"Sir Rodneys Scones", you could use:
Creating Reports
61
=NL("Sum","Invoices","Quantity","City","London","ProductName", "Sir Rodneys
Scones")
Can you guess how to write the formula for the Sum of all Quantities greater than 5?
=NL("Sum","Invoices","Quantity","Quantity",">5")
You can specify up to ten filters. If you wanted the sum of the Invoice Quantities for the
product named "Sir Rodneys Scones" with Quantity greater than 5 in London, you could
use:
=NL("Sum","Invoices","Quantity","City","London","ProductName","Sir Rodneys
Scones", "Quantity",">5")
If you wanted to know how many Invoices had Quantities greater than 5 in London you
could use:
=NL("Count","Invoices","Quantity","City","London","Quantity",">5")
More Navision Examples
How would you get the sum of the balances for all customers in Georgia? Here is the
formula.
=NL("Sum","Customer","Balance","State","GA")
This formula will find all customers in Georgia and return the sum of their balances. If
you only wanted customers in Atlanta, you could use:
=NL("Sum","Customer","Balance","City","Atlanta")
Can you guess how to write the formula for the sum of all positive balances?
=NL("Sum","Customer","Balance","Balance",">0")
You can specify up to ten filters. If you wanted the sum of the balances of all customers
with positive balances in Atlanta, GA, you could use:
=NL("Sum","Customer","Balance","Balance",">0","City","Atlanta","State","GA")
If you wanted to know how many customers had positive balances in Atlanta, GA you
could use
=NL("Count","Customer","Balance","Balance",">0","City","Atlanta","State","GA")
Jet Reports Help
62
The first three parameters of the NL function specify what to retrieve, the table, and the
field. The fourth, fifth and following parameters specify the filters. For each filter, you
include two parameters, the filter field and the filter value.
If the first parameter, the "what" parameter, is blank, Jet retrieves the first record that
matches the filters. You can also use "Sum" to sum up values in a field or "Count" to
count records in a table.
Introducing the NF Function
The NL function works great if you want a single field from a record, but if you want to
retrieve more than one field from the same record, retyping all the filters for each field
can be tedious.
Navision Cronus Example
With Navision, the following report lists Employee numbers along with their First Name,
Last Name and State.

The employee No. uniquely identifies each employee, so you can make a list of No.s,
then use it as a filter to get the names and states for each employee. Sample output of the
report is listed below.

The NF function is a shortcut that will return the value of a field in a record. One or more
NF functions can be used with a single NL function that has the NL field parameter left
blank. The report listed above can be created with much less typing by using this method.
The simpler version of the report is shown below.

As you can see, the second version requires much less typing. The output of the new
report is shown below.

The new column does not contain information that you want to see on the report so you
can hide this column (see Automatic Hidden Columns and Rows below).
If you drag and drop fields from the Jet Browser with the Rows option selected, Jet
Reports will create the appropriate NL and NF formulas for you.
Access Northwind Example
Creating Reports
63
With Northwind, the following report lists CustomerIDs with their City and Phone.

The CustomerID uniquely identifies each customer, so you make a list of CustomerIDs,
then use it as a filter to get the City and Phone for each customer. A sample of the output
of this report is listed below.

The NF function is a shortcut that will return the value of a field in a record. One or more
NF functions can be used with a single NL function that has the NL field parameter left
blank. The report listed above can be created with much less typing by using this method.
The simpler version of the report is shown below.

As you can see, the second version requires much less typing. The list of fields in the NL
function is enclosed in brackets {} and must include all of the fields you want to use in
the NF functions. The first parameter of the NF function has a cell reference to the NL
command, and the second parameter is the name of the field in which you are interested.
Note that this type of NL function returns what is called a record key, which will be
discussed later. A sample of the output of the report is listed below.

As you can see, the first column does not contain information that you want to see on the
report so you can hide this column (see Automatic Hidden Columns, Sheets and Rows
below).
Since you are working in the Customers table, you can make this report even easier. The
CustomerID field uniquely identifies each record in the Customers table so it is called the
primary key for that table. Since the Customers table has a primary key, you can just
leave the Field parameter blank and Jet Reports will take care of the rest. The same report
is pictured below with the shorter NL command.

If there is no primary key in the table, Jet Reports will give an error message if you leave
the Field parameter of the NL blank so you can try leaving the Field blank, then fill in a
list of field names if necessary. If you drag and drop fields from the Jet Browser, Jet
Reports will check the table for a primary key and create the appropriate formulas.
Introducing the GL Function
Jet Reports Help
64
Reports based on the G/L are easy with the GL function. Now the GL function is
available on both Navision and Great Plains databases.
Navision Cronus Examples
To retrieve the balance of G/L account 44100, you would type the following.
=GL("Balance","44100")
If you wanted to know the net change of account 44100 between 1/1/2002 and 1/31/2002,
you would type the following.
=GL("Balance","44100","1/1/02","1/31/02")
With Navision, you can filter on three dimensions for G/L Balances. One of these
dimensions is called Business Unit. The other two are Department and Project in
Navision versions prior to 3.0. With Navision version 3.0 and later, the names of the
dimensions can be changed, but they are generally called Global Dimension 1 and Global
Dimension 2. For the balance of account "40100" with Global Dimension 1 of "USA",
Global Dim 2 of "COPPER", and Business Unit of "US MINING" you can use the
following function.
=GL("Balance","40100",,,,"USA","COPPER",,,"US MINING")
Great Plains Fabrikam Examples
To retrieve the balance of G/L account 000-1100-00, you would type the following.
=GL(,"Balance","000-1100-00")
If you wanted to know the net change of account 000-1100-00 for the 1st quarter of 2002,
you could type the following.
=GL(,"Balance","000-1100-00","2002/1","2002/3")
With Great Plains, you can filter on the account number as a whole or you can filter on
the individual segments of the account number. So you could also create the last GL
function to find the 2002 1st quarter net change for account 000-1100-00 like the
following.
=GL(,"Balance",,"2002/1","2002/3",,"000","1100","00")
Note that while some numbers such as 2002 and the start period and end period do not
need quotes, "000" and "00" must be quoted so that Excel does not interpret them as
numbers and change them to single zeros.
Creating Reports
65
The GL Formula has many parameters so the Jet Function wizard (Jfx) is a convenient
tool for entering the GL Function.
The GL function is not available in Jet Reports Universal.
Introducing the Classic Report Wizard
You can easily create an entire report from a single table in your database using the
Report Wizard, accessible from the Classic Wizard button on the toolbar and ribbon or
the selection on the Jet menu.
The first step is to select the table and data source. You have the option of using your
default data source, which will not explicitly define a data source in your functions, or
selecting a data source. Clicking the drop down arrow will give you a a list with all the
tables in your database.
On the next screen, you can select fields which you want in your report and drag and drop
to put them in the desired order they will appear on the report.
The next screen allows you to Group (subtotal) your data by a specific field you selected.
The next screen allows you to sort your data by a field or fields in ascending or
descending order.
If you have numeric fields in your report, the next screen allows you to create totals for
these fields.
The next screen allows you to set filters. Note that if you check the "Set at Report
runtime" box below the filter, this filter will be added to the Options sheet the wizard
creates for you.
Notice that after you select a field, you can click the arrow next to the value to get a
lookup window. See the topic Introducing Filter Lookup for more information on this
window.
Finally, you are given the options to prepare report for Viewers, add basic Excel
formatting, and to use Excel's data grouping feature. Click finish at this point to create
your report.
Note that the report is created in an entirely new Excel workbook so it does not overwrite
any existing worksheets in open workbooks.
Introducing the Insert Jet Function Wizard (Jfx)
Jet Reports Help
66
Jet functions can be easily inserted with the Insert Jet Function wizard, accessible from
the Jfx button or the Jet/Insert Function menu option. This wizard works much like the
Excel Insert Function wizard, so its interface should be familiar to Excel users.
The first step to inserting a function is to select the function and data source. You have
the option of using your default data source, which will not explicitly define a data source
in your function, or selecting a data source. Notice that the functions listed may be
different depending on the type of data source you select.
After selecting a function such as the NL, you will be presented with the list of
parameters for that function.
Notice that clicking the arrow next to the What parameter will give you a list of possible
arguments for that parameter.
When you click the arrow next to the Table parameter you will get a Lookup window
with a list of tables in your database.
Similarly, clicking the arrows next to the Field or FilterField parameters will give you a
lookup window with a list of the fields in the specified table.
Clicking the arrow next to the Filter parameter will give you a filter lookup window. See
Introducing Filter Lookup for more information.
Also, clicking any cell or range in Excel will insert a cell reference for that cell or range
into the currently selected argument in the Jfx.
Notice that when you click the Evaluate button at the bottom of the window, you will get
an approximate result for the function. This approximate result is the same as the result
you will see in Design mode before you run Jet/Report and may not be accurate. There is
also a drilldown button which will drilldown on the data in your database. When you
click OK, your function will be inserted into the cell on your worksheet that was active
when you opened the Jfx.
Introducing the Report Builder
The report builder allows you to quickly create reports based on information that is
relevant to your task. When you start the report builder, you can select from the All
Tables view or a data view that has been pre-configured to the type of report that you
wish to create.
When you select a data view, you will see a description of the data view and a detailed
mapping of the navigational links that are available. Each data view contains a name, a
description and a base table. This information is pre-configured in the default data views.
With the Data View Creator Tool, users can also modify categories and data views or
create their own.
Creating Reports
67
After selecting a data view, you may add fields, groupings, filters and subtotals based on
the information in the data view and/or other tables that you can navigate to using the
pre-configured links. Links appear in the report builder as bold fields with small
navigational arrows next to them. These links allow you to navigate to get information
from other areas of the database without worrying about how to link the information
yourself.
Navigational links also provide the basis for grouping. You can group by any link field,
or navigate through that link and group by link fields it contains. All of the fields in any
level of navigation are available to you to group by. If you do not see what you need, see
too much, or do not like the order of presentation, you can use the data view creator tool
to modify the data views.
Before You Start
Before you use the report builder, you will need to import or create data views and
categories. You can create your own, import views and/or categories from another user,
or import the default data views.
Default data views are available on http://www.jetreports.com/dataviews. Links to this
site are provided on the start menu (Start/All Programs/Jet Reports/Dynamics
NAV/Download Data Views). You can also click on the Download Data Views link
within the report builder.
After downloading the file, you should open the .zip folder and extract the data view
category (.jdc) file.
Importing Data Views and Categories
To import data views and categories, choose Data Source Settings on the Jet tab in Excel
and select File/Import/Data View Categories.
Each data source can have a unique set of data views, so if you want to have more than
one set, or the same set for multiple data views, you should import the data views in each
data source that you want to use them with.
The Report Builder is only available for Microsoft Nav data sources.
Building Reports With the Report Builder
Selecting a Data View
After importing data views, open the Report Builder from the Jet menu and start by
clicking on the categories to show the data views within. Now click on the data views to
select a data view. When you select a data view, the description and relationships will
appear on the right side of the screen.
Jet Reports Help
68
Click the + nodes to expand or collapse the categories and/or the relationship
information.
Click the Next button to move to the next step.
Adding Fields
On the Add Fields tab, double click a field to add it to the report. As you click on the
fields, they will appear in the report preview area on the bottom of the form. To remove
fields, click the remove button. If there are multiple fields in the report preview area, the
most recently added field will be removed. Scroll up and down or use the find-as-you-
type method to find any other fields you would like to add.
Fields with navigational links are displayed in bold with small navigational arrows
displayed to the right of the fields' names. To navigate to a related area, click on the
arrow next to the field's name or use your right arrow key.
As you navigate to other areas, you will notice a bread crumb display just above the
field list that shows the path from the base table to the table to which you have navigated.
You can click on any of the fields listed in the bread crumb display to return to that point
in the chain. You may add fields from any navigable area.
When you have completed adding fields, click Next to move to the Add Groupings tab or
select a tab directly by clicking the buttons at the top of the form.
Adding Groupings
To add groupings, double-click on the grouping field, or click the add button. When you
do so, you will see the group appear in the report preview area on the bottom of the form.
After adding a grouping, you will be automatically navigates to the Add Fields tab so that
you can add fields for the group. The groups that are available are defined by the
navigational links, so if you do not see a group that you would like to group by, this can
be modified by adding a linking field using the Data View Creator tool.
One thing to note in grouping is that you are not limited to single level navigation. If you
would like to group item sales by territory code, navigate to the customer and then from
the customer select the territory code and click Add.
To remove a group, click the remove button and the most recently added group will be
removed. Be careful that the Add Groupings tab on the top of the form is selected and
the not Add Fields tab. If the Add Fields tab is selected, the last field added, not the last
group added, will be removed.
When you have completed adding groups, click Next to move to the Add Filters area or
select any area directly by clicking the tabs at the top of the form.
Creating Reports
69
Adding Filters
Click on a row in the report preview area to select filters for that row. The active row has
a small arrow and is represented in light grey. Enter any default filter values in the filter
area and click the Report Option checkbox for any filters that you would like the user to
be able to modify when running the report.
Only fields that are on the report are available for filtering so if you would like to filter a
field that does not appear on the reports, you can either add it to the report and hide it, or
add it as a default filter in the data view itself with the Data View Creator tool.
Adding Subtotals
All numeric fields in the base table level (the most indented row in the report preview
area) are available for automatic subtotaling. Check the box next to the numeric fields to
add subtotaling.
When you are done adding subtotals, click Finish and the report will be created in a new
Excel workbook for you.
The Report Builder is only available for Microsoft Nav data sources.
Array Calculations
Arrays are lists of data values. You can obtain a string representing such a list from Jet
using "Filter" as the What parameter in an NL function. The values in arrays returned by
Jet are guaranteed to be unique. The resulting array might be a list of Customers or a list
of Invoice Document numbers or any other list of data that match a set of filters. The
array calculation operations of the NP function allow you to find different combinations
of two arrays.
An example of when you would need an array calculation is listing the invoice document
numbers where either the Type on an Invoice Line is "Item" for all item numbers, or the
Type is "G/L Account" and the account number is 300. Both the Item numbers and the
G/L Account numbers are stored in the same "No." field, so there is no single set of
filters that will create this list of document numbers.
The array operations available in the NP function are "Difference", "Union" and
"Intersect". The difference between two arrays consists of all of the elements that are in
the first array but are not in the second. The union of two arrays consists of a single copy
of all of the elements in both arrays with any duplicates eliminated. The intersection of
two arrays is the set of elements that are common to both arrays. An example of the
results of the array operations are listed in the table below.
Array1: {100, 200, 300, 400, 500} Array2: {400, 500, 900, 1000, 2000}
Difference {100, 200, 300}
Jet Reports Help
70
Union {100, 200, 300, 400, 500, 900, 1000, 2000}
Intersect {400, 500}

Example 1
The following formula creates a list down rows of the union of all of the customers
whose names start with A with all the customers whose names start with B.
Access Northwind
=NL("Rows", NP("Union", NL("Filter","Customers","
ContactName","ContactName","A*"), NL("Filter","Customers","
ContactName","ContactName","B*")))
Navision Cronus
=NL("Rows", NP("Union", NL("Filter","Customer","No.","Name","A*"),
NL("Filter","Customer","No.","Name","B*")))
Great Plains Fabrikam
=NL("Rows",NP("Union",NL("Filter","RM00101","CUSTNMBR","CUSTNAME","A*"
),NL("Filter","RM00101","CUSTNMBR","CUSTNAME","B*")))
Note that you could do the same operation with the following simple formula.
Access Northwind
=NL("Rows","Customers","ContactID","ContactName","A*|B*")
Navision Cronus
=NL("Rows","Customer","No.","Name","A*|B*")
Great Plains Fabrikam
=NL("Rows","RM00101","CUSTNMBR","CUSTNAME","A*|B*")
Example 2
Access Northwind
This formula creates a list down rows of the Order IDs of all of the orders where the
Region field is either USA or Canada.
Creating Reports
71
=NL("Rows", NP("Union", NL("Filter","Orders","OrderID","ShipCountry","USA"),
NL("Filter","Orders","OrderID"," ShipCountry","Canada")))
Navision Cronus
The following formula creates a list down rows of the document numbers of all invoices
where either the Type field is "Item", or it is "G/L Account" and the No. field is 2000.
=NL("Rows", NP("Union", NL("Filter","Sales Invoice Line","Document
No.","Type","Item"), NL("Filter","Sales Invoice Line","Document No.","Type","G/L
Account","No.","2000")))
Great Plains Fabrikam
The following formula creates a list down rows of the GL account 2nd segments where
either the account type is 2 or the posting type is 0.
=NL("Rows",NP("Union",NL("Filter","GL00100","ACTNUMBR_2","ACCTTYPE",2),
NL("Filter","GL00100","ACTNUMBR_2","PSTNGTYP",0)))
You should be cautious using arrays because they are often not the easiest or fastest way
to solve a problem. Example 1 is a good example of a query that does not require arrays,
and will run much slower if you use them. Also note that if NP("Union"),
NP("Intersect"), or NP("Difference") are by themselves in a cell they will only return the
first value from the array. You must put them inside NL("Rows") as in the examples
above in order to correctly return all the data.
There are two more array operations that behave a bit differently than those listed above:
"Split" and "Join". "Split" takes two text strings and splits the first string based on the
second, resulting in an array. For instance, if you wanted to create a list of account
numbers based on the string "1000+2000+3000", the formula would look like the
following.
=NP("Split","1000+2000+3000","+")
The result would be the array {"1000","2000","3000"}. Note that this must be put inside
an NL("Rows") as in the Union examples above in order to return all the data.
In the opposite scenario, if you have an array but would like to create a text string by
joining each element of that array separated by a given string, you would use the "Join"
operation. Using the same array, you can create a string for a filter with array values
separated by the "|" character with the following formula.
=NP("Join",{"1000","2000","3000"},"|")
Jet Reports Help
72
The result would be the text string "1000|2000|3000", which is a valid filter that you
could pass into an NL function.
For Join and Split, Arg1 of the NP function is the value you want to manipulate and Arg2
is the character by which you want to join or split the value. If you experiment with these
operations, you will find that you have an amazing amount of flexibility, especially when
you use them in conjunction with the other array calculation formulas listed above.
Please note that the results of an NP("Join") may be very large and thus putting it directly
inside another function may cause problems with Excels 256 character formula limit as in
the following formula.
=NL("Rows",NP("Split",NP("Join",{"some","array","here"},"|"),"|"))
It is recommended that in a situation like this the NP("Join") be placed in a separate cell
as in the following.
B2: =NP("Join",{"some","array","here"},"|")
B3: =NL("Rows",NP("Split",B2,"|"),"|"))
Design Mode Calculations
Some functions return different values in design mode than in report mode. In design
mode, sorts, array filters, and link= are all ignored, and the first value matching the filters
is returned. This makes design mode calculations faster while still generating generally
accurate reports, but the accuracy of design mode results should not be relied on.
Loading Pictures
To load a bitmap from a file, put "Picture" in the What parameter , leave the table blank,
and put the file name in the Field parameter. To use a picture that is stored as a BLOB in
Navision, enter the Table, Field and Filter parameters that will select the correct BLOB.
You can enter "Height=" and "Width=" in the filter fields with numbers in the
corresponding filters to set the height and width of the picture. If you do not enter sizing
specifications, Excel will choose a default size for the picture.
The following NL function displays a picture from Navision for Item 10000.
=NL("Picture","Item","Picture","No.","10000")
The following NL function that will display a picture from a file with the height and
width specified.
=NL("Picture",,"C:\testdb\picture.bmp","Height=","25","Width=","30")
Creating Reports
73
Building a Report From Multiple Databases
If you want to build a report that uses multiple databases of any type, you need to create a
data source for each database. Check the installation manual to find information on
configuring data sources. Once your data sources are configured, you can specify
separate connections in both the NL and the GL functions. You can change the
connection that the NL function uses by specifying "DataSource=" as a filter field and the
data source name as a filter. The Jet Browser will do this automatically if you are
dragging and dropping from a data source that is not the default. The GL function has a
separate parameter that will accept the data source name. The following example sums
the amounts from Purchase Invoice number 1000 from both a Navision database and a
Northwind Access database.
=NL(1,"Purch. Inv. Header", "Amount", "No.", "1000", "DataSource=", "Navision") +
NL(1,"Orders","Amount","OrderID","1000","Connection=","Northwind")
In the preceeding example, there is a data source named Navision that connects to a
Navision database and a data source named Northwind that connects to the Northwind
Access database. An important point to notice is that if you and a colleague both use the
same report, you need to name your data sources the same thing or else make the data
source name an option on the options sheet..
Listing Data Sources
The NP(DataSources) function returns an array of data source names. The following
formula produces rows for each data source:
=NL("Rows",NP("DataSources"))
The following lookup formula provides a list of data sources in the report options:
=NL("Lookup",NP("DataSources"),"Select a Data Source")
Heres how it would look on the report options sheet:
A B C D
1 Auto+Hide+HideSheet Title Value Lookup
2 Option Data
Source
* =NL("Lookup",NP("DataSource"),"Select
a Data Source")

Showing Data Queries
Jet Reports Help
74
ShowQuery= can be used to show the query that is produced by a Jet function and can be
a useful debugging tool. In Nav, ShowQuery= shows the drilldown url Jet Reports uses
to open Nav during drilldown. In a GP or Universal data source, ShowQuery= shows the
sql query Jet Reports uses to retrieve the data from the database.
The following formula returns customer IDs from a SQL data source:
=NL("Rows","Customers","CustomerID","CompanyName","*")
To show the SQL query for this formula, you could add ShowQuery= as follows:
=NL("Rows","Customers","CustomerID","CompanyName","*","ShowQuery=","True")
You would see the following:
SELECT DISTINCT CustomerID FROM Northwind.dbo.Customers ORDER
BY CustomerID
Structuring Reports
Introducing Automatic Rows and Regions
The NL function can create a copy of everything in a region of cells for each record in a
group of records. The first parameter of the NL function specifies the region to copy and
the filters select the group of records. When you run the report, the NL expands, inserting
a new copy of everything in the region, including functions and formatting, into the
worksheet for each record in the group. This feature is useful for making lists of data.
Navision Cronus Example
To make a simple Customer phone list using the Jet Browser, you can drag the Name and
Address fields from the Customer table in the Jet Browser to cell C4. Make sure that you
have the "Rows" option selected at the top of the Browser window.
If you click on each of the cells that have been filled in, you should have the following
formulas.
In cell C4: =NL("Rows","Customer")
In cell D4: =NF($C4,"Name")
In cell E4: =NF($C4,"Address")
When you put Jet into report mode by choosing the menu selection Jet/Report, you will
see something like the following.
Creating Reports
75

When you put Jet into Report mode, the region of the NL formula is Rows, so Jet creates
a copy of the row for each record that matches the filters. In this case, there were no
filters, so Jet created a row for each customer in the Customer table. The NF functions in
D and E were copied since they were inside the region; they used the record key returned
by the NL function to retrieve data in each row. To see the NL function output in column
B, you can use the Jet/Tools/Unhide menu option or the Jet/Unhide ribbon option.

You may have noticed that when you dragged and dropped fields into Excel, cell A1
changed to Auto+Hide. Jet Reports reserves Row 1 and Column A to use for marking
automatically generated rows and columns, and allowing you to mark rows and columns
you want to hide. Any row or column that an NL function automatically inserted will
have Auto in column A or row 1 respectively. You can see the markings by using the
Unhide feature as shown above. When you switch back to Design Mode, by choosing
Design from the Jet menu, you will see that Jet has deleted all the rows and columns with
the word Auto in row 1 or column A. If you accidentally enter Auto in Row 1 or Column
A other than in cell A1, the entire row or column will be deleted when you change from
Design mode to Report mode and back.
Access Northwind Example
To make a simple phone list using the Jet Browser, you can drag the CompanyName and
Phone fields from the Jet Browser into cell C4. Make sure that you have the "Rows"
option selected at the top of the Browser window.
If you click on each of the cells that have been filled in, you should have the following.
In Cell C4: =NL("Rows","Customers",{"CompanyName","Phone"})
In Cell D4: =NF ($C4,"CompanyName")
In Cell E4: =NF($C4,"Phone")
When you put Jet into report mode by choosing the menu selection Jet/Report, you will
see something like the following.

When you put Jet into Report mode, Jet creates a copy of the row for each record that
matches the filters because the region of the NL function is "Rows". In this case, there
were no filters, so Jet created a row for each customer in the Customers table. The NF
functions in D and E were copied since they were inside the region. To see the NL
function output in column B, you can use the Jet/Tools/Unhide menu option or the
Jet/Unhide ribbon option, and you will get results as shown below.
Jet Reports Help
76

You may have noticed that when you drag and drop fields into Excel, cell A1 changes to
"Auto+Hide". Jet Reports reserves Row 1 and Column A to use for marking
automatically generated rows and columns, and allowing you to mark rows and columns
you want to hide. Any row or column that an NL function automatically inserted will
have "Auto" in column "A" or row "1" respectively. You can see the markings by using
the Unhide feature as shown above. When you switch back to Design Mode (by choosing
Design from the Jet menu) you will see that Jet has deleted all the rows and columns with
"Auto" in row 1 or column A. If you accidentally enter "Auto" in Row 1 or Column A
other than in cell A1, the entire row or column will be deleted when you change from
Design mode to Report mode or visa versa.
Great Plains Fabrikam Example
To make a simple customer phone number list by using the Jet Browser, you can select
the Customer Name (CUSTNAME), Phone 1 (PHONE1) and Phone 2 (PHONE2) fields
and drag and drop them from the RM Customer MSTR (RM00101) table into cell B5.
Make sure that the "Rows" options is selected at the top of the Browser window.
If you select each cell that has been filled with a Jet formula, you will find the following.
In cell B5: =NL("Rows","RM Customer MSTR",{"Phone 2","Phone 1","Customer
Name"})
In cell C5: =NF($B5,"Customer Name")
In cell D5: =NF($B5,"Phone 1")
In cell E5: =NF($B5,"Phone 2")
When you run the report be selecting Jet/Report, you will see something like the
following.

When you put Jet into Report mode, Jet creates a copy of the row for each record that
matches the filters because the region of the NL function is "Rows". In this case, there are
no filters, so Jet creates a row for each customer in the Customers table. The NF
functions in columns C, D and E are copied since they are inside the region. To see the
NL function output in column B, you can use the Jet/Tools/Unhide menu option or the
Jet/Unhide ribbon option and you will get results as shown below.

You may have noticed that when you drag and drop fields into Excel, cell A1 changes to
"Auto+Hide". Jet Reports reserves Row 1 and Column A to use for marking
Creating Reports
77
automatically generated rows and columns, and allowing you to mark rows and columns
you want to hide. Any row or column that an NL function automatically inserted will
have "Auto" in column "A" or row "1" respectively. You can see the markings by using
the Unhide feature as shown above. When you switch back to Design Mode (by choosing
Design from the Jet menu) you will see that Jet has deleted all the rows and columns with
"Auto" in row 1 or column A. If you accidentally enter "Auto" in Row 1 or Column A
other than in cell A1, the entire row or column will be deleted when you change from
Design mode to Report mode or visa versa.
Introducing Automatic Column and Row Resizing
Some data values, such as customer names, are of variable length so when you load them
into a worksheet cell, you do not know how wide the column should be before you run
the report. If the column is not wide enough to hold the data, Excel will either display
######## in the cell, or it will only show the section of data that will fit in the cell.
Jet Reports can automatically format the column width or row height for the widest or
tallest piece of data that you want to display. This operation is very similar to the manual
sequence of selecting a column, clicking on Excels Format menu, then selecting "Autofit
Selection". The whole column will resize to fit the widest cell. To do this with Jet, you
can put the keyword "Fit" in row 1 of the column. For example, if you have a list of
customer names in column C, you can put "Fit" in cell C1 to automatically resize the
column for the longest customer name when the report is run. If you want to resize the
height on a row, you can put "Fit" in Column A of that row.
Introducing Automatic Hidden Columns, Sheets and Rows
The NF function uses a record key (returned by the NL function with the blank Field
parameter ) to retrieve fields, but a record key itself does not display useful information
so it may be useful to hide columns that contain record keys. You can use the "Hide"
keyword in Row 1 of any column you do not want displayed, or in column A of any row
you do not want displayed. To automatically hide whole sheets, you can add
"+HideSheet" to cell A1 of a worksheet. When you run the report Jet Reports will hide
the rows, columns or sheets that you have specified.
Often reports are built using calculations that do not need to be shown on the report.
Automatically hidden rows, columns and sheets provide an easy way to hide these
calculations on the final report. In Design Mode , the hidden rows, columns and sheets
are visible so you can make changes to the report structure.
Conditionally Hiding Rows, Columns or Sheets
To conditionally hide a row, put "Hide+?" in cell B1, and use a formula to return "Hide"
in Column B of any row that you want hidden. Please note that this will only work in
column B.
Jet Reports Help
78
You can conditionally hide a column by entering "Hide+?" in cell A2, and using a
formula to return "Hide" in row 2 of the columns you want hidden. As with conditional
hiding of rows, this will only work in row 2.
Similarly, with "Hide+?" in cell A2 you can place a formula in cell B2 that conditionally
returns "HideSheet" in order to hide the entire worksheet. Formulas that conditionally
hide rows, columns, or sheets are typically IF formulas, such as the following.
=IF(C4=0,"Hide","Show")
In the following example, rows are hidden which have 0 in column C.

When this report is run by selecting Jet/Report, it looks like the following.

Notice that rows 3, 5 and 7 are hidden because they have 0's in column C and thus the
word "Hide" in column B.
Grouping and Subtotaling
Since you can create a dynamic list using an NL function, the next logical step is to group
the items in the list. The mechanism for grouping is nested NL functions. When one NL
is inside the region of another, the NL functions are nested. The outer NL function lists
the grouping criteria, and then the inner NL can use the results of the outer NL as a filter.
When you select report mode, the outer NL will evaluate first, inserting copies of its
region for each record and filling in its data values. Once the outer NL has expanded, the
inner NL will expand, making copies of its own region for each of the outer NLs. Jet
Reports evaluates the NL functions from left to right, and top to bottom so if you have
put one NL function that acts on rows in cell D4, and one that acts on columns in cell B5,
Jet Reports will evaluate cell B5 first.
Grouping and Subtotaling Tutorial
Access Northwind Example
A simple example of a grouped list is customers grouped by country. Since customers are
being listed, one good place to start is the Customers table. First, you want to list the
customer detail, then you can worry about the grouping later. If you drag and drop the
CompanyName, Country, and Phone fields from the Jet Browser with the "Rows" option
selected, you will end up with something resembling the picture below.

Creating Reports
79
If you run the report, you will get a complete list of customers. The next step is to group
the customers by Country. The overall idea is that you want to list unique countries, then
use that list as a series of filters for the existing NL that lists customers. To achieve this
goal, drag and drop the Country field into the cell that is one row up and one column to
the left of the existing NL command. In the picture above, the cell you should be
dropping into is cell C3. If you run the report, you will get a list of country names, then a
list of customers as shown below.

Note that the column headers of CompanyName, Country and Phone were all copied in
the region of the NL command. The next step is to change the NL command listing
countries in C3 from "Rows" to "Rows=2", which will nest the two NL commands as
described above. Now when the report runs, Jet Reports will copy rows 3 and 4 for each
country, including the customer list. Finally, you can add a filter to the NL listing
customers to filter by the country cell as pictured below.

If you run this report, you will get a list of countries, then a list of customers under each
country. For aesthetic purposes you can change the What argument in the NL formula in
cell C3 from "Rows=2" to "Rows=3", which will give you one blank row between each
country group.
Navision Cronus Example
A simple example of a grouped list is one listing Customers who have sales along with
their sales grouped by state and subtotaled. Since Customers are being listed, one good
place to start is the Customer table. First you want to list customers who have sales, then
you can worry about the grouping. The Sales ($) flow field works well as a filter field for
this purpose. If you drag and drop the Name, State and Sales ($) fields out of the Jet
Browser with the "Rows" option selected, then edit the resulting NL to filter for Sales ($)
<> 0, you will end up with something resembling the picture below.

If you run this report you will get a complete list of the customers who have sales. The
next step is to group the customers by state. The overall idea is that you want to list
unique states that have customers with sales, then use that list as a series of filters for the
existing NL that lists customers. To achieve this goal, drag and drop the state field into
the cell that is one row up and one column to the left of the existing NL command. In the
picture above, the cell you should be dropping into is cell C3. Next you can add the same
filter field, filter pair as the previous NL command for Sales ($) <> 0. If you run the
report, you will get a list of state names, then a list of customers as shown below.

Jet Reports Help
80
Note that the column headers of Name, State and Sales ($) all got copied in the region of
the NL command. Also note that the first customer state is blank. In this case, the
customers outside the US have a blank state so it is a valid value that should be
preserved.
The next step is to change the NL command listing States in C3 from "Rows" to
"Rows=2", which will nest the two NL commands as described above. Now when the
report runs, Jet Reports will copy rows 3 and 4 for each state, including the customer list.
Finally, you can add a filter to the NL listing customers to filter by the state cell. Since
you could have blank states, you need to pre-pend "@@" to the beginning of the filter so
the formula will look like the picture below.

If you run the report, you will get a list of states, then a list of customers under each state.
The final task is to add a subtotal by state for the Sales ($) field. This can be a simple
Sum function if you don't want a grand total, or a Subtotal function if you do want a
grand total. For the sake of completeness, this example will calculate subtotals and a
grand total. The first Subtotal function goes two rows below the NL listing Customers.
The function should look like the one pictured below.

Note that both rows 4 and 5 are included in the range of the Subtotal function. Next, you
need to expand the Rows=2 of the NL that lists States to include rows 3-6 so the new
subtotal cell will fall into the region that gets copied. For aesthetics, you can include row
7 so we have a blank line between states. The "Rows=2" becomes "Rows=5". Now you
need to add the Grand Total. Since there are 5 rows in the region on the state replicator,
you need to skip row 8 and put the grand total on row 9 as shown below.

Finally, you can run the report and get a complete list of customers who have sales,
grouped and subtotaled by state.
Multi-level Grouping and Subtotaling Tutorial
This tutorial builds on the Grouping Tutorial so if you haven't yet completed it, please do
so before starting this tutorial.
Access Northwind Example
Often you want a report to contain more than one level of grouping. For instance, you
might want to add more detail to the above example by not only grouping the customers
by country but by city as well. The result would be a list of customers grouped by city,
grouped by country. The first thing you need to do is to create room for this intermediate
level of grouping by inserting a column between C and D, and a row between 3 and 4.
Creating Reports
81
You can also move the column headings down to the newly inserted row 4, as shown in
the picture below.

The next thing you need to do is add the formula to insert the list of cities. Open the
Customers table in the Jet Browser, select the "Rows" option, and drag the City field into
cell D4. Note the stair-step pattern of the three NL functions, which is the standard
format for grouped reports. As in the previous example, you must link lists to the
grouping criteria using filters, as shown below.

You will also have to adjust the size of the replicator regions to account for the new level
of grouping (in effect, nesting the NL functions). In order to do this, you have to change
the What argument in the newly added NL function from "Rows" to "Rows=2" and in the
NL function listing countries from "Rows=3" to "Rows=4".
If you run the report as is, you see that the first city under each country is the only one for
which the customer list does not return an error (take Austria as an example). In order to
see the source of the error you must select Jet/Tools/Unhide, select the problem cell and
press the F2 key. This will highlight the cell references that the formula is making (as
seen below) and indicate that you are attempting to use a blank filter.

This is a standard problem when doing a multi-level grouping. What you need to do to
resolve it is to copy the value from cell C3 into column B and down, filling the 4-row
region of the replicator.

Note that you do not want to copy and paste the formula from cell C3, but rather set each
cell equal to the adjacent cell (in cell B3 you have "=C3", in cell B4 you have "=B3",
etc.). Finally, you need to adjust the filter in cell E5 to refer to the value (country) that is
on the same row to ensure you do not lose the cell reference. See the example below.

If you run the report seen above you will obtain a list of customers grouped by country,
grouped by city. Note that you can add as many levels of grouping as you want (for
instance, you could further expand this example by adding order details by customer).
Navision Cronus Example
Often you want a report to contain more than one level of grouping. For instance, you
might want to add more detail to the above example by not only grouping the customers
Jet Reports Help
82
by state but by city as well. The result would be a list of customers grouped by state then
by city. The first thing you need to do is create room for this intermediate level of
grouping by inserting a column between C and D, and a row between 3 and 4. You can
also move the column headings down to the newly inserted row 4, as shown in the picture
below.

The next thing you need to do is add the formula to insert the list of cities. Open the
Customer table in the Jet Browser, select the "Rows" option, and drag the City field into
cell D4. Note the stair-step pattern of the three NL functions, which is the standard
format for grouped reports. Just as you did in the previous example, you must link the list
(cities, in this case) to the grouping criteria (the state) using a filter, as shown below.

You should also add the filter for Sales ($) <> 0 to your City NL function. Just as you did
before, you will we have to adjust the size of the replicator regions to account for the new
level of grouping (in effect, nesting the NL functions). In order to do this, you have to
change the What argument in the newly added NL function from "Rows" to "Rows=2"
and in the NL function listing states from "Rows=5" to "Rows=6". You do not need to
adjust the subtotal (you will still do a subtotal by state). Since you have increased the size
of the outermost region, you will have to move the subtotaling region of the grand total
function down one row. This will allow for the anchor row, as shown in the picture
below.

If you run the report as is you see that the first city under each state is the only one for
which the customer list does not return an error (except in the case of the state values that
do not exist which is a special case). In order to see the source of the error select
Jet/Tools/Unhide, select cell E9, and press the F2 key. This highlights the cell references
that the formula is making and indicates that the cell is attempting to use a blank filter.
This is a standard problem when doing multi-level grouping. What you need to do to
resolve it is to copy the value from cell C3 over into column B and down, filling the 6-
row region of the replicator, as shown below.

Note that you do not want to copy and paste the formula from cell C3, but rather set each
cell equal to the adjacent cell (in cell B3, "=C3", in cell B4, "=B3", etc.). Next, you need
to adjust the filter in cell E5 to refer to the value (state) that is on the same row to ensure
you do not lose the cell reference. Finally, add a filter to the NL formula in E5 to group
the customer lists by not only the state but also the newly inserted city as well. See the
example below.
Creating Reports
83

For aesthetic purposes, you may also want to hide column B. If you run the report above
you will obtain a list of customers grouped by state then by city as stated in the goal.
Note that you can add as many levels of grouping as deemed necessary (for instance, you
could further expand this example by adding order details by customer).
Performance and Convenience
Introducing the NP Function
Sometimes you need to do certain utility tasks such as formatting a date range, evaluating
a formula or doing array calculations. The Jet Utility function, NP, will do these tasks for
you. The following example formats a date range from 1/1/04 to 12/31/04.
=NP("DateFilter","1/1/04","12/31/04")
This above function will return 1/1/04..12/31/04. The first argument tells Jet that this NP
function will create a date filter that can be used by an NL function. The second argument
is the start date of the filter, and the last argument is the end date of the filter.
The next example evaluates the volatile Now() function, preventing it from slowing down
your report.
=NP("Eval","=Now()")
The above formula will return the current date and time. The first argument tells Jet that
this NP function will evaluate a formula. The second argument is the formula to evaluate.
See the Evaluating Formulas section for more details.
The following example takes the intersection of two arrays.
=NP("Intersect",{"1","2","3"},{"2","3","4"})
The above formula will return {2, 3}. The first argument tells Jet that this NP function
will return the intersection of two arrays. The second and third arguments are the arrays
for which to find the intersection.
Evaluating Formulas
There are some cases where you want to evaluate a formula only once each time you run
your report. A good example of this is the Now() function. You generally want the Now()
function to run once when you update the report, and otherwise remain inert. If Now() is
allowed to behave normally, it will cause the sheet it is on, including Jet formulas, to
recalculate constantly, resulting in a major performance problem.
Jet Reports Help
84
You can use the NP function to control when a formula updates by putting "Eval" in the
What parameter. The formula you want to evaluate, including the "=" sign goes in the
Arg1 parameter and must be in quotes. If you are evaluating a formula that already has
quotes inside it, then Excel requires you to use two sets of quotes instead of one. Some
examples are listed below.
This following function will calculate Now() once each time the report updates.
=NP("Eval","=Now()")
The function below calculates a date filter for the current month without using
NP("Eval").
=NP("Datefilter",Date(Year(Now()),Month(Now()),1),Date(Year(Now()),Month(Now())
+1,1)-1)
However, the formula above uses the Now() function liberally, so you should put it inside
an NP("Eval") formula and change "Datefilter" to ""Datefilter"" with two sets of quotes
as in the following formula.
=NP("Eval","=NP(""Datefilter"",Date(Year(Now()),Month(Now()),1),Date(Year(Now())
,Month(Now())+1,1)-1)")
Note that you should place any volatile Excel function (i.e. NOW() and TODAY())
directly inside the NL("Eval") to avoid constant recalculation, even if the volatile
function has no other dependent cells. A cell reference is not sufficient. For instance,
=NP("Eval","=NOW()") will only be calculated once with each run of the report, whereas
=NP("Eval","=B4"), where B4 contains a volatile function, will still be constantly
recalculated.
Evaluating Off-sheet References
The NP ("Eval") function can evaluate any Excel function including cell references. The
formula below displays the value in cell C5.
=NP("Eval","=C5")
This application of the Eval function can improve your report execution time if you have
an Options sheet. When your report runs, any cell which has a dependency on a cell that
has changed will be recalculated. Unfortunately, when cells have dependencies that
extend outside their sheet, Excel does not know when that external reference may have
changed so it will recalculate the formula every time the current worksheet changes. Jet
Reports changes worksheets many times over the course of evaluating a report causing
Excel to recalculate any formula that has off-sheet dependencies. You can eliminate this
unnecessary recalculation by using the NP("Eval") function to bring the values from off-
sheet references onto the local worksheet, then change your cell references to only use
the local cell where you have the NP("Eval") function.
Creating Reports
85
When you need to reference cells on other worksheets inside your workbook, you can use
the same formula only with the worksheet name followed by an "!" as part of your cell
reference. The following Eval function will display the value from C5 of the worksheet
named "Options".
=NP("Eval","=Options!C5")
If the cell you are trying to reference is on a worksheet that has a space in its name you
need to wrap the worksheet name in single quotes as in the following formula.
=NP("Eval","='Options Page'!C5")
Named ranges with NP("Eval")
NP("Eval") can be used with named ranges as well as cell references (see the Useful
Excel Features section for information on Named Ranges). So assuming you named cell
C5 on your Options worksheet "DateFilter", you can use the cells name as if it were a
normal cell reference without the worksheet or workbook name as in the following
formula.
=NP("Eval","=DateFilter")
If you had a Profit and Loss report, you would probably have a changeable Start Date and
End Date on the Options page with cell references on a Detail page and a Summary page.
Instead of having many cell references to the Options page, you could name the cells
StartDate and EndDate respectively, and use the following two formulas to bring the data
in the two cells onto the Detail and Summary pages.
=NP("Eval","=StartDate")
=NP("Eval","=EndDate")
If you put these two formulas in cells B2 and B3 respectively, you can then use local cell
references to B2 and B3 for your filters, eliminating a large amount of Excel calculation
overhead when reporting.
Using NL("Sheets") with NP("Eval")
The NP("Eval") function will work to reference an Options page from a worksheet that is
replicated with NL ("Sheets"). However, it may behave unexpectedly when it is used to
reference a cell on the same sheet as the NL("Sheets") formula. Therefore using an
NP("Eval") formula on a sheet with an NL("Sheets") to reference cells that are on that
same worksheet is not recommended.
Improving Report Performance
In order to speed up the run-time of your reports, follow these guidelines.
Jet Reports Help
86
Apply filters in Jet Reports that will match a key that is already in your Navision
Database . Also, if you are applying sorts in your formulas, make sure the order of
the sort fields is the same order as a Navision key.
Whenever possible, use NL functions to retrieve record keys rather than unique
values, then use the NF function to obtain field values from those record keys.
When filtering across tables, be sure to choose either NL("Filter") or "Link="
appropriately (see "Filtering Based On Data from Another Table").
Avoid making frequent off sheet cell references. If you find yourself doing this,
bring the values over to the current sheet using NP("Eval") and refer your Jet
formulas to the copied values instead.
Avoid bringing large amounts of data into a spreadsheet and using conditional
hide to eliminate the data you do not want to see. In many cases, using an
appropriate filter will eliminate the data you do not want to see.
Using the NL function for "Rows" or "Columns" and specifying a Field can be
very slow when working with large tables because Jet Reports must examine
every record to find the unique values. If there is a table that holds unique values
of the field you are interested in, it is sometimes better to use that table. You can
use Link= to a larger table to only bring back the desired values.
Avoid using volatile Excel function like NOW() and TODAY(). If you do use
them, make sure they are "wrapped" inside an NP("Eval") function, i.e.
=NP("Eval","=NOW()"). This will avoid constant recalculation.
Avoid inserting manual page breaks into your reports.
Avoid using Excel "Grouping" (also known as "Outline") functionality.
Canceling Long Calculations
If a worksheet calculation takes longer than two seconds, Jet Reports will display a status
window with calculation information in it. If you want to abort the current calculation,
you can click the Cancel button. If Excel is in the middle of a calculation, the cancel
button can be slow to respond, but when Excel is finished with the calculation, the report
will stop refreshing and the uncalculated cells will display #VALUE.
Useful Excel Features
Addressing Modes
Excel has three addressing modes: relative, absolute and mixed. Absolute addresses will
reference the same cell no matter where the reference is moved or copied in a worksheet.
For example, when you copy the formula =$A$3 from B3 to C5, it will still read =$A$3.
A relative address will reference the same cell in relation to any cell where it is copied.
For example cell B3 is one cell to the right of A3, so when you copy the formula =A3
from B3 to C5, it will now read =B5. Mixed mode addressing contains one relative
coordinate and one absolute coordinate, for example $A3 or A$3. Mixed mode
addressing is extremely useful for quickly generating reports using NL and NF functions.
There are several examples of the use of mixed mode addressing in the Spread Company
Income Statement example report that comes with Jet Reports.
Creating Reports
87
Charts
When creating an Excel chart, make the range for the chart one row or column larger than
the row or column containing the NL ("Rows") or NL("Columns") function and hide the
extra row or column. For some types of charts, it is easier to put some sort of dummy
label and value in the hidden row or column. "Graph Anchor" is a good dummy label and
zeros are good dummy values. Most charts will not include data from hidden rows or
columns. See the Customer Sales Report example workbook for a sample of charts with
Auto Rows and Columns.
AutoCorrection
Though Excels AutoCorrect feature can be very helpful at times, it can also be a bit of a
nuisance when it comes to formatting. For instance, assume that cell B2 is formatted as
currency and B3 is formatted as a percentage. In cell B4 you type "=B2*B3" in order to
obtain the product of the two values. With Excel AutoCorrection turned on, the cell is
automatically formatted as currency. Though this may typically be what is desired, in this
instance you would like to apply the accounting format to the product. Excel will allow
you to do this temporarily, but when the cell is recalculated, AutoCorrect changes it back
to currency. This becomes a problem when a replicator expands because during the
expansion a recalculation occurs throughout the entire workbook. This may cause you to
think that Jet Reports is reformatting your workbook, when in fact it is the Excel
AutoCorrect feature.
If you find yourself in this situation, you can attempt to turn off this feature by selecting
"Tools/AutoCorrect Options" in Excel. Select the "AutoFormat As You Type" tab and
make sure the "Include new rows and columns in list" check box is deselected. Please
note that for certain types of formatting there is nothing that can be done about Excel
reformatting.
Dates
Five date related functions in Excel make working with dates much easier. The functions
are as follows.
=Date(Year, Month, Day)
=Day(Date)
=Month(Date)
=Year(Date)
=Text(date, format)
Jet Reports Help
88
To find the first day of the month from a date entered in D4, you could enter the
following formula.
=Date(Year(D4), MONTH(D4), 1)
Since dates are stored in Excel as integers, you can find the last day of the month from a
date entered in D4 with the following formula.
=Date(Year(D4), MONTH(D4)+1, 1)-1
Since you can disassemble a date easily into the year, the month and the day, it is also
easy to calculate the start of the year for the date in D4 with the following formula.
=Date(Year(D4), 1, 1)
If your fiscal year started in July instead of January, the formula is similar. The IF
formula in the Year parameter of the following formula determines, in this case, if the
start of the fiscal year is the same as the calendar year (i.e. Sept 6, 2003 is in the 2003
Fiscal Year), or if you need to subtract 1 from the calendar year (May 15, 2003 is in the
2002 Fiscal Year).
=Date(If(Month(D4)<7,Year(D4)-1, Year(D4)),7, 1)
To build a date range from two dates, use the NP ("DateFilter") function. If the start of
the month was in cell D4 and you wanted to calculate a filter for the whole month, the
formula for the date range would be:
=NP("DateFilter",D4, Date(Year(D4), MONTH(D4)+1,1)-1)
The function above looks complicated, but it is just an NP function with the end of month
formula previously listed.
Named Ranges
Any range in Excel can be associated with a name that can be used to reference that range
anywhere in the workbook. Naming ranges are particularly useful if you are referencing a
particular cell, such as a Start Date on the Options sheet, in several worksheets. Entering
a name like "StartDate" in the Name Box in the upper left corner of the Excel screen
makes referencing the date cell much easier as you design the rest of the report. You must
press Enter after typing in the name, or Excel will not save it. There is one caveat to using
Named Ranges which occurs when you are nesting formulas as parameters for other
formulas. An example of this is the If statement below that outputs "More" if the sum of
B5:B10 is greater than 10 and "Less" otherwise:
=If(Sum(B5:B10)>10,"More","Less")
Creating Reports
89
The cell references in the above formula cannot be named ranges, they have to be cell
references like they are now since the Sum formula is nested in the If formula. However,
you could still use a named range if you used another cell for the Sum formula and had
the if statement reference that cell.
Now() and Today()
The Now() and Today() functions are called volatile functions and can cause problems in
Jet Reports because they recalculate each time there is a change in the worksheet. Jet
Reports makes large numbers of changes to the worksheet while it runs and each of those
changes can cause a recalculation of the entire worksheet if you have a volatile function
on the worksheet. To avoid issues with volatile functions, use the NP ("Eval") function.
Protected Worksheets
If you protect a worksheet in a workbook using the Excel Protect Sheet feature, Jet
Reports will not be able to generate a report. Jet Reports will automatically protect
locked worksheets (worksheets that have Auto+Report+Lock in cell A1 and Jet Reports
formulas on them) after a report is generated and will automatically unprotect locked
worksheets with Jet/Design. Please see Introducing Report Viewers for more details.
Sums from Auto Rows and Columns
To compute a sum of a column for rows that are automatically inserted by an NL
("Rows"), you can use the =SUM([range]) worksheet function. The sum range should
include the rows that the NL formula will copy plus one extra row. Excel will
automatically expand the sum functions range to include all the inserted rows. For
example if the NL("Rows") formula were on row 10 and you wanted to sum column D,
you could put a sum formula in D12 of =SUM(D10:D11). If you do not want the extra
row to show on the report, you can use the Hide feature.
Likewise, to sum values added by an NL("Columns"), the sum range should include the
columns that the NL formula will copy plus one extra column. For example, if the
NL("Columns") function were in column E and you wanted to sum the values in row 12,
you could put a sum formula in column G of =SUM(E12:F12). Again, if you do not want
the extra column to show, you can hide it.
When using nested NL functions to group information, you can compute the subtotals
and grandtotal of a column using a SUBTOTAL function. The same sum range rules
detailed above should be used for each of the nested SUBTOTAL functions. There are
two parameters to the SUBTOTAL function, the function number and the calculation
range. The SUBTOTAL function can calculate the average, count, max, min, product,
standard deviation, sum or variance of a cell range so the first parameter tells
SUBTOTAL which operation to perform. The most common use is calculating a sum,
which is function number 9. The formula for calculating a sum of cells B5 through B10 is
shown below.
Jet Reports Help
90
=SUBTOTAL(9,B5:B10)
The Excel Help has the rest of the details for the SUBTOTAL function.
Advanced Database Issues
Building a Report From Multiple Databases
If you want to build a report that uses multiple databases of any type, you need to create a
data source for each database. Check the installation manual to find information on
configuring data sources. Once your data sources are configured, you can specify
separate connections in both the NL and the GL functions. You can change the
connection that the NL function uses by specifying "DataSource=" as a filter field and the
data source name as a filter. The Jet Browser will do this automatically if you are
dragging and dropping from a data source that is not the default. The GL function has a
separate parameter that will accept the data source name. The following example sums
the amounts from Purchase Invoice number 1000 from both a Navision database and a
Northwind Access database.
=NL(1,"Purch. Inv. Header", "Amount", "No.", "1000", "DataSource=", "Navision") +
NL(1,"Orders","Amount","OrderID","1000","Connection=","Northwind")
In the preceeding example, there is a data source named Navision that connects to a
Navision database and a data source named Northwind that connects to the Northwind
Access database. An important point to notice is that if you and a colleague both use the
same report, you need to name your data sources the same thing or else make the data
source name an option on the options sheet..
Databases with Multiple Schemas
Some databases such as Microsoft SQL Server and Oracle group objects such as tables
and records by the owner (or group of owners) of the object. This logical grouping is
called a schema and it can be used to restrict which tables a user can access. In many
SQL Server databases, the DBO user is the owner of all database objects so "DBO" is the
only schema name in the database. Oracle databases generally have a schema per user
along with multiple administrative schemas.
Jet Reports will obtain the default schema for your user from your server and unless your
database has multiple schemas, you will not need to override that default. If you do need
to override the default schema, you can specify the schema with the Schema= keyword.
The Schema= keyword goes in a Filter Field parameter of the NL function and the
schema name goes in the following Filter parameter. For example, to access all records in
a table named Customer that are owned by the SYSTEM user group, you would use the
following NL function:
=NL("Rows","Customer",,"Schema=","SYSTEM")
Creating Reports
91
This topic does not apply to Navision users.
Navision Codes and No.'s with Special Characters
Characters used in Navision filters like "&","|", and ".." should not be used as values in
Code or No. fields. In addition, you should not use blank Codes or No.'s. Using blanks or
special characters in your Code or No. fields will cause problems with reporting and
filtering in both Navision and Jet Reports. Fortunately, it is rare to find blanks or special
characters in Code or No. fields.
When field values contain filter characters like "&", you must put the field values in
single quotes to use them in a filter. For example, if customer IDs have embedded "&"s
you can filter on the customer ID as follows.
B2: =NL ("Rows","Customer","No.")
B3: =NL(,"Customer","Name","No.","'"&B2&"'")
Note the customer number is in a formula that surrounds it with single quotes:
"'"&B2&"'". This causes Navision to consider any embedded special characters as part of
the field value.
This information is only necessary for Navision users.
Multiple Local Navision Database Connections
If you attempt to use more than one local database connection in a workbook that use the
same Navision client, you will see #VALUE for the results of one of them. When you use
Debug, the function may calculate correctly. This is because when you run Debug, Jet
closes all other local database connections to analyze the cell you have selected. The
#VALUE occurs because each workbook can only have a single local database
connection open at a time for a particular Navision client. You can include data from
multiple server database connections on the same workbook with no problems. You can
also include data from multiple local Navision databases if they are accessing different
Navision clients or a different copy of the Navision client.
Only Navision users need to worry about multiple local database connections.
Navision Advanced Dimensions
If you have the Navision Advanced Dimensions granule, you can use a dimension code in
the Field or FilterField arguments of the NL function with tables that have advanced
dimensions. Jet Reports creates "virtual fields" for each of the dimension codes.
Since advanced dimensions are stored in secondary tables, this feature greatly simplifies
writing reports with Advanced Dimensions. Because the data must be retrieved from two
Jet Reports Help
92
tables, using Advanced Dimensions might take longer than using fields that are in the
same table.
Jet Reports will add virtual fields for dimension codes to custom tables if the custom
tables are designed just like the standard tables using the same secondary tables to store
advanced dimensions and the same field numbers and key structures.
Virtual fields for dimension codes will not be visible in the Jet Browser field lists.
If you have created an Advanced Dimension with the same name as a field in the table
from which you are pulling data, Jet Reports will use the field in the table rather than the
Advanced Dimension. An example of this occurs in the Cronus database that ships with
Navision. In the Sales Line table (table 37) there is a field named Area (field 82). In the
same database, there is an Advanced Dimension named Area. If you use "Area" in an NL
or NF function that references the Sales Line table, Jet Reports will use the Area field
from the Sales Line table rather than the Advanced Dimension named Area. The simplest
fix for this problem is to rename the Advanced Dimension. If you do not want to rename
the Advanced Dimension, you will have to pull the data out of the table that stores the
Dimension Entries instead.
Advanced Dimensions are only available under Navision.
Local Navision Databases
You cannot open a local Navision database both with the Navision client program and
with Jet Reports at the same time. You may get an error message that a file cannot be
created if you attempt this. As long as you have sufficient concurrent users in your
license file, you can open a database that is on a server by Navision clients and Jet
Reports at the same time.
Only Navision users have to worry about this issue.
SQL=
SQL= is a power feature for the Universal Connector to allow absolutely any data to be
retrieved from any database. This feature is intended for advanced users only. This
section is not intended to teach you SQL, but only to show you how to use the SQL=
feature.
SQL= allows you to use SQL queries directly in the NL function while having Jet
Reports' user-friendly filtering capabilities. This allows you to create rows, columns or
sheets from SQL queries and to use cell references for user editable filters that will be
converted into SQL filters and placed in your SQL query. This function allows you to do
complicated SQL Joins that are not possible using the current Jet Reports Universal
connector. It also allows you to make the SQL server do the work of sorting the resulting
data.
Creating Reports
93
SQL= Example
Please note that the table/field names and date ranges in this example will work with
Great Plains 8.0.
In Great Plains, many tables store a G/L account index instead of the actual G/L account
number. Users want to sort by the G/L account number. In SQL, you could join two
tables to produce this result. The SQL statement might be something like the following.
"SELECT ACTNUMST, IVIVINDX
FROM IV30300 LEFT JOIN GL00105 ON IVIVINDX = ACTINDX
WHERE DOCDATE BETWEEN '2004-01-20' AND '2004-01-31'
ORDER BY ACTNUMST, IVIVINDX"
This query returns a list of G/L account numbers and the G/L account index for accounts
to which inventory have been expensed during the last 11 days of January, 2004, sorted
by the G/L account number. The corresponding SQL= statement is as follows.
"SQL=SELECT DISTINCT ACTNUMST, IVIVINDX FROM IV30300 LEFT JOIN
GL00105 ON IVIVINDX = ACTINDX WHERE %Filter1% ORDER BY %Sort%"
Notice that %Filter1% will be replaced by Jet Reports filters in the NL function. You
must put "ORDER BY %Sort%" if any of your NL function filters does a sort that you
want to affect the SQL statement. You can put this statement in a separate cell, say C5,
and use a cell reference as the NL table parameter . The "SQL" "What" parameter is used
to illustrate the resulting SQL query. You can put "Rows" as the "What" argument to
return the actual rows.
=NL("SQL",$C$5,"ACTNUMST","1S=DOCDATE",C18,"+1S=ACTNUMST","*","+1S
=IVIVINDX","*")
Note that even though there are multiple filter fields/filters, you only need a single
%Filter1% replacement string since there is only one WHERE clause. If you had Sub
queries or Joins that had additional Where clauses, you would need to use multiple
%FilterX% replacement strings if the fields and filters did not match in the two tables.
SQL= is not available for a Navision connector.
Updating Navision Drilldown Forms
The drilldown forms in Jet Reports match the relationships between tables and drilldown
forms for the objects in Navision. If a table does not have a drilldown form, drilldown for
that table will not be available. The default drilldown forms will work for most default
tables in Navision. However, if you have added tables or changed the default drilldown
Jet Reports Help
94
forms, you need to update the Jet Reports drilldown forms. Jet Reports stores the
drilldown forms separately for each data source. If you have more than one data source
you need to update each one.
In some cases, you might need to add a drilldown form and then update the
corresponding table since not all tables in Navision have drilldown forms. After you are
satisfied with all the drilldown form/table relationships in Navision, export the table
definitions to a text file. You might not be able to export all tables to text due to license
restrictions. You must export all the tables that you want to change. Every time you
update drilldown forms, all previous changes you have imported are deleted. So each
time you export tables in order to update drilldown forms, make sure to include all the
tables that you need to drilldown into.
After the tables are exported, open Excel and go to Jet/Data Sources. Select
Tools/Update Drilldown Forms, select the exported text file, and click Update.
In order to perform the operations described above, follow the following procedure.
In Navision:
1. Please note that due to the Navision granule needed to export objects as text, this
will probably have to be done by a Navision provider. End users usually do not
have the necessary granule in their Navision license.
2. Open Navision and select Tools/Object Designer.
3. Select the table for which you would like to update the drilldown form, and click
Design.
4. Scroll to the bottom of the list of fields and select the first line that does not
currently contain data.
5. Select View/Properties, then click on the Value field for the DrillDownFormID
Property.
6. Click on the up arrow, and select the appropriate form.
7. Close the Properties window and the Table Designer, and select Yes when asked
if you would like to save.
8. With the name of the updated table still selected, select File/Export.
9. In the Save as Type drop-down menu, select Text Format.
10. Save the file to the directory of your choice.
In Jet Reports:
1. Open Excel and go to Jet/Data Sources.
2. Go to Tools/Update Drilldown Forms..
3. Under Navision Object Text File, select the .txt file that you have just exported
from Navision.
4. Click the Update button.
5. Click OK to close the Jet Data Sources.
Creating Reports
95
You should now be able to drill down from your Jet Report.
This topic is only relevant for Navision connectors.
Blank Spaces in Database Fields
Some databases, including Great Plains, store text data in fixed length fields. One
example of a fixed length text field is the Customer Name in Great Plains. Great Plains
defines this field as 25 characters and if you put a short name like Bob into the customer
entry screen, Great Plains will store Bob in the database as Bob followed by 22 spaces. In
Great Plains, and most other databases that store their text fields at a fixed length, the
application interface will conceal the blank spaces from you. If you filter for "Bob",
Great Plains will find the customer "Bob " even though there are 22
spaces after the name and you did not enter "Bob*" as the filter. Great Plains will also
display this username as "Bob", trimming the trailing spaces so you never see them.
Jet Reports can provide an equivalent translation between text values and filters if you
activate the "Trim trailing spaces from text fields" option under Jet/Data Sources. We
recommend that Great Plains users activate this option. It may also be useful for other
database types depending on how the database application represents empty space. This
feature is not available when using ODBC drivers unless the Data Source is of type Great
Plains. Please note that enabling this option may incur a slight performance hit to the run
time of reports, depending on the size of the database and number of text values that are
affected.
Navision users do not need to worry about Blank Spaces in their database fields.

97
The Jet Reports User Interface
Introducing the Jet Reports Menu and Toolbar
Microsoft Office 2000-2003
Jet Reports adds a new menu selection to the main Excel menu bar and a new toolbar.
Microsoft Office 2007
Jet Reports adds a new Jet Ribbon option to the Office 2007 ribbon.
Design, Report, and Refresh
You can choose between Design mode and Report mode. Design mode is used to create a
report. Report mode is the result of running the report against your database. In Design
mode, hidden rows and columns are visible and any rows that the NL or GL functions
have automatically created are deleted, allowing you to easily work on the design of your
report. Also, Jet function results are optimized for speed in Design mode and are not
guaranteed to bring back the correct results. Formula results are also cached for speed.
In Report mode, rows, columns and sheets are automatically created and populated with
correct data, and hidden rows and columns are hidden. Although many reports can be
created without hidden or automatic rows, columns, or sheets, these modes add power
and convenience to Jet Reports and the data values returned will be correct.
Refresh can also be used to enter Report mode. Refresh clears all cached formula results,
which may make the report run take longer, but will guarantee that the most current
database results are returned.
Purge Cache
Purge Cache clears all cached formula results, which will guarantee that the most current
database results are returned the next time functions are calculated.
Unhide
Unhide makes all hidden rows and columns in all worksheets of the current workbook
visible. This can help diagnose problems in Report mode by showing the results of
calculations that are in hidden rows and columns.
Unlock
Unlock will unprotect all worksheets and restores locked Jet Formulas without reverting
to Design mode and losing the values on the report. This is helpful if you are using
Jet Reports Help
98
Auto+Hide+Lock to lock a worksheet and have a problem that you need to diagnose. See
Introducing Report Viewers for more details.
Jfx
This starts the Jet Insert Function Wizard. See the section Introducing the Insert Jet
Function Wizard (Jfx) for more details.
Reports Wizards
Classic Wizard starts the Classic Report Wizard. See the section Introducing the Classic
Report Wizard for more details.
Multi-Table Wizard starts the new Multi Table Report Wizard.
Browser
Browser opens the Jet Browser. See Introducing the Browser for more details.
Drilldown
Drilldown opens a window in Navision and displays the records used to calculate the
formula in the active cell. To use drilldown, select a cell containing an NL, GL, or NF
function, then select Drilldown from the menu. In design mode, you can use Drilldown to
make sure you are selecting the correct Navision records. Similarly, in report mode you
can use Drilldown for data analysis.
Drilldown opens a Data Grid window and displays the records used to calculate the
formula in the active cell. To use drilldown, select a cell containing an NL or NF
function, then select Drilldown from the menu. In design mode, you can use Drilldown to
make sure you are selecting the correct records. In report mode, you can use Drilldown
for data analysis.
With Great Plains or Universal connectors, drilldown opens a Data Grid window and
displays the records used to calculate the formula in the active cell. To use drilldown,
select a cell containing an NL or NF function, then select Drilldown from the menu. In
design mode, you can use Drilldown to make sure you are selecting the correct records.
In report mode, you can use Drilldown for data analysis.
With Navision, drilldown opens a window in Navision and displays the records used to
calculate the formula in the active cell. To use drilldown, select a cell containing an NL,
GL , or NF function, then select Drilldown from the menu. In design mode, you can use
Drilldown to make sure you are selecting the correct Navision records. Similarly, in
report mode you can use Drilldown for data analysis.
Debug
The Jet Reports User Interface
99
Debug helps diagnose problems. If you make a mistake in entering a Jet Reports formula,
you may see #VALUE as the result. Select the cell and choose Debug. If Jet Reports can
identify the problem in your formula, it displays a message.
Tools
Tools allows you to build embedded functions quickly and easily. Using the Quote or
Quote Global option, you can convert the format of a formula in a cell to a string. Using
the Unquote option, you can convert the string back to a formula.
Schedule
Schedule allows you to schedule a report or a batch of reports to be run at a future time.
See Introducing the Jet Scheduler for more information.
User Data
User Data provides you with options to manipulate Stored Viewer Data in Reports.
Upload allows you to upload your stored viewer budgets to Navision. To do this, you
must install the Navision budget import form. For more information on the Navision
budget import form, contact Jet Reports.
Purge Then Report purges any data that you have stored for this particular workbook,
then runs the report. Data is stored on a per workbook basis, so only the stored data for
the particular workbook you have open will be deleted.
Purge Then Refresh purges any data that you have stored for this particular workbook,
then refreshes the report.
Purge Then Design purges any data that you have stored for this particular workbook,
then enters design mode.
Settings
Settings allows you to change Jet Reports settings. See Settings for more information.
Data Sources
Data Sources allows you to configure Jet Reports data sources. See Data Sources for
more information.
Data Source/Company Quickswitch
The Jet Reports toolbar and ribbon now display the default data source and company.
You can also click the drop down arrows to select a new default data source or company.
Jet Reports Help
100
You may find this feature useful if you frequently switch your default data source or
company. You can disable it in the Settings if you choose.
Help
This options opens the Jet Reports HTML Help.
About
About shows you information about the currently installed version of Jet Reports.
Jet Reports Keyboard Shortcuts
The following Jet Reports keyboard shortcuts are available:
Shortcut Available in Behavior
F1 Jfx, Lookup, Report
Wizard, Browser,
Scheduler, Report Options
Displays context sensitive HTML Help
F4 Jfx When an Excel cell reference is selected,
toggles the cell addressing mode.
F6 Jfx, Report Wizard, Report
Options
Displays the database lookup window


101
Sharing Reports Created with Jet
Reports
Introducing Report Viewers
A report Viewer is an Excel user that has Jet Reports installed but is not licensed to
design reports. A report Viewer is allowed to change report options and use Jet/Report
but may not use any other Jet Reports features. A report Viewer may not enter Jet
functions into cell formulas or make any changes to the report design.
To design reports that a Viewer can use, you must do one of two things: lock all
worksheets that contain Jet formulas or convert the Jet formulas to values.
Introducing Locked Worksheets
Locking a worksheet prevents Viewers from accidentally changing the formulas. When
you select Report mode in a workbook with locked sheets, Jet saves all formulas to a
hidden worksheet and does not recalculate them when the workbook opens. You create a
locked worksheet by entering "Auto+Hide+Lock" in cell A1. The worksheet will be
locked after the report is generated with Jet/Report and can be unlocked (by a licensed
Designer) with Jet/Design.
If you want to create a report that Viewers can use, you should create an Options
worksheet that is not locked. The Options worksheet should be used for all the report
options, such as the dates, that might change. This worksheet cannot contain any Jet
formulas except NL(Lookup). The actual report should be on other worksheets which
must have "Auto+Hide+Lock" in cell A1. You must choose Jet/Report to lock the
formulas and then save the workbook before giving it to Viewers.
Introducing Viewer Editable Worksheets
If you would like to design a report that Viewers can use without locking any of the
worksheets, you can instead convert the Jet formulas on the workbook to values. You do
this by placing "Auto+Hide+Values" in cell A1 of any worksheet. Upon doing this, all Jet
Reports formulas will be converted to values while all other Excel formulas will remain
intact and the worksheet will be editable (although changes will be lost when the report is
re-run). The Jet formulas can be restored (by a licensed Designer) by selecting
Jet/Design.
Sharing Reports with Excel Users Who Don't Have Jet Reports
In the previous two sections we introduced the +Lock and +Values keywords, which
allow Jet Reports Viewers to use your reports. Both of these features are also useful for
Jet Reports Help
102
allowing people to view reports who use Excel and do not have Jet Reports installed, but
+Values does not lock the report so the person receiving the report can edit it.
Introducing Report Options with Database Lookup
Suppose you wanted to give your report viewers the option to select specific values from
the database on the Options sheet. Previously, you couldn't do this unless you manually
typed the values onto the Options sheet. Now you can use the Database Lookup feature
to do that automatically and even hide the Options sheet from Viewers.
Navision Cronus Example
Suppose you have an Options sheet with filters for start date, end date, G/L account
number, customer number, and company. It might look like the following.

First, to tell Jet Reports which rows contain options, you must type "Option" in column A
to the left of each filter option like the following.

Next, type "Title" in row 1 above the column that contains the titles of your options and
"Value" above the column that contains the filters you are using in the report sheet(s).

In order for Jet Reports to know where the data is in the database, you must write NL
functions with "Lookup" as the What argument. These NL functions will simply return
all the values that you want viewers to be able to select as filters, so you can filter data
just like you would in any other NL function.
To look up dates in Navision, you can use the Date table. Your NL functions for start
date and end date might work like the following if you wanted to use months as your
period type and wanted to give viewers the option to select months between 2000 and
2001.
=NL("Lookup","Date","Period Start","Period Type","Month","Period
Start","01/01/00..12/31/01")
=NL("Lookup","Date","Period End","Period Type","Month","Period
End","01/01/00..12/31/01")
You must create another column in your Options sheet with "Lookup" in row 1 and the
lookup formulas across from each option like the following.
Sharing Reports Created with Jet Reports
103

You might want to give viewers the option to select any G/L account number or customer
number like the following.

Finally, when users select a company, you may want to give them a note that they can
only select 1 company at a time. You can do this by adding a Filter Field to your NL
function called "Headers=" and typing the message you want in as the Filter argument
like the following.
=NL("Lookup","Company","Name","Headers=","Only select 1 company at a time")

Now when you go Jet/Report a Report Options window will be displayed. You can type
filter values into the Filter column, or if you click the arrow to the right of each filter, you
will get a Lookup window with the values returned from the database by the
NL("Lookup") formula. Notice that if you click the arrow next to the Company, the
header at the top of the Filter Lookup window gives the message that you typed into the
Headers= Filter in the NL("Lookup") formula.
Using this method to set report options, you can actually hide the Options sheet itself
from viewers by adding +HideSheet to cell A1.
Access Northwind Example
Suppose you made an Options sheet for a report that is returning orders. You might
include customer name, City, State/Country, and Date like the following.

First, to tell Jet Reports which rows contain options, you must type "Option" in column A
to the left of each filter option like the following.

Next, type "Title" in row 1 above the column that contains the titles of your options and
"Value" above the column that contains the filters you are using in the report sheet(s).

In order for Jet Reports to know where the data is in the database, you must write NL
functions with "Lookup" as the What argument. These NL functions will return all the
Jet Reports Help
104
values that you want viewers to be able to select as filters, so you can filter data just like
you would in any other NL function.
The functions for customer name, city, and state/country are pretty simple. They can be
created like the following.

When viewers select a date, you may want to give them a note that they are actually
filtering on ship date, not order date. You can do this by adding a Filter Field to your NL
function called "Headers=" and typing the message you want in as the Filter argument
like the following.

Now when you go Jet/Report a Report Options window will be displayed. You can type
filter values into the Filter column, or if you click the arrow to the right of each filter, you
will get a Lookup window with the values pulled from the database by the NL("Lookup")
formula. Notice that if you click the arrow next to the Date, the header at the top of the
Filter Lookup window gives the message that you typed into the Headers= Filter in the
NL("Lookup") formula.
Using this method to set report options, you can actually hide the Options sheet itself
from viewers by adding +HideSheet to cell A1.
Great Plains Fabrikam Example
Suppose you are creating an Options sheet for a P&L Statement. You might want filters
for revenue accounts, cost of good accounts, expense accounts, years, and periods. You
could set that up like the following.

First, to tell Jet Reports which rows contain options, you must type "Option" in column A
to the left of each filter option like the following.

Next, type "Title" in row 1 above the column that contains the titles of your options and
"Value" above the column that contains the filters you are using in the report sheet(s).

In order for Jet Reports to know where the data is in the database, you must write NL
functions with "Lookup" as the What argument. These NL functions will return all the
Sharing Reports Created with Jet Reports
105
values that you want viewers to be able to select as filters, so you can filter data just like
you would in any other NL function.
The first 3 functions for GL account filters are fairly simple. They can be created like the
following.

The years can be retrieved from the GL11110, Account Summary Master View table like
the following.

When viewers select a period, you may want to remind them that Period 0 contains the
starting balance. You can do this by adding a Filter Field to your NL function called
"Headers=" and typing the message you want in as the Filter argument like the following.

Now when you go Jet/Report a Report Options window will be displayed. You can type
filter values into the Filter column, or if you click the arrow to the right of each filter, you
will get a Lookup window with the values pulled from the database by the NL("Lookup")
formula. Notice that if you click the arrow next to the period filter, the header at the top
of the Filter Lookup window gives the message that you typed into the Headers= Filter in
the NL("Lookup") formula.
Using this method to set report options, you can actually hide the Options sheet itself
from viewers by adding +HideSheet to cell A1 like the following.
Displaying Values Not in the Database
It is possible to display a list of lookup values not in the database. You can do this by
supplying an Excel array for the Table argument of the NL("Lookup") function like the
following:
=NL("Lookup",{"MyValue1","MyValue2","MyValue3"},"My Values")
=NL("Lookup",H5:H10,"My Values")
Note that a Field argument is still required when you specify an Excel array so that there
is a value in the title of the Lookup window.
Introducing Stored Viewer Data in Reports
Suppose you want to allow Report Viewers to create and edit data on reports. Normally
any changes made in Report mode will be lost when you go to Jet/Report to re-run the
Jet Reports Help
106
report. However, with the stored user data feature, it is possible to designate sections of a
report where users may enter and change data which will be stored and kept by Jet
Reports when the report is run.
Navision Cronus Example
Suppose you wanted to create a simple list of G/L expense accounts with current budget
information. You could do that like the following.

Say you wanted to create new budget amounts based on the current amounts with a
projected 10% growth in each. You could add a column to do that like the following.

However, what if you didn't want to increase budgets by 10% all across the board, but
wanted to play with the numbers a little and increase some by less and some by more.
Normally, any changes of this kind made in report mode would be lost when the report
was re-run. However, with the stored viewer data feature they can be kept. Start out by
typing "Data" in column A left of the cell(s) where users will enter stored data and row 1
above the cell(s) where users will enter stored data, in this case G1 and A8.

This tells Jet what cell(s) to store data from. But what if you decided to change the filters
to bring back a different list of G/L accounts? Then the budgets stored might not
correctly match the G/L accounts. Because of this, Jet must have a unique key for each
piece of data stored. In this case, the G/L account number uniquely identifies the table
records, so it can be used as the unique key. Type "Key" in column A or row 1,
depending on which intersects the key values with the "Data" keyword. In this case, type
"Key" in cell D1.

In some cases, more than one key may be necessary in order to uniquely identify the data
items. For example, if you were creating budgets by department, you might need a key
for the account number and a key for the department in order to uniquely identify your
data values. Because of this, each key needs a name. In this example, "No.", the name of
the field in the G/L Account table, will serve for the key name. Type "Keyname" in
column A or row 1, depending on which intersects the key name with the "Key"
keyword. In this case, type "Keyname" in cell A7.

Sharing Reports Created with Jet Reports
107
Now when you run the report, you can tweak the values under Projected Budget in
Report mode (as seen below) and the data will be stored when you run the report again or
enter design mode.

Finally, you want to be sure to have Auto+Hide+Values in cell A1 so that Report
Viewers can use the report. You can also add Hide and Fit keywords to row 1 like the
following.

Notice that even if you add options for filters that change the G/L accounts returns, the
projected budgets entered by the user will stay with the correct account.

Access Northwind Example
Suppose you wanted to create a report of sales amounts by category. You could do that
like the following.

Then say you wanted to add a column for projected sales with a 10% increase in each
category. You could add a column to do that like the following.

However, what if you don't want to increase all the projected sales by 10% but wanted to
play with the numbers a bit for some for some categories after running the report?
Normally, any changes made in report mode are lost when the report is re-run. However,
with the stored viewer data feature they can be kept. Start out by typing "Data" in column
A and row 1 above and left of where you want viewers to be able to enter stored data, in
this case A5 and E1.

This tells Jet what cell(s) to store data from. But what if you decided to change the filters
to bring back a different list of categories? Then the projected sales data stored might not
correctly match the categories. Because of this, Jet must have a unique key for each piece
of data stored. In this case, since we are retrieving a unique list of categories, the category
can be used as the unique key. Type "Key" in column A or row 1, depending on which
intersects the key values with the "Data" keyword. In this case, type "Key" in cell C1.

Jet Reports Help
108
In some cases, more than one key may be necessary in order to uniquely identify the data
items. For example, if you wanted to show individual products for each category, you
might need a key for the category and a key for the product in order to uniquely identify
your data values. Because of this, each key needs a name. In this example, "Categories",
the title above the field, will serve for the key name. Type "Keyname" in column A or
row 1, depending on which intersects the key name with the "Key" keyword. In this case,
type "Keyname" in cell A4.

Finally, you want to be sure to have Auto+Hide+Values in cell A1 so that Report
Viewers can use the report. You can also add Hide and Fit keywords to row 1 like the
following.

Notice that now whatever values you type into column E under Projected Sales in Report
mode will be saved when you re-run the report.

Great Plains Fabrikam Example
Suppose you wanted to create a list of G/L accounts for a specific Great Plains budget.
You could do that like the following.

Say you wanted to create new budget amounts based on the current amounts with a
projected 10% growth in each. You could add a column to do that like the following.

However, what if you didn't want to increase budgets by 10% all across the board, but
wanted to play with the numbers a little and increase some by less and some by more.
Normally, any changes of this kind made in report mode would be lost when the report
was re-run. However, with the stored viewer data feature they can be kept. Start out by
typing "Data" in column A left of the cell(s) where users will enter stored data and row 1
above the cell(s) where users will enter stored data, in this case G1 and A8.

This tells Jet what cell(s) to store data from. But what if you decided to change the filter
to bring back accounts from a different budget? Then the budgets stored might not
correctly match the G/L accounts. Because of this, Jet must have a unique key for each
piece of data stored. In this case, the G/L account number uniquely identifies the table
Sharing Reports Created with Jet Reports
109
records, so it can be used as the unique key. Type "Key" in column A or row 1,
depending on which intersects the key values with the "Data" keyword. In this case, type
"Key" in cell D1.

In some cases, more than one key may be necessary in order to uniquely identify the data
items. For example, if you were creating budgets by department, you might need a key
for the account number and a key for the department in order to uniquely identify your
data values. Because of this, each key needs a name. In this example, "No.", the name of
the field in the G/L Account table, will serve for the key name. Type "Keyname" in
column A or row 1, depending on which intersects the key name with the "Key"
keyword. In this case, type "Keyname" in cell A7.

Now when you run the report, you can tweak the values under Projected Budget in
Report mode (as seen below) and the data will be stored when you run the report again or
enter design mode.

Finally, you want to be sure to have Auto+Hide+Values in cell A1 so that Report
Viewers can use the report. You can also add Hide and Fit keywords to row 1 like the
following.

Below is the final output you will see after adding the hide and fit keywords.

Advanced Stored Viewer Data
Suppose you wanted to store viewer data based on multiple keys. This example builds on
the one in the Introducing Stored User Data in Reports section. If you have not yet read
that example, please do so before continuing.
Navision Cronus Example
Let's say you want to insert a columns replicator to your report to make new budget
columns for each department and add a filter for departments. The department
information is stored in the Dimension Value table since it is Global Dimension 1 by
default. So you could insert a column F and add the columns replicator like the following.

Jet Reports Help
110
You also have to add a filter for the department (Global Dimension 1) to the GL function
returning budgeted amounts.

Since departments are being replicated across columns, the unique key for the department
must appear in the column where the viewer data will be stored, in this case column H,
cell H6. Then you must type "Key" in column A in the cell that intersects "Data" with the
unique key value, in this case cell A6.

Since you can have multiple unique keys to identify your data, each key must have a
name. In this case, you can name the key "department", which you can type into cell C6.
You must also type "Keyname" into cell C1 so that the key name appears at the
intersection of "Keyname" (column C) and "Key" (row 6). Finally, row 6 can be hidden
since it is not necessary to view it in Report Mode.

Now if you run this report, you will see a new set of green columns for each department,
and any information the user types into the Projected Budget columns will be stored for
each department.

Access Northwind Example
Let's say you want to insert another rows replicator into your report to break down each
category by product. You could insert a column D and return rows for products like the
following.

You also have to change the filter for the sales totals to sum by product instead of
category.

Since you are returning a unique list of product names for each category, the product
name field will serve as the second key. Since Products are also being replicated down
rows, you must type "Key" in row 1 in the cell that intersects "Data" with the product
names, in this case cell D1.

Sharing Reports Created with Jet Reports
111
Notice that since "Keyname" in cell A4 already intersects with "Key" from cell D1 at cell
D4, "Product" is the name of the second key for the stored viewer data. Now if you run
this report you will see a list of products for each category with stored data for projected
sales. Notice that if you edit the data in column F under Projected Sales and re-run the
report, any changes you make will remain.

Great Plains Fabrikam Example
Let's say you want to insert a columns replicator to your report to make new budget
columns for each period and add a filter for periods. The period information is stored in
the Period Setup (SY40100) table. So you could insert a column F and add the columns
replicator like the following.

You also have to add a filter for the period to the GL function returning budgeted
amounts. You can filter the Start Period and End Period arguments by the same period
number to get just the budget for that period.

Since periods are being replicated across columns, the unique key (period number) must
appear in the column where the viewer data will be stored, in this case column H, cell H6.
Then you must type "Key" in column A in the cell that intersects "Data" with the unique
key value, in this case cell A6.

Since you can have multiple unique keys to identify your data, each key must have a
name. In this case, you can name the key "Period ID", which you can type into cell B6.
You must also type "Keyname" into cell B1 so that the key name appears at the
intersection of "Keyname" (column B) and "Key" (row 6). Finally, row 6 can be hidden
since it is not necessary to view it in Report Mode.

Now if you run this report, you will see a new set of green columns for each period, and
any information the user types into the Projected Budget columns will be stored for each
period.

Moving a Workbook
Jet Reports Help
112
If you open a workbook on a computer that has Jet Reports installed in a different
directory than on the computer where the workbook was created, a window may open
with "File Not Found" as the title and JetReports.xla or JetReports.xlam in the File name
box. This window appears when you first open the workbook.
Click Cancel and Jet Reports will attempt to automatically update the link. If you see this
box more than once, click Cancel each time the box appears.
Jet Reports can usually update the links automatically, but if this does not work, you can
update the link manually. From the Excel menu choose Edit/Links and then click Change
Source. Choose JetReports.xla from the Jet Reports program folder.
If you are having trouble moving reports between computers, read the section entitled
Sharing Reports with Excel Users Who Don't Have Jet Reports in Introducing Report
Viewers. You can use the same technique to transfer reports between Jet Reports users
without getting the warning message from Excel. The report recipient can simply open
the report and use it as they are accustomed.

113
Automating Reports and
Programmability
The Jet Scheduler
Introducing the Jet Scheduler
The Jet Scheduler allows you to schedule reports to run at a later time. The main window
allows you to view all of the Jet Reports tasks that are scheduled on the current computer.
It provides details including the name of the task, the schedule (the times at which the
task is scheduled to run), the next and last run times, the task status and the username of
the task creator. From this window you can create a new task or edit an existing one. You
can also run a task (regardless of the schedule) or end a task that is currently running.
Additionally, you can disable unneeded tasks or delete them completely.
You can access most of the actions associated with a task by right-clicking the task.
Please note that in order to create or edit tasks you must have permissions to do so on the
specified computer.
Scheduling a Jet Reports Task
In order to create a new task, click the "New Task" button. If you have a workbook open
in Excel, the Reports tab will be populated with the appropriate information for the active
workbook. Otherwise, the Input and Output paths will be blank and you will have to
browse to a report or folder.
Jet Reports uses the Autopilot application to run the scheduled task, so if you are familiar
with Autopilot you may recognize the input parameters for the task. In order for
Autopilot to run successfully you must specify an input path (either an entire folder or a
single file) and an output path. It is also recommended that you provide a descriptive task
name.
On the Schedule tab you can specify the times at which you would like your report(s) to
run. Similarly to the Windows Task Scheduler, you can choose to run your tasks once,
daily, weekly, monthly, at startup or logon, or when the computer has been idle for a
given period. You can also choose to disable the task. Based on the frequency that you
select in the drop-down list you may also have to provide additional information on
another tab. For instance, if you select "Monthly" you may choose to run the task on the
last Friday of every month or at the end of every quarter.
On the Options tab you can specify report options to be set when the scheduled task is
run. These options must be Excel named ranges in your workbook in order for them to
show up on the Options tab.
Jet Reports Help
114
On the E-mail tab you can specify e-mailing of the completed reports. If you want to
automatically e-mail the reports, you can supply the name of a range of cells in the input
workbook that contains the list of email addresses or supply the list of email addresses in
the text box. E-mails can be sent via Outlook or SMTP. The e-mail subject and message
body can be specified by selecting the "Message..." button. Note that if on the Output tab
you choose to output the workbooks in HTML format, e-mailing will not be available.
On the output tab, you can choose options about what is outputted by the scheduled task.
Here you can choose the output format of the report (either an Excel Workbook or an
html web page) and whether or not you would like to output debug messages to a log file.
The "Batch File Generation" section uses the "/X" capability of Autopilot. See AutoPilot
Command Line Parameters for more details.
Select "Run Now" to run the task immediately or select "Schedule" to save the task for
future execution. You will be required to enter your Windows username and password in
order to run or save the task.
Using the Jet Scheduler to Email Using SMTP
In versions of Jet Reports prior to 2009, scheduled reports to be sent via e-mail utilized
Microsoft Outlook. In Jet Reports 2009 and later, a second alternative for e-mail
distribution is available. This option is Simple Mail Transfer Protocol (SMTP). SMTP is
an Internet standard for e-mail transmission and does not require the installation of a mail
client such as Outlook.
Setting up an SMTP Server
Before you can use the SMTP e-mail option, you must configure your SMTP settings in
the Jet Reports Application Settings.
1. From Excel, open the Jet Reports Application Settings (Jet/Application Settings).
2. In the SMTP Server area, specify the SMTP server address. If you are using
Microsoft Exchange, this is the name of the Microsoft Exchange server which you
can find in the Microsoft Exchange Settings (Tools/Mail/Mail Setup/E-mail
Accounts/Change). If you are using another Post Office Protocol (POP3) or
Internet Message Access Protocol (IMAP) server, you will need to specify the
name of that server (this is usually a fully qualified domain name such as
smtp.example.com).
3. Specify the e-mail address from which the reports will be sent in the "From" box.
It is important that this is filled out correctly as any replies to your e-mail will be
sent to this address. This is typically your e-mail address.
4. If you need to provide a port or authentication information, check the Use
advanced options box.
5. Leave the Port setting blank to use the default SMTP port, which is 25. If the mail
transfer agent uses a different port, this can be specified here.
6. You may need to provide authentication information in order to send e-mail. If
so, specify your user name and password.
Automating Reports and Programmability
115
Technical Notes: Microsoft Exchange provides full SMTP mail services. The Exchange
SMTP server can be used to receive mail and to relay mail to other Exchange computers
on your network or to other SMTP servers on the Internet. Mail relay permits Exchange
mail clients to send mail to users in other organizations. If mail relay is not permitted, the
Exchange computer can only receive and send mail for users who are in the same mail
domain as the Exchange server.
Emailing a Scheduled Report with SMTP
After setting up the SMTP Server, it is available when creating scheduled tasks. To send
a scheduled report via SMTP, open or create a scheduled task in the Jet Scheduler. Then
on the E-mail tab, choose E-mail using an SMTP server from the Mail Properties area.
Technical Notes: AutoPilot will use SMTP when you have the "/S" and "/E [E-
mail@recipient.com]" in your command line as long as SMTP settings have been
configured in the Jet Reports Application Settings. The /S and /E arguments can be in
any order.
Customing Scheduled E-mail
When e-mailing reports via the Jet Scheduler, you can specify the e-mail subject and
message body. This information can be inputted when the report is scheduled, or it can be
set up to dynamically use information from the report itself when it is run by the
scheduler.
Adding a Custom E-mail Subject and Body
To create a customized e-mail subject and/or message body when scheduling a report,
click the Message button on the E-mail tab in the Scheduled Task form. If you leave
the fields blank, both the subject and the message body will be set to the name of the
report you are sending.
Adding a Dynamic E-mail Subject and Body
If you want to update the subject and/or message body of your e-mail dynamically when
the report is run, you can use Excel named ranges to do so. In order to use this feature,
the report you are scheduling must contain named ranges containing the subject and
message body of your e-mail.
For the subject, you can use the drop down to select the Excel named range that contains
the subject or type one of your own. Only one cell can be included in the subject. If a
named range consists of more than one cell, only the value in the first cell will be used.
To use an Excel named range as the message body of the e-mail, check the Get body
from Excel Named Range option and select the range you would like to use from the
drop down list. The e-mail body can consist of more than one cell.
Jet Reports Help
116
If the message body named range consists of more than one cell, a space will be inserted
between the value in each cell on the same row and a new line will be inserted for each
new row. If the named range contains a replicator that has an anchor row or column, all
of the replicated cells will be included in the e-mail body.
Technical Notes: In order to specify the subject of your e-mail using AutoPilot, use '/U
["Your subject or named range]'. Similarly, you can specify the body of your e-mail in
AutoPilot using '/B [Your e-mail body or named range]'.
AutoPilot
Introducing AutoPilot
AutoPilot allows workbooks saved in an input directory to be refreshed and saved to an
output directory. The workbooks can be saved as workbooks or as web pages. By using
Windows Task Scheduler, AutoPilot can automatically create updated workbooks and
web pages. When AutoPilot runs, it opens each workbook in the input directory.
Depending on the mode specified on the command line, either it saves refreshed
workbooks or Web Pages to the output directory.
AutoPilot Command Line Parameters
AutoPilot determines what action to take based on command line parameters. The
parameters follow the program name. AutoPilot recognizes the following command line
parameters: /M, /I, /O, /D, /L, /E, /X, and /P.
Parameter Action
/M Sets the mode. (UPDATE,
SIMPLEWEB)
/I Specifies the input directory or a
particular report.
/O Specifies the output directory where the
report(s) will be saved or a path to the
output report.
/D Turns on debug mode. You can specify a
text file where the debug information will
be saved. When AutoPilot runs Excel
will open visibly and errors and status
will be stored in the text file.
/L Creates a log file just like /D except
without opening Excel visibly. If no log
file is specified, a text file will be created
in My Documents with the date in the
filename.
/S Emails the reports via SMTP if SMTP
Automating Reports and Programmability
117
settings are specified in the Jet
Application Settings and /E is specified.
/E Emails the report(s) to the e-mail
addresses in the specified Excel named
range or a semicolon separated list of e-
mail addresses. Does not work in
SIMPLEWEB mode.
/U Specifies the subject of the e-mail or the
Excel named range containing the
subject. If no subject is specified, the
filename of the report will be used.
/B Specifies the message body of the e-mail
or the Excel named range containing the
message body. If no message body is
specified, the filename of the report will
be used.
/X Creates and runs a batch file from the
specified Excel named range.
/P Starts the list of named range
replacements. This must be last in the
command line.
Here is how to setup the command line:
AutoPilot /M <Mode> /I <Input Directory> /O <Output Directory> /D <Debug File
Path> /L <Log File Path> /E <Range or list of email addresses> /X <Range> /P
<Range1> <Value1> <Range2> <Value2>
There must be a space between each command line item above, both before and after /M,
/I, /O, /D, /L, /E, /X and /P. If the input or output directory or any Range or Value has a
space, it must be enclosed in quotes. The /P parameter must be last.
/X
Often times when running AutoPilot you wish to update the batch file dynamically. This
is not always easily done using DOS commands. However, dynamically updating Excel
spreadsheets is much easier. /X allows you to write your batch files in Excel so you can
use the power of Jet Reports and Excel functions instead of DOS commands to
dynamically update your batch files.
When using /X, AutoPilot will run your report as normal. The "/X" parameter will then
create and execute a temporary batch file from the specified named range in Excel. Each
row in the named range will be a single line in the batch file. The columns in the range
will be concatenated (separated by a space) to construct a line in the batch file.
This temporary batch file can be used to run another Jet Report via AutoPilot.
Jet Reports Help
118
/E
/E automates the email distribution of your reports. When using /E, Autopilot will run
your report as normal. It will then email the finished report to all of the specified email
addresses. You can specify the list of email addresses on the command line in two ways.
First, you can specify an Excel named range that contains them. The named range can be
any number of cells but must only contain one email address per cell. In this case, since
the report is run prior to sending the email, the list of email addresses can be created
using Jet Reports formulas giving you the ability to email the report based on a condition
within the report. For example, you could conditionally hide or show an email address
based on a G/L account balance in the report. If the balance of the account fell below a
certain amount, the report would be emailed to the CFO.
Alternatively, you can specify a semi-colon delineated list of email addresses on the
command line itself. Please note that Jet Reports does not have the capability to check the
validity of each address, so you should be careful to enter them correctly.
AutoPilot Mode
Mode Action
UPDATE Opens the workbook; Jet/Reports; Saves
the workbook in Output folder.
CONVERT This mode is deprecated and now works
identically to UPDATE. We recommend
that you use +Values in cell A1 and
UPDATE to achieve similar results.
SIMPLEWEB Opens the workbook; Jet/Reports; creates
a drilldown hyperlink whenever
"drilldown" is in the cell comment;
creates a subfolder in the output folder
with the workbook name; in this
subfolder, saves an html file for each
sheet in the workbook.
VALUES This mode is deprecated and now works
identically to UPDATE. We recommend
that you use +Values in cell A1 and
UPDATE to achieve similar results.

Using AutoPilot to Update Report Options
If the workbook has single cell named ranges, AutoPilot can replace the contents of the
named ranges. This allows AutoPilot to update report options. Follow the /P parameter
with <Named Range> <Value> pairs. Put a space between the named range and the
Automating Reports and Programmability
119
value. If either includes spaces, enclose them in quotes. You can include as many pairs as
needed. If the named range does not exist in a workbook, it is ignored. Below is an
example AutoPilot command.
AutoPilot /M UPDATE /I "C:\Input" /O "C:\Output" /P "DateFilter" "9/1/02..9/30/02"
"Sales" "10000.."
AutoPilot Command Line Substitutions
The input and output directories can contain date and time tags that will be replaced with
current date and time elements. The following tags are available.
Tag Result
%YEAR% Current year, four digit
%MONTH% Current month, two digits
%DAY% Current day of the month, two digits
%HOUR% Current hour, 2 digits, 24 hour clock
%MINUTE% Current minute, 2 digits.
The date and time substitutions are based on the date and time that AutoPilot starts. For
example,
AutoPilot /M SIMPLEWEB /I "C:\Statistics" /O "C:\InetPub\%Year%-%Month%-
%Day% %Hour%"
If the AutoPilot started at 10PM on July 23, 2003 the output directory from the above
command line would be "C:\InetPub\2003-07-23 10".
Using the Windows Task Scheduler
To run AutoPilot on a schedule, use the Windows task scheduler. You must set AutoPilot
to "Run As" a user that has Excel and Jet Reports installed and properly configured. If
you are not using Windows Authentication, the user name and password for Navision
must be saved in the options. For better security, Windows Authentication is
recommended.
Note that to use the Windows task scheduler requires the user to have read/write
permissions for the C:\Windows\Tasks folder. Normally only members of the Local
Administrators, Backup Operators, or Server Operators groups have these permissions,
However, an administrator can grant permissions for the directory to other users with the
CACLS command at the command prompt. For example, if the username to be granted
rights was John, the command might look like this:
CACLS C:\Windows\Tasks /E /G John:F
Jet Reports Help
120
For more information on the CACLS command, Windows tasks, and permissions, see the
Microsoft website.
AutoPilot Testing
Before saving a worksheet in the AutoPilot input directory, you should login as the user
specified in the "Run As" of the task scheduler, open the workbook from the input
directory, and choose Jet/Reports. Then use "Save As" to save the file to the output
directory. If this is successful, AutoPilot should be able to create the output files. If you
have trouble with a workbook, you should try this test to diagnose the problem.
Webpage Creation Format
When AutoPilot runs in SIMPLEWEB mode, a new directory is created for each
workbook in the input directory. The name of the directory is the same as the name of the
workbook. For each sheet in the workbook, an HTML (.htm) file is created in the
workbook directory. The filename is the same as the name of the sheet.
If you want a drilldown hyperlink on the web page for a cell, put "drilldown" in the cell
comment. To use the hyperlink, the user must have Navision installed on their computer
and they must be able to access the Navision server.
Programming with Jet Reports
Launching Jet Reports from Navision
If you are a Navision developer and have appropriate development granules you can
launch Excel from Navision, update report options, refresh the report and print. You must
have the OCX granule and either Application Builder or Report Designer. Below is a
code-unit example of how to do this. The same code could be written inside a form or a
Navision report. Be sure to replace [Jet Reports Program Folder] with the path to the Jet
Reports program folder on your system.
Documentation()
Example: Run A Jet Report from within Navision
Steps implemented in code:
1. Start Excel; make it visible and interactive.
2. Open the Jet Reports Add-in.
3. Open a Workbook.
4. Update Options.
5. Run Jet/Report.
6. PrintPreview the Worksheet that contains the report.
Automating Reports and Programmability
121
7. Close Excel.
Global Variables (This example uses Excel XP objects. For other versions of Excel, these
will be slightly different.):
Name DataType Subtype
XL Automation 'Microsoft Excel 10.0 Object
Library'.Application
Workbook Automation 'Microsoft Excel 10.0 Object
Library'.Workbook
Worksheet Automation 'Microsoft Excel 10.0 Object
Library'.Worksheet

OnRun()
{To reuse existing instances of Excel, use CREATE(XL)}
IF CREATE(XL, TRUE) THEN BEGIN
{Workbooks don't necessarily start visible or interactive. Since the
user will interact with the workbook, you need to set the below values.}
XL.Interactive := TRUE;
XL.Visible := TRUE;
{Add-ins do not automatically open when using automation, so the Jet Reports
add-in
must be opened below. You must also open any other add-ins that are needed. Be
sure
to replace [Jet Reports Program Folder] with the path to the
Jet Reports program folder on your system.}
XL.Workbooks.Open("[Jet Reports Program Folder]\JetReports.xlam");
{Open the report workbook. Be sure to replace [Jet Reports Program Folder] with the
path to the
Jet Reports program folder on your system.}
Workbook := XL.Workbooks.Open("[Jet Reports Program
Folder]\Reports\Finance Graph.xls");
{Update the report options. The option values are in single cell named ranges.}
Workbook.Names.Item('PeriodType').RefersToRange.Value := 'Week';
Workbook.Names.Item('DateFilter').RefersToRange.Value :=
'1/1/01..3/31/01';
{Run the jet report.
IMPORTANT NOTE: Jet Reports intends to keep the below command working in future
versions
of Jet Reports. All other menu commands might change. They might work now, but
could
break in future version. Please do not use any other Jet Reports commands in your
software.}
Jet Reports Help
122
XL.Run('JetMenu','Report');
XL.Run('Events');
{In some cases all the below steps may not be desired. Perhaps the user wants
to drilldown and examine the report in Excel.}
{Choose a worksheet and launch print preview. The user can cause the report to print
if desired.}
Worksheet := Workbook.Worksheets.Item('Report');
Worksheet.PrintPreview;
{Avoid the message asking if the workbook should be saved by marking it as already
saved. Be careful
with this.
This step assumes that the workbook does not need to be saved since it is a report
template.}
Workbook.Saved := TRUE;
{Close Excel}
XL.Quit;
END;

Launching Jet Reports from VBA
If you write macros in Excel or want to launch Jet Reports from another application, you
can launch Excel, update report options, refresh the report and print. Below is some
sample code that demonstrates how to do this. Be sure to replace [Jet Reports Program
Folder] with the path to the Jet Reports program folder on your system.
Steps implemented in code:
1. Start Excel; make it visible and interactive.
2. Open the Jet Reports Add-in.
3. Open a Workbook.
4. Update Options.
5. Run Jet/Report.
6. Print the Worksheet that contains the report.
7. Close Excel.
Sub JetUpdate()
Dim XLApp as Object
Set XLApp = New Excel.Application
Workbooks don't necessarily start visible or interactive.
If the user will interact with the workbook, you need to set the following two values.
XLApp.Visible = True
XLApp.Interactive = True
Add-ins do not automatically open when using automation, so the Jet Reports add-in
must be opened manually. You must also open any other add-ins that you need.
Automating Reports and Programmability
123
Be sure to replace [Jet Reports Program Folder] with the path to the Jet Reports program
folder on your system.
XLApp.Application.Workbooks.Open ("[Jet Reports Program
Folder]\jetreports.xlam")
Open the report workbook
XLApp.Application.Workbooks.Open ("ReportName.xls")
Update the report options. The option values are in single cell named ranges.
XLApp.Application.Workbooks("ReportName.xls").Names.Item("DateFilt
er").RefersToRange.Value = _
"1/1/2004..3/31/2004"
Run the jet report.
IMPORTANT NOTE: Jet Reports intends to keep the below command working in future
versions
of Jet Reports. All other menu commands might change. They might work now, but
could
break in future version. Please do not use any other Jet Reports commands in your
software.
XLApp.Application.Run "JetReports.xlam!JetMenu", "Report"
In some cases all the below steps may not be desired.
Choose a worksheet and launch print preview. The user can cause the report to print if
desired.
XLApp.Application.Workbooks("ReportName.xls").PrintPreview
Avoid the message asking if the workbook should be saved by marking it as already
saved.
Be careful with this. You are assuming that the workbook does not need to be saved since
it is a report
'template.
XLApp.Application.Workbooks("ReportName.xls").Saved = TRUE
Close Excel
XLApp.Quit
End Sub


125
Reference
Filtering Reference
Meaning Symbol Sample Expression Records Displayed
Equal to None 377
BLUE
Number 377
Those with the BLUE code,
for BLUE warehouse code
Not equal to <> <>0 All numbers except 0. Note
that <> cannot be used in
conjunction with other wild
cards like *. See Wild Card
Filters.
And & <2000&>1000 Numbers that are less than
2000 AND greater than
1000.
The & sign must be used
with a range because no
single record can have two
values. An example of an
invalid use of & is A&B
because no records can be
equal to A AND equal to B.
An example of a valid use of
& is A*&*B, which means
find all records that start
with A AND end with B.
Or | 1200|1300 Those with number 1200
OR 1300
Greater than > >1200 Numbers greater than 1200
Great than or equal
to
>= >=1200 Numbers greater than or
equal to 1200
Less than < <1200 Numbers less than 1200
Less than or equal to <= <=1200 Numbers less than or equal
to 1200
Interval .. 1100..2100
..2500
..12/31/2000
8..
Numbers 1100 through 2100
Up to and including 2500
Dates up to and including
12/31/2000
Jet Reports Help
126
Everything after 8
Indefinite number of
unknown characters
* *Co*
*Co
Co*
Text that contains "Co"
Text that ends with "Co"
Text that begins with "Co"
See Wild Card Filters.
One unknown
character
? Hans?n Text such as Hansen or
Hanson
See Wild Card Filters.
Calculate first ( ) 30|(>=10&<=20) Number 30 OR with a
number from 10 through 20
(the result of the calculation
within the parentheses)
Ignore special
characters
@@ @@A&B Those equal to "A&B" the
& is a part of the value
instead of being interpreted
as an AND operator.
' ' 'A&B'|'M&M' Those equal to "A&B" OR
those equal to "M&M". The
| is interpreted as a logical
operator as described above.
If you need to combine two
filters that both have special
characters, you can enclose
your filters in single quotes.
Check Special Characters in
a Filter for examples.
"@@"& "@@"&C3
Or
"'"&C3&"'"
Or
"'"&C3&"'|'"&C4&"'"
Where C3 and C4
could contain blank
or special characters
Use "@@" & <Cell
Reference> if the cell
reference could be blank and
you want to filter for blank
field values.
Use the ' character in double
quotes added before and
after a cell reference to
always have a safe filter
from the cell reference.
The two methods listed
above are equivalent for a
Reference
127
like the following:
John(Huston), Ben &
Jerrys
single filter. If you want to
combine two cells with
filters in them, you must use
as in the bottom example.
Ignore case (upper
or lower)
@ @location Text such as LOCATION,
location or LocatioN
You can also combine the various filter expressions as in the following table.
5999|8100..8490 Include any records with the number 5999 OR a number from the
interval 8100 through 8490.
..1299|1400.. Include records with a number less than or equal to 1299 OR a
number equal to 1400 or greater (all numbers except 1300 through
1399).
>50&<100 Include records with numbers that are greater than 50 AND less
than 100 (numbers 51 through 99).
*C*&*D* Text containing both C AND D.
@*co?* Text containing co, CO, Co, cO, such as cot, cope and
incorporated.
CO, cO, Co or co must be present, followed by at least one
character, but there can be an indefinite number of characters
before and after these, and case is unimportant.
Note: It is important that you enter only meaningful filters. For example, it is possible to
specify an interval that does not exist, and Jet Reports cannot check this for you.
NF Function Reference
=NF
(Key,Field,FlowfilterField1,Filter1,FlowfieldField2,Filter2,,FlowFilterField9,Filter9)
Purpose: Returns a field based on a record key. Record keys can be generated with the
NL function. If the field returned is a Flow Field, it is calculated based on the Flow
Filters.
Note: When an NL function returns a record key, the Flow Filters from the NL function
are not used to calculate the return value of the NF function.
Parameter Description
Key Specifies a record key returned by the NL function when the
Field parameter is blank or has a Field Cache.
Field Name of the field to return. The field specified must be present
in the Field Cache in the NL function if a Field Cache is being
used.
Jet Reports Help
128
FlowFilterField1 Flow filter fields are only available in Navision..The name of a
flow filter to use in calculating the value to return. Flow filters
are only used if Field is a flow field.
FlowFilter1 Flow filters are only available in Navision..The value of the filter
for FlowFilterField1.
FlowFilterFieldN Flow filter fields are only available in Navision..Same as
FlowfilterField1. Up to 9 pairs of Flow Filter Field and Filter
pairs can be included in an NF Function.
FlowFilterN Flow filters are only available in Navision..Same as Filter1 but
for FlowFilterFieldN.
NF Function Examples
This NF returns the Net Change flow field from the record key in cell A3 and filters it for
January 2002.
=NF(A3,"Net Change","Date Filter","1/1/2002..1/31/2002")
This NF returns the Name field from the NL record key in cell B3.
=NF(B3,"Name")
This NF returns the City field from the NL record key in cell B3.
=NF(B3,"City")
NP Function Reference
=NP (What, Arg1, Arg2,...,Arg22)
Purpose: Does various utility functions documented below.
What Description/Parameter
"Eval" Evaluate the formula in the Arg1 parameter. The formula must be
enclosed in quotes and will be evaluated when the report refreshes.
"DateFilter" Calculates a date filter using the start date and end date specified in
the Arg1 and Arg2 parameters.
"Format" Formats an expression with a specific Excel formatting string. Arg1
is the expression to format such as a date or cell reference, and Arg2
is the Excel formatting string such as "YYYY/MM/DD" for a date
formatted with a 4-digit year then a 2-digit month and 2-digit day.
"Companies" Returns a list of the companies associated with a data source. Arg1
is a company filter such as A* to return all companies that start with
the letter A. Leaving Arg1 blank will return all companies. Arg2 is
the data source. Leaving Arg2 blank will return companies from the
Reference
129
current data source. Note that you should reference the result of this
function in the table argument of an NL replicator function to
actually list them out in Excel.
"DataSources" Returns the list of data sources. Note that you should reference the
result of this function in the table argument of an NL replicator
function to actually list them out in Excel.
"Intersect" Returns the intersection of two arrays specified in the Arg1 and
Arg2 parameters. Note that if NP("Intersect") is by itself in a cell, it
will only return the first value from the array. You must put it inside
an NL("Rows") in order to correctly return all the data.
"Difference" Returns the difference of two arrays specified in the Arg1 and Arg2
parameters. Note that if NP("Difference") is by itself in a cell, it will
only return the first value from the array. You must put it inside an
NL("Rows") in order to correctly return all the data.
"Union" Returns the Union of two arrays specified in the Arg1 and Arg2
parameters. Note that if NP("Union") is by itself in a cell, it will
only return the first value from the array. You must put it inside an
NL("Rows") in order to correctly return all the data.
"Join" Joins the elements of the array specified in Arg1 together into a
single string separated by the contents of Arg2.
"Split" Splits the string in Arg1 into an array of values. The splitting is
delimited by the contents of Arg2. Note that if NP("Split") is by
itself in a cell, it will only return the first value from the array. You
must put it inside an NL("Rows") in order to correctly return all the
data.
NP Function Examples
The following NP evaluates the formula in cell of D5 from a worksheet called Options.
=NP("Eval","=Options!$D$5")
The following NP creates a list of the document numbers of all invoices where either the
Type field is "Item", or it is "G/L Account" and the No. field is 2000.
=NL("Rows", NP("Union", NL("Filter","Sales Invoice Line","Document
No.","Type","Item"), NL("Filter","Sales Invoice Line","Document No.","Type","G/L
Account","No.","2000")))
The following NP creates a date filter for the month of June 2003 if the Windows date
format is set to mm/dd/yyyy. It returns "6/1/2003..6/30/2003".
=NP("DateFilter","6/1/2003","6/30/2003")
The following NP creates a date filter for all dates up to and including May 15, 2004 if
the Windows date format is set to dd/mm/yyyy. It returns "..15/5/2004".
Jet Reports Help
130
=NP("DateFilter",,"15/5/2004")
The following NP splits up the string "this|is|an|array" and creates the array {this, is, an,
array}.
=NP("Split", "this|is|an|array", "|")
The following NP formats a number in cell A4 to have 2 decimal places.
=NP("Format",A4,"0.00")
The following function lists all the companies for the current data source in rows.
=NL("Rows",NP("Companies"))

NL Function Reference
=NL (What,Table,Field,FilterField1,Filter1,FilterField2,Filter2,FilterField10,Filter10)
Purpose: Returns fields or record keys from a table based on filters. Duplicates report
templates.
Note: If the NL function is making copies of a template, it must be the only function in
the cell. The functions =-NL("Rows") and =NL("Rows")*-1 are not valid.
Parameter Description
What Determines what is returned.
Argument Description
Blank or omitted Returns the Field or record key from the
first record that matches the other NL
arguments.
"Sum" Returns the sum of the Field for all
records that match the filters. To use
Sum, the field type must be numeric.
"Count" Returns the count of all records that
match the filters. Ignores the Field
parameter.
"CountUnique" Returns the count of all of the unique
values of the specified field that match
the filters.
"Rows" Copies the current row and all of its
contents for each unique value of Field
in the records that match the filter. The
Reference
131
values returned are sorted. To copy more
than one row, put "Rows=n" where n is
the number of rows to copy. For
example, to copy the current row and the
next two rows use "Rows=3".
"Columns" Just like "Rows" but copies columns.
"Sheets" Like "Rows" and "Columns" but copies
the current worksheet. "Sheets=n" is not
supported. Only the current worksheet
can be copied. The name of the sheet is
set to the value returned.
If name is too long or already exists, jet
will create a new name.
If the worksheet is locked, the name is
limited to 22 characters. If the worksheet
is not locked, the limit is 31 characters.
If the values returned exceed these
limits, the NL function will truncate the
long names.
Positive Number 1 returns the first record or field that
matches the filters, 2 returns the second
record or field, etc.
Negative Number -1 returns the last record or field that
matches the filters, -2 returns the second
to last record or field, etc.
"First" Returns the first record or field that
matches the filters.
"Last" Returns the last record or field that
matches the filters.
"AllUnique" For all operations except those in which
you pass an array to an Excel function, it
is now recommended that you use
"Filter".
Returns an array of unique values for the
field. If you are using Excel 2000, array
size is limited. In our experience, arrays
up to 5,000 elements seem to work fine.
Larger arrays can cause unpredictable
results. Excel 2002 or later is highly
recommend if you are going to use large
arrays.
"Picture" Loads a bitmap image (bmp) from a file
Jet Reports Help
132
or from a BLOB in Navision.
"Caption" Returns the Navision caption in the
current language for the specified table
or field.
"Lookup" Creates a formula that will perform the
database lookup for Report Options.
This function must be used with the
Option tag in column A and the Lookup
tag in row 1. See the Report Options
topic for more details.
"Filter" Returns a string value that can be used
as a filter in another NL function.
Intended for filtering the contents of one
table based on the contents of another.
Can also be used with array operations
such as NP("Union") or NP("Intersect").
"Link" Returns a string value that can be used
as a filter in another NL function.
Intended for filtering the contents of one
table based on the contents of another.
Table The name or number of the table. If you want to load a picture from
a file, leave the table blank.
When the "What" argument is "Rows", "Columns" or "Sheets" you
can also use an Excel array in the Table argument. Excel arrays can
be created in a number of ways, including typing
{"element1","element2","element3"}, using a range of cells like
E8:E16, or using one of the Jet Reports Array Calculations. This will
cause rows, columns or sheets to be created for each element of the
array.
If your Table parameter starts with SQL=, Jet Reports expects the
rest of the parameter to be a valid SQL query.
Field The name or number of the field to return. To return a record key,
leave the Field blank or use a Field Cache. Also see Advanced
Dimensions.
A Field Cache is required when a table does not have a primary key
and will speed up a report even when the table does have a primary
key. The format of the field cache is either a comma delimited,
quoted list of field names inside curly brackets : {
"FieldName1","FieldName2","FieldName3", etc. } or a cell range
reference: $B$2:$G$2 where the field names are in cells B2 through
G2. If a Field Cache is used, every field that will be retrieved with
Reference
133
NF functions must be in the Field Cache.
When the "What" argument is "Picture", this parameter becomes the
full path for the file.
FilterField1 The name of the first field by which to filter. Put "Company=" in a
FilterField to override the default Navision or Great Plains
Company. Put "DataSource=" in a FilterField to override the default
data source. You can use multiple server data sources and a single
local data source connection in the same workbook.
See Limiting the Number of Records in a Query for Limit=. See
Filtering Based on Data from Another Table for Link=. See
Databases with Multiple Schemas for Schema=. See Specifying
More Than Ten Filters in the NL Function for Filters=. See also
Advanced Dimensions and Array Calculations.
Filter1 The value of the filter to apply to FilterField1. If "Company=" is in
the corresponding FilterField, put the company name here. If
"DataSource=" is in the corresponding FilterField, put the connection
name as defined in Jet/Options here.
FilterFieldN Same as FilterField1. Up to 10 field and filter pairs can be specified.
If you specify multiple filters, they combine in a logical AND.
FilterN Same as Filter1, but applies to FilterFieldN.
Access Northwind NL Function Examples
This NL returns the record key for all of the Customers in the City of Portland with a 503
area code.
=NL("Rows","Customers",,"Phone","503-???-????","City","Portland")
This NL returns the number of units in stock for product number 26. Since the NL can
only return one record, the "What" parameter is blank.
=NL(,"Products","UnitsInStock","ProductID","26")
This NL returns information using a connection other than the default.
=NL("Rows","Customers",,"DataSource=",2)
Navision Cronus NL Function Examples
This NL that returns the record key for all of the customers in the Customer table who are
in the City of Boston with a Balance less than zero.
=NL("Rows","Customer",,"Balance","<0","City","Boston")
Jet Reports Help
134
This NL returns the Customer Name from sales quote number 10000. This NL can only
return one record so the "What" parameter is blank.
=NL(,"Sales Header","Name","No.","10000","Document Type","Quote")
This NL returns information for a company other than the default one in the Options
screen.
=NL("Rows","Customer",,"0","CRONUS USA, Inc.")
This NL returns information for a company other than the one in the Options screen using
a connection other than the default.
=NL("Rows","Customer",,"0","CRONUS USA, Inc.","DataSource=","2")
This NL creates sheets called "US","CANADA" and "MEXICO" using an array in the
table field:
=NL("Sheets",{"US","CANADA","MEXICO"})
This NL creates lookup values for use with Report Options for each item in cells F5
through F15.
=NL("Lookup",F5:F15)
GL Function Reference
=GL (What,Arg1,Arg2,Arg3,..,Arg22)
Purpose: Returns the budget, balance, net change, quantity, debits or credits of the G/L
Account of a given company based on filters.
Navision
Parameter
Great Plains
Parameter
Description
What Where Navision: Determines what the GL Function returns.
Options are Balance, Budget, Quantity, Credits or
Debits
Great Plains: Determines where the GL function
returns its data. Options are "Rows", "Columns",
"Sheets", and "Cell". "Rows" will insert rows,
"Columns" will insert columns, "Sheets" will insert
sheets, and "Cell" will put a single value in the current
cell. Additionally, you can use "Rows=x" and
"Columns=x" to insert multiple rows or columns for
each result, which works just like the NL function. If
Reference
135
you leave this argument blank, it defaults to "Cell".
Note that the options available for the What argument
depend on the Where argument. See the next argument
for more details.
Account What Navision: G/L Account Number, Filter or Range. If
you specify a single, totaling account, you will get
totals. If you specify multiple accounts or a range of
accounts, totaling accounts will not be included in the
returned number even if the other account(s) have
nothing to do with the specified totaling account(s).
Great Plains: Determines what the GL function
returns. If the Where argument is "Cell", then the
What options are "Balance" which returns a G/L
balance, "Budget" which returns a G/L budget,
"Name" which returns the name of a G/L account, or
"CatName" which returns the name category name for
a specified category.
If the Where argument is "Rows", "Columns", or
"Sheets", then the What options are "Accounts" which
will give a list of account numbers, "Categories"
which will give a list of account category numbers, or
"SegX" where X is a segment number and which gives
a list of that specific account segment.
StartDate Account Navision: Specifies the starting date of transactions to
include. If you are interested in the balance of an
account on a given date, leave StartDate blank. If you
are interested in the net change of an account, use
Balance and specify both the StartDate and EndDate.
Great Plains: Traditional segmented account number
filter.
EndDate Start
Period
Navision: Specifies the ending date of transactions to
include.
Great Plains: Specifies the start period or date in one
of several formats: YYYY/PPP where YYYY is the 4
digit fiscal year and PPP is the 1 to 3 digit period
number; YYYY/M/D where YYYY is a 4 digit year,
M is a month, and D is a day; DDDDD.DD which is a
5+ digit number interpreted as an Excel Julian date,
and M/D/YY or D/M/YY (depending on your
computer's locale settings) where M is a month, D is a
Jet Reports Help
136
day, and Y is a 2 or 4 digit year.
Specifying a start period and an end period will give
you the net change between the first day of the start
period and the last day of the end period. Specifying a
start period with no end period will give you the net
change between that start date and the present.
Specifying no start period will give you the
balance/budget as of the end period. Specifying no
start period or end period will give you the present
balance/budget. You cannot use a range or other
special filter here. For information on Period 0, see
Fiscal Year Beginning Balances in the GP GL
function.
View End Period Navision: The G/L Analysis View to use. Leave this
blank to use balances from the G/L directly. Analysis
Views are available in Navision version 3 and later.
This field should be blank if you are using objects
from an earlier version of Navision.
Great Plains: Specifies the end period in the same
format as start period. You cannot use a range or other
special filter here.
Dim1 Category
Number
Navision: Filter for the first dimension of the analysis
view. If View is blank, this is the filter for Global
Dimension 1. Dimension totaling is handled the same
way as Account totaling. In Navision versions before
3.0, Dim1 is used as the Department filter.
Great Plains: Specifies filters for the category
number(s).
Dim2 Seg1Filter Navision: Filter for the second dimension of the
analysis view. If View is blank, this is the filter for
Global Dimension 2. In versions before 3, this is the
Project filter.
Great Plains: Specifies filters for specific account
segments. You can use either an account argument or
segment filters, not both.
Dim3 Seg2Filter Navision: Filter for the third dimension of the analysis
view.
Great Plains: Specifies filters for specific account
segments. You can use either an account argument or
segment filters, not both.
Dim4 Seg3Filter Navision: Filter for the fourth dimension of the
Reference
137
analysis view.
Great Plains: Specifies filters for specific account
segments. You can use either an account argument or
segment filters, not both.
BusinessUnit Seg4Filter Navision: Filter for the business unit.
Great Plains: Specifies filters for specific account
segments. You can use either an account argument or
segment filters, not both.
Budget Seg5Filter Navision: Budget filter. This is unused unless
returning budgets.
Great Plains: Specifies filters for specific account
segments. You can use either an account argument or
segment filters, not both.
Company Seg6Filter Navision: Company Name. This must be spelled the
same as it appears in Navision, including case, spaces
and punctuation. If this parameter is empty (""), the
default company in the Jet Reports Options/Data
Sources Screen is used.
Great Plains: Specifies filters for specific account
segments. You can use either an account argument or
segment filters, not both.
Reserved Seg7Filter Navision: Blank. For backwards compatibility, a Data
Source Name as defined in Jet/Options can be used.
Great Plains: Specifies filters for specific account
segments. You can use either an account argument or
segment filters, not both.
ExcludeClose Seg8Filter Navision: If you want to exclude closing dates from
your GL query, enter True. If this parameter is empty,
entries that were posted on the closing dates are
included.
Great Plains: Specifies filters for specific account
segments. You can use either an account argument or
segment filters, not both.
Reserved Seg9Filter Great Plains: Specifies filters for specific account
segments. You can use either an account argument or
segment filters, not both.
Reserved Seg10Filter Great Plains: Specifies filters for specific account
segments. You can use either an account argument or
segment filters, not both.
Jet Reports Help
138
Reserved Budget Great Plains: Specifies the budget filter, blank for all
budgets. Note that budgets are associated with a
specific year in Great Plains so if your budget and
fiscal year filters do not coincide you will get a 0
value.
Reserved Company Great Plains: Specifies the Great Plains company to
get data from.
Reserved Reserved
Reserved Reserved
Reserved Reserved
Reserved Reserved
Data Source Data
Source
Data Source Name as defined in Jet/Options can be
used. If this parameter is empty, the default Data
Source is used.
Navision GL Function Examples
This GL returns the G/L Balance for Account 1120.
=GL("Balance","1120")
This GL returns the Quantity for Account 4410 for January 2001 using the OCC View for
Seattle.
=GL("Quantity","4410","1/1/01","1/31/01","OCC","SEATTLE")
This GL returns the Budget for Account 5010 for 2001 for the 2001 Budget.
=GL("Budget","5010","1/1/01","12/31/01",,,,,,,"2001")
Great Plains GL Function Examples
This GL returns the G/L Balance for Account 000-1100-00.
=GL("Cell","Balance","000-1100-00")
This GL returns the net change for Account 000-1100-00 for the first 3 periods of 2001.
=GL("Cell","Balance","000-1100-00","2001/1","2001/3")
This GL returns the G/L Budget as of the 6th period of 2002 for account segment 100.
=GL("Cell","Budget",,,"2002/6",,"100")
This GL returns a list of the G/L Account numbers listed down rows.
Reference
139
=GL("Rows","Accounts")
The GL Function is only available for Navision and Great Plains databases.
SQL= Reference
=NL (What,Table,Field,FilterField1,Filter1,FilterField2,Filter2,FilterField10,Filter10)
Purpose: A special type of NL function that uses the power of SQL to allow complete
flexibility in retrieving data from a database. Note that this feature is for power users in
special situations only and should not be used regularly.
Argument Meaning
What Rows, Columns, Sheets, N, -N, Blank, SQL (SQL shows the SQL
statement created)
Table Must be a SQL query string starting with SQL=
To add Jet Reports interpreted filters to the Where or Having
clauses, add %Filter1%,,%Filter9% to your existing Where term.
These parameters will be replaced by an appropriate Where terms
enclosed in (). Please note that every %FilterX% must have at least
one corresponding Jet filter (see the FilterField1 row below for
more details).
If your filter is *, the corresponding %FilterX% will be converted
to "field LIKE '%'". If the preceding word in the SQL query is
Where, and there are no following words like AND or OR, then
Where will be removed. If the preceding word is AND, OR, etc
then that word will be removed. If the preceding word is Where
and the following word is AND or OR, then the following word
will get stripped. For example if Where1 was blank in the
following, "SQL=Where () AND %Filters1%", the "()" and the
"AND" would be removed. In the following: "SQL=Where
%Filters1% AND ()" the AND would get removed. In the
following: "SQL=Where %Filters1%" the Where would get
removed.
To add user determined sorting to your SQL statement, add
%Sort% to the Order By clause. Since Joins use a common sort
and Sub queries do not use sorting, you do not need to put a
number on %Sort%. Despite this, your NL filters for sorting must
still be prefixed by a filter number (see the section on FilterField1
below).
Field Field cache (example: {"Field1","Field2"} = Returns a Record Key
just like what happens when an array of field names is passed in to
this argument with a normal NL function. The field names actually
returned depend on the SQL Select Statement.
Jet Reports Help
140
FieldName = returns that field name which must be one of the
fields returned by the SQL Select Statement. All the other fields
returned are ignored.
FilterField1 Where term replacements in the format "1S=FieldName". The first
character corresponds to the %FilterX% that you want to replace.
The second character determines the Field type and can be one of
the following. Please note that every %FilterX% in the SQL
statement MUST have at least 1 corresponding Jet filter.
D = Date
N = Number
S = String
G = GUID
B = Boolean
The entire FilterField (including the 1S, 2D, etc.) can be prefixed
with a "+" or "-" to sort. So for example, you can use
"+1S=FieldName" or "-1S=FieldName". Please note that despite
the fact that a sort may not correspond to any particular %FilterX%
replacement, you must still prefix your sort field with a filter
number, data type, and =. Simply using +Fieldname will not work.
Filter1 Filter using standard Jet filters.
Access Northwind Examples
The following function returns the contact names from the customers table where the
contact name starts with A and sorted by the City in descending order.
=NL("Rows","SQL=SELECT ContactName FROM Customers WHERE %filter1%
ORDER BY %sort%","ContactName","1S=ContactName","A*","-1s=City","*")
The following function returns all the contact names from the customers table sorted by
the city.
=NL("Rows","SQL=SELECT ContactName FROM Customers WHERE %filter1%
ORDER BY %sort%","ContactName","-1s=City","*")
SQL= is not necessary for the Navision connector.

141
Troubleshooting
#NAME Errors
If you see "#NAME" in a cell containing a Jet Reports formula, Jet Reports may not be
properly installed or the link source for the worksheet may need to be changed.
#VALUE Errors
If you see a "#VALUE" in a cell containing a Jet Reports formula, it means there is a
problem. Select the cell and then choose the Jet/Debug menu option. You might get a
useful message that helps explain the problem.
AutoCorrection
Though Excels AutoCorrect feature can be very helpful at times, it can also be a bit of a
nuisance when it comes to formatting. For instance, assume that cell B2 is formatted as
currency and B3 is formatted as a percentage. In cell B4 you type "=B2*B3" in order to
obtain the product of the two values. With Excel AutoCorrection turned on, the cell is
automatically formatted as currency. Though this may typically be what is desired, in this
instance you would like to apply the accounting format to the product. Excel will allow
you to do this temporarily, but when the cell is recalculated, AutoCorrect changes it back
to currency. This becomes a problem when a replicator expands because during the
expansion a recalculation occurs throughout the entire workbook. This may cause you to
think that Jet Reports is reformatting your workbook, when in fact it is the Excel
AutoCorrect feature.
If you find yourself in this situation, you can attempt to turn off this feature by selecting
"Tools/AutoCorrect Options" in Excel. Select the "AutoFormat As You Type" tab and
make sure the "Include new rows and columns in list" check box is deselected. Please
note that for certain types of formatting there is nothing that can be done about Excel
reformatting.
Design Mode Calculations
Some functions return different values in design mode than in report mode. In design
mode, sorts, array filters, and link= are all ignored, and the first value matching the filters
is returned. This makes design mode calculations faster while still generating generally
accurate reports, but the accuracy of design mode results should not be relied on.
Canceling Long Calculations
Jet Reports Help
142
If a worksheet calculation takes longer than two seconds, Jet Reports will display a status
window with calculation information in it. If you want to abort the current calculation,
you can click the Cancel button. If Excel is in the middle of a calculation, the cancel
button can be slow to respond, but when Excel is finished with the calculation, the report
will stop refreshing and the uncalculated cells will display #VALUE.
Excel and Formula Limits
In Excel 2003 and earlier, the max number of rows on a worksheet is 65536 and max
number of columns is 256. In Excel 2007, the max number of rows is 1048576 and the
max number of columns is 16384. If a replicator on the worksheet exceed these
limitations, an error will occur and the replicator will not expand.
Excel also has memory size limitations for the formulas in a workbook. In Excel XP,
only 128 MB of memory is allowed for formulas, while in Excel 2003, only 1 GB of
memory is allowed for formulas. In Excel 2007, Windows manages Excel's memory
directly, so it is only limited by the maximum process size allowed by the installed
Windows version, which is 2 GB for 32-bit versions of Windows and virtually unlimited
(except by physical memory) for 64-bit versions.
If you exceed the memory size limitations of Excel, you may receive an "Out of
Memory" error. In this case, the best thing to do is split the data on the workbook up into
separate workbooks. The only other way to solve this problem is to upgrade the version
of Excel or Windows.
If you are a Navision user, C/Front has a 779 character limit on filters. This means that no
filter in a Jet functions can by longer than 779 characters all by itself. If you have a
formula with a filter longer than 779 characters, you will get the error message "Invalid
filter" when debugging.
Excel Date Problems
If Jet Reports is returning dates (i.e. Posting Dates or Period Start dates) four years ahead
of the year that you are filtering for, you may have your workbook set to use the 1904
date system. In Office 2000 and XP, you can change the date setting in the
Tools/Options/Calculation menu. Turn off the check box next to the "1904 date system"
setting.
If you have your Windows Regional Settings configured to treat dates as MM/DD/YYYY
and you are using dates in Jet Reports as DD/MM/YYYY, you will either get unexpected
results or #VALUE, depending on which dates you are specifying. You can create the
same sort of problem with some database servers that have a built in date formula
specification. For some database servers, the date format can be configured
independently from Windows, so you need to know what date format the server is set to.
Troubleshooting
143
Filter Ranges and Excel
Always enclose in quotes any ranges containing ".." that you type directly into a formula
or into a parameter with the Excel function wizard. Without quotes, Excel may interpret
your range as a set of values from the worksheet. For example, if you enter
"49950..59950" including the quotes, Excel will interpret the filter as a simple text string.
Without the quotes, 49950..59950 means all the values in rows 49950 through 59950.
This is a very large array of cells. In this example, if you omit the quotes, Excel will go
into a very long calculation. Usually the only way to stop this calculation is to end the
Excel process. Consult your IT expert for instruction on how to end a process on your
computer.
This functionality of Excel has nothing to do with Jet Reports. However, Jet Reports
users are more likely to accidentally enter a range that causes Excel to perform a long
calculation because of the way ranges of values are entered using "..". These range
calculations are a basic feature of Excel and there is no way for Jet Reports to change this
behavior.
If a formula references a cell that contains a range with ".." you do not need to type the
quotes into the cell. The quotes are only required when you put the range directly into a
function parameter.
Formatting Cells as Text
Setting the Number format of a cell containing a Jet formula to Text can cause problems.
When you format a cell as Text, the formula itself becomes the value of the cell and
Excel does not evaluate it. Since Jet Reports assumes that Excel will evaluate any
formula entered into a cell, this can be a problem. It is best not to set the Number format
of a cell containing a Jet formula to Text.
Local Navision Databases
You cannot open a local Navision database both with the Navision client program and
with Jet Reports at the same time. You may get an error message that a file cannot be
created if you attempt this. As long as you have sufficient concurrent users in your
license file, you can open a database that is on a server by Navision clients and Jet
Reports at the same time.
Only Navision users have to worry about this issue.
Multiple Local Navision Database Connections
If you attempt to use more than one local database connection in a workbook that use the
same Navision client, you will see #VALUE for the results of one of them. When you use
Jet Reports Help
144
Debug, the function may calculate correctly. This is because when you run Debug, Jet
closes all other local database connections to analyze the cell you have selected. The
#VALUE occurs because each workbook can only have a single local database
connection open at a time for a particular Navision client. You can include data from
multiple server database connections on the same workbook with no problems. You can
also include data from multiple local Navision databases if they are accessing different
Navision clients or a different copy of the Navision client.
Only Navision users need to worry about multiple local database connections.
NF Field Not Found in Field Cache
If you create an NF function referencing an NL function with a field cache you may get
an error that the field was not found in the field cache. You must add this field to the field
cache in your NL function for the NF to work. While the field in your NF function may
be a valid field in the table, it is missing from the field cache in the NL function. A field
cache is required for a table that has no primary key and is recommended even for a table
with a primary key since it speeds up the report. For this reason, the Report Wizard and
dragging and dropping from the Jet Browser create field caches in the NL functions they
create.
A field cache may appear in an NL function in 2 forms, either a comma delimited list of
fields inside curly brackets: { "field1", "field2", "field3" }or a range of cell references:
$B$2:$G$2. To add another field to the field cache, either add a comma and then the
name of the field in quotes to the end of the list inside the curly brackets (in the first case)
or extend the cell range and type the name of the field into the last cell (in the second
case).
Visual FoxPro Errors
Mismatched OLE Database Provider
If you are using a different version of Visual FoxPro than the version of the Visual
FoxPro OLE database provider, you may receive the following error:
"Either EOF or BOF is true or the record has been deleted."
If this happens, please ensure that you have the version of the Visual FoxPro OLE
provider installed that matches the version of your Visual FoxPro database.
Only Jet Reports Universal users can connect to Visual FoxPro.
Wild Card Filters
Troubleshooting
145
The * and ? are wild card filters. Wild card filters cannot be used as part of a range filter
in the Navision connector. This means that filters, such as "A*..C*" are not valid.
Likewise, "<>A?..B?" is not valid. If you want to create a filter including everything
starting with A through C, the filter would simply be "A..CZ". If you want to create a
filter that will exclude everything starting with A through C, you need to think of the
filter as including everything except the things starting with A through C. When you
think of the filter as including values, then D.. is the filter you would use. Note that
"<>A*&<>B*&<>C*" would also work since no ranges are involved.
This topic applies only to the Navision connector.

147
Glossary
A
Argument: A specific value supplied as a function parameter.
D
Data Source: A Jet Reports connection to a database.
Database: A collection of data arranged for ease and speed of search and retrieval.
Examples include Microsoft Navision and Great Plains.
Design Mode: A Jet Reports mode which allows reports to be created with simple
worksheet functions.
Drilldown: A way to view the data which is being retrieved by a Jet Reports function.
E
Excel: Microsoft Excel is a popular computer program that allows you to create and edit
spreadsheets, which are used to store information in columns and rows that can
then be organized and/or processed.
F
Function: A procedure to perform some task. Functions can have input values called
parameters and return some value or values.
G
GL: A simple Excel worksheet function that combines multiple NL functions to report
from the General Ledger. This function is only available with Navision or Great
Plains databases.
J
Jet Browser: A window into your database, allowing you to scroll through the tables and
fields available, look at values for each field, or drilldown on the data.
Jet Reports: Jet Report is a Microsoft Excel Add-in that integrates Excel with Navision,
Great Plains, or any database that has an OLE or ODBC driver available so you
can create reports with simple worksheet functions. Instead of printing a report
and re-entering data into worksheets, you can enter formulas that read directly
from your database and refresh the data right in Excel.
Jet Scheduler: The Jet Scheduler allows you to schedule batches of reports to run at a
later time.
Jet Reports Help
148
N
NF: The NF Function is a shortcut. You can define which record you want with the NL
function and then you can retrieve multiple fields from that record with the NF
function. By using the NF function, you do not have to retype all the filters for
each field you want to retrieve.
NL: The Jet Reports general data retrieval function. The NL allows you to retrieve any
field from any record in any table. You can set up to ten filters to define which
record(s) you want.
NP: The NP function is a utility function which allows you to do certain tasks to speed
up your reports or make them more convenient. You can use NP to create date
filters, evaluate formulas or do array operations, among other things.
P
Parameter: An input value which must be supplied to all functions of a specific type.
For example, "What" is the first parameter to the NL, GL, and NU functions.
R
Report Designer: A person who is licensed to create Jet Reports.
Report Mode: A Jet Reports mode which shows valued retrieved from the database by
the Jet Reports functions.
Report Viewer: A person who is licensed to change report options and refresh data but
may not create reports or use other Jet Reports features.
V
Viewer: A person who is licensed to change report options and refresh data but may not
create reports or use other Jet Reports features.

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy