Filtering QSOs
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 analogies 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 all QSOs 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
- CALL='7O1DX'
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 (and pronounced "sequel"). 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 type 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
- CALL='7O1DX'
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 typed 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 SQL expression
- DXCCID='492'
To use the DXCC button to locate QSOs with a deleted DXCC entity, type the deleted entity's DXCC prefix into the Filter panel textbox preceded by the ~ character. To locate QSOs with Serrana Bank, for example, type ~HK0S into the Filter textbox and click the DXCC button.
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 respectively.
Checking the Band Filter panel's 30M, 17M, and 12M boxes and then clicking that panel's Filter button will direct the Log Page Display to contain only QSOs made on the WARC bands
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.
You can specify a date-and-time range in the Advanced window's UTC filter panel by specifying an interval (in minutes) before and after a specified date-and-time, or by specifying a beginning date-and-time, and an ending-date-and-time
- if no time is specified in a date-and-time, 00:00Z is assumed
invoke the filter by clicking the UTC Filter panel's Filter button.
The Advanced window's SQL panel provides the ability to specify custom filters directly using Structured Query Language that can be invoked by clicking a button in the Filter panel on the Main window's Log QSOs tab. 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.dxlabsuite.com/dxkeeper/Help/SQL.htm . Step-by-step instructions for defining a custom SQL filter can be found here.
Note that you can also type an SQL expression into the textbox in the Filter panel at the bottom of the Main window's Log QSOs panel, and then depress the CTRL key while striking the S key to filter the Log Page Display with that SQL expression. This is handy for quickly filtering the Log Page Display for a particular band or mode, e.g.
- MODE='FT8'
Selecting QSOs
QSOs can be selected by setting their Select items to Y. The Log Page Display can be filtered to contain all selected QSOs by click the Sel button in the Filter panel at the bottom of the Main window's Log QSOs panel, or by including the term (APP_DXKEEPER_SELECT='Y') in an SQL filter.