One of the challenges in describing DXKeeper's filtering system is lack of a good metaphor. Its a widely used technique within computer science, where it goes by the name of "database views", but allusions to bandpass filters, photographic filters, air filters, acquarium filters, and cigarette filters all fall flat.
A Log is a list of QSOs. If your Log contains 6432 QSOs, you can't simultaneously view every QSO on the list because your monitor isn't large enough to display 6432 lines of text. So one thing a logging application must do is provide a means of viewing QSOs that overcomes monitor limitations. DXKeeper does this by providing a table of rows and columns, where each row displays a QSO, and the columns separate the items recorded in that QSO, e.g. callsign, frequency, mode, and start time. Since your monitor limits this table to showing, say, 50 QSOs, the table provides a vertically-oriented scrollbar along its right border; sliding this scrollbar allows you to see any 50 of your 6432 QSOs. While you can only see 50 QSOs at a time, we say that this table "contains" 6432 QSOs -- every QSO in your Log. In DXKeeper, this table lives on the Main window's Log QSOs tab, and is called the "Log Page Display"; the number of QSOs it contains is always shown in the Main window's title bar. You can resize DXKeeper's Main window to expand or contract the number of QSOs visible in the Log Page Display, but this has no effect on the number of QSOs contained in the Log Page Display.
There are lots of situations where we'd like to see a subset of the QSOs in our Log. When ragchewing with 7O1DX, for example, its nice to see a list of all previous QSOs, perhaps to be reminded of the joy of breaking through that 160m RTTY pileup. When requesting confirmation of a DX station managed by Joe W3HNK, you might want to see all other unconfirmed QSOs with stations handled by the same manager so you can include their outgoing cards in the same envelope. Most logging applications allow you to specify "search criteria" and display the results -- typically in an area dedicated to "search results".
In DXKeeper, the ability to display a subset of the all QSOs is accomplished via the Log Page Display. Instead of containing all QSOs in your Log, one can direct the Log Page Display to contain only QSOs whose CALLSIGN item is 701DX, or to contain only QSOs whose QSL_VIA item is W3HNK and whose QSL_RCVD item indicates that no confirmation has been received. Thus DXKeeper provides no separate area for search results - the Log Page Display does double duty, providing a means of viewing any QSO in your Log, or of viewing QSOs in your Log that satisfy specific criteria.
When you direct the Log Page Display to contain only QSOs with 7O1DX, DXKeeper's title bar changes from "6432 QSOs" to "7 QSOs", indicating the number of QSOs contained in the Log Page Display. It is important to note that the log itself is unmodified by these directives; it is the viewing mechanism -- the Log Page Display -- that is being adjusted. One can always redirect the Log Paged Display to contain all 6432 QSOs.
In DXKeeper, a "filter" is the means by which one specifies a subset of the Log to be displayed by the Log Page Display. When no filter is specified, the Log Page Display contains all QSOs in the Log. When the filter is set to
then the Log Page Display contains your 7 QSOs with 7O1DX.
When the filter is set to
- (MODE = 'CW') AND ((BAND = '20M') OR (BAND = '40M'))
then the Log Page Display contains only CW QSOs made on the 20 or 40 meter bands.
From these examples, we see that a filter is an arithmetic expression composed of "operators" (e.g. =, AND, OR), item names (CALL, MODE, BAND), and item values (701DX, CW, 20M, 40M). In DXKeeper, these expressions utilize a language named "Structured Query Language", often abbreviated SQL. Using SQL, we can precisely specify subsets of our Log to be contained in the Log Page Display. The price of this power is complexity: to specify a subset, one must know the syntax of SQL (e.g. certain item values must be enclosed in single quotes), one must know the list of valid item names, and one must know the format of the item values (e.g. BAND='20M' will work, but BAND='20' will fail).
To avoid this complexity, DXKeeper allows you to control the Log Page Display with simple graphical controls like textboxes, checkboxes, and buttons. Behind the scenes, DXKeeper translates your intentions into an SQL expression, and directs the Log Page Display accordingly. The Filter panel at the bottom of the Main window's Log QSOs panel allows you to key in a callsign (like 7O1DX) and click the Call button to see all previous QSOs with 7O1DX; this action on your part is translated to the SQL query
relieving you of the need to know about SQL syntax or item names. While composing an SQL expression requires detailed knowledge, the filter expressions that DXKeeper generates for you are quite readable. The Filter panel's caption thus shows the generated SQL query, reminding you of what subset of your Log's QSOs is currently contained in the Log Page Display.
With 701DX keyed into the Filter panel's textbox, clicking its DXCC button directs the Log Page Display to contain only QSOs whose DXCC entity is Yemen. Translating this to an SQL query is a little more work for DXKeeper: first it must determine that 7O1DX's DXCC entity is Yemen, and then it must determine the unambiguous DXCC entity code for Yemen, after which it can generate the QSL expression
Clicking the Filter panel button whose caption is X directs the Log Page Display to contain all QSOs in the log; it eliminates the filter.
DXKeeper's "Advanced Sorts, Filters, and Modifiers" window contains additional facilities for specifying Log Page Display filters; to view this window, click the button marked Adv at the bottom of the Main window's Log QSOs tab.
The "Advanced..." window's UTC Filter, Band Filter, and Mode filter panels make it easy to view subsets of your Log based on time ranges, frequency bands, or operating modes. Checking the Mode Filter panel's CW and RTTY boxes and then clicking that panel's Filter button will direct the Log Page Display to contain only QSOs whose mode is CW or RTTY. Once you specify a time range in the Advanced window's UTC filter, you can invoke it using the UTC button in the Filter panel of the Main window's Log QSOs tab.
The Advanced window's SQL panel provides the ability to specify filters directly using Structured Query Language. This is appropriate when the desired Log subset cannot be selected using the UTC, Band, or Mode filter panels, e.g.
- (BAND = '20M') and (MODE = 'CW')
or when more sophisticated matching is required, e.g. CALL like 'VK9N*'
which directs the Log Page Display to contain all QSOs whose callsigns begins with the letters VK9N; QSOs with VK9NS, VK9NL, and VK9ND would qualify. An introduction to SQL and its use in DXKeeper is provided in http://www.qsl.net/dxkeeper/Help/SQL.htm .
[:GettingStarted:Getting Started with DXLab]