This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Sybase Statistics Demystified
Derek Asirvadem • V2.1 • DRAFT • 20 Nov 11Sybase Statistics Demystified/1 Introduction/1 of 16
There are three types of Stats that Sybase can capture:
Of course Sybase actually captures only those Stats that you explicitly or implicitly request via the various flavours of UPDATE STATS command. That is where much of the confusion lies, and that is explained later.There are three kinds of what may be loosely called 'statistics' stored in the catalogue: • Column & ColumnGroup Stats are stored in sysstatistics; that is what is usually meant when the term Statistics is used, and that is the focus of this document• Index metrics (with two exceptions) are stored in systabstats. Some of these values are updated only by UPDATE STATISTICS and that is included.• Query metrics are stored in sysquerymetrics; that is excluded.
Also known asFor Each Sybase Can StoreColumn Density
ColumnGroup DensityColumn Histogram
Column StatsColumn
ColumnGroup ColumnGroup Stats
The output of the optdiag utility is used here, because most administrators are familiar with it. It is single-object oriented, or vertical; therefore, it is hard to navigate and follow, and voluminous.
2.1 Statistic Type
Statistics are very important. They form the basis of decisions that the Optimiser makes, when determining the Query Plan, and thus affect the performance of every query. The new Optimiser in Sybase ASE 15 is much more sensitive to Stats issues. More important, it uses Stats in many more places, to make many more decisions than before. Therefore it is now more important than ever, to understand Stats, and to implement regular UPDATE STATS as an integral part of database maintenance. The key criteria of Stats are:• they must be accurate, up-to-date, identifying the current content of the tables and columns• they must be relevant: maintaining Stats that are rarely used lengthens the maintenance window; missing
Stats causes the Optimiser to make incorrect decisions, which typically affect performance• they must be 'deep' enough to be useful• the decreasing size of the maintenance windowThis document is intended to assist any capable Administrator in covering all these requirements, efficiently. The Sybase manuals are poor, but in the area of Stats, they are abysmal; this document intends to overcome that obstacle. It is divided roughly into five parts:• which every DBA should become thoroughly familiar with• required for anyone coding their own reports, to inspect and manage their Stats• provides a detailed explanation of each flavour of the command• to work towards, rather than simple instructions, in order to produce an efficient and
relevant Stats updating in the shortest maintenance window (Customers only)•
Not so much for marketing purposes, but to identify how to structure your own reports, to obtain maximum benefit
Statistics for column: "Component"Last update of column statistics: Aug 11 2011 11:08:31:346AM
Range cell density: 0.0000000000000000 Total density: 0.1025191733659713 Range selectivity: default used (0.33) In between selectivity: default used (0.25) Unique range values: 0.0000000000000000 Unique total values: 0.0833333333333333 Average column width: default used (3.00)
2.2 Column Stats
Histogram for column: "Component"Column datatype: char(3)Requested step count: 20Actual step count: 24Sampling Percent: 10Out of range Histogram Adjustment is ON.
Stats can be rendered for Indices. Where an Index consists of many Columns, as is normal for Relational databases, Stats can be rendered for: the set of Columns, taken together; and for each step in the set. For example, where an Index such as:
is implemented, the columns and sequence are chosen purposely, on the basis that queries using:ServerServer, ComponentServer, Component, MetricServer, Component, Metric, DateTime
are expected. These are the Steps. Of the four steps, the first step is of course a single column (Column Stats and a Histogram are possible), and the next three steps are ColumnGroups (ColumnGroup Stats are possible). There are no Histograms per ColumnGroup, because they are more relevant at the Column, not ColumnGroup, level; ColumnGroup Densities are deemed adequate; and additional Histograms would require even more time to build. For the purpose of understanding, as a starting point, take it that a ColumnGroup is an Index.
2.5 ColumnGroup/Not IndexedAs Sybase progressed, two things were realised:a. that Stats should not be tightly related to Indices (which may be dropped and recreated, or replaced,
whereas Columns and their Stats are more permanent, and should remain, even if the related Index is not recreated)
b. ColumnGroups that are not Indexed are used in queries, and Stats are required for them.Therefore, for decades, Indices have not been tightly related to Stats, and ColumnGroups are supported either with an index that identifies them, or without. There is a relation between Columns (for which Stats are collected, and a Histogram is constructed) and Indices, but it is fluid, not a direct reference via indid.It is important to understand and use ColumnGroups (which are not part of Index ColumnGroup Steps; and not members of an Index), and to set up Stats for them. Any group of Columns that are frequently used in queries can be identified to ASE as a ColumnGroup, and Stats can be captured for them.Therefore, ColumnGroups are either implicitly derived from Indices or explicitly declared.
Statistics for column group: "Value", "Metric"Last update of column statistics: Aug 12 2011 8:51:12:780PM
Range cell density: 0.0032336605036902 Total density: 0.0037069975081228 Range selectivity: default used (0.33) In between selectivity: default used (0.25) Unique range values: 0.0030454474465094 Unique total values: 0.0032051282051282 Average column width: default used (20.00)
2.5.1 ColumnGroup Stats/Not IndexedFor each second and subsequent Step in an Indexed ColumnGroup, Sybase ASE can store density and selectivity Stats. The first Step is covered as a single Column.
2.4 ColumnGroup
Statistics for column group: "Server", "Component"Last update of column statistics: Aug 12 2011 7:14:13:426PM
Range cell density: 0.0000000000000000 Total density: 0.1025204531353392 Range selectivity: default used (0.33) In between selectivity: default used (0.25) Unique range values: 0.0000000000000000 Unique total values: 0.0833333333333333 Average column width: default used (3.00)
Statistics for column group: "Server", "Component", "Metric"Last update of column statistics: Aug 12 2011 7:14:13:426PM
Range cell density: 0.0000000000000000 Total density: 0.0092919949458528 Range selectivity: default used (0.33) In between selectivity: default used (0.25) Unique range values: 0.0000000000000000 Unique total values: 0.0087719298245614 Average column width: default used (20.00)
2.4.1 ColumnGroup Stats
Statistics for column group: "Server", "Component", "Metric", "DateTime"Last update of column statistics: Aug 12 2011 7:14:13:426PM
Range cell density: 0.0001743071291616 Total density: 0.0001743071291616 Range selectivity: default used (0.33) In between selectivity: default used (0.25) Unique range values: 0.0001743071291616 Unique total values: 0.0001743071291616 Average column width: default used (4.00)
• Actually, there are a few more Column and ColumnGroup Stats, but we will leave that for now• Index metrics and derived stats are not shown here, as they are not really Stats; they belong with the
Also known asFor Each Sybase Can StoreColumn Density
ColumnGroup DensityColumn Histogram
Column StatsColumn
ColumnGroup ColumnGroup Stats
For each second and subsequent Step in any identified ColumnGroup, Sybase ASE can store density and selectivity Stats. The first Step is covered as a single Column.
The Software Gems Help Histogram report may be a little clearer: • The Cells, Weight, Operator and Values remain unchanged, so that the
report can be compared against optdiag without issue• Range Cells are unchanged• Frequency Cells, including the Null Cell, remain empty (as per storage in
sysstatistics), and are thus differentiated. Missing Frequency Cells are more obvious.
• the special Weights (or ratios) of 1.0 and 0.0, have their trailing zeroes truncated, allowing non-zero Weights to be read more easily
2.6.3 Help Histogram
2.6.1 optdiag
2.6.2 Help Statistic
Table owner: "dbo"Table name: "SM_ComponentValue"
Statistics for column: "DateTime"Last update of column statistics: Aug 11 2011 11:08:31:346AM
Range cell density: 0.0118694362017804 Total density: 0.0898044360697021 Range selectivity: default used (0.33) In between selectivity: default used (0.25) Unique range values: 0.0118694362017804 Unique total values: 0.0666666666666667 Average column width: default used (4.00)
Histogram for column: "DateTime"Column datatype: smalldatetimeRequested step count: 20Actual step count: 28Sampling Percent: 10Out of range Histogram Adjustment is ON.
All Stats, for both ColumnGroups and Columns, are reported in the Software Gems Help Statistic report, horizontally, and in full context of each other. That report is expanded in section [10].
2.3.1 Cell
The Histogram stores detailed information re the actual data content (values) of a Column, and its distribution. That means DataType and length are an issue when storing Histograms, and the number of Cells (identified by the USING Cell VALUES parameter) is critical. The smallest number of functional, relevant cells should be determined and maintained: too many cells results in slow UPDATE STATS performance, with no gain in query performance; too few results in inadequate Stats, with a loss in performance.
There are three types of Cells. They may not be easy to differentiate in the optdiag report: • Range Cells are the most common, they are depicted
with a "<=" operator• Frequency Cells are depicted with "<" and refer the
the next Value (which is not stored, but optdiag replicates it in the report)
• The first Cell is always the Null Cell, a Frequency Cell for Null (representing the Null Values in the Column; it is always present, regardless of whether the Column allows Nulls).
• Both Range Cells and Frequency Cells are required for important Columns in large tables
Unfortunately, Cell is also known as Step; however this document will use the correct term.
This Sybase utility reports Stats on Columns, ColumnGroups and Histograms.
Table/ColumnGroup/Column Grp Index/Notice Un M Upd Updated Req Cell Hist Delta DensityRange DensityTotal Uniquens ValueUnique ValueRange ValueTotal
Describing this internal table as "denormalised" is incorrect: the data is beautifully Normalised. However, many types of data, or rows, are stored in the one table. It is therefore packed or folded.• That is undesirable in a Relational database, but in an internal catalogue of a server, particularly one that
contains a large amount of varied data (note DataType, actual data values, and volume of Cells), it is quite desirable.
• The Normalised version would be five tables, plus one for each DataType. • However, implementing colidarray as a variable length column, and doing so in an index, is a crime
against Nature which cannot be forgiven.There are seven types of data, or tables in the Normal sense, folded into one table.Notice there is no relation to sysindexes, despite the presence of the indid column. It is a relic from the early days, when Stats were directly related to indices, it is always zero. Likewise, statid is not used• Ensure your code is qualified to guard against breakage due to possible changes in the future:SELECTS ... WHERE indid = 0 AND statid = 0.
c79
...
moddate
c0
usedcount
formatid
partitionid
sequence
coldarray
id
Performing anything more than perfunctory administration requires some understanding of the Sybase Catalogue. It is invaluable in understanding the server, and appreciating why tasks must be performed in certain ways. The Statistics catalogue is no exception. Demystifying Statistics is equivalent to demystifying the Statistics catalogue.
3.1 The Table 3.2 Content/EntityThe easiest, and the best method of understanding data and how it relates to other data, is to model it as a Relational Database. The seven types of data, or distinct tables, stored in sysstatistics, and their relations to each other, are:
• Columns must exist for a table, they are the central focus of Stats• ColumnGroups, however, may not exist, since there are people who do not implement Stats for
Indices or Columns that are queried together. If they do exist, they are made up of Columns.• DataChange Counters per Column are just that, not really Stats, in a convenient storage location
(they will not be expanded further)• Histogram Cell Weight & Value are stored per Column. • The new Missing Stats per Column or ColumnGroup constitute logging of events, stored in the form
of Stats.• Like ColumnGroups, Indices may not exist, but if they do, they are made up of Columns, and a
Column may exist in more than one Index. If Stats are captured for them, it will be in the form of a ColumnGroup. That is the fluid relation between Column Stats and Indices, via ColumnGroups.
sysstatistics
c79...
statid
moddate
c0usedcount
formatid
ststatus
partitionid
sequence
colidarray
indidid
sysobjects
syscolumns
syspartitions
Is Enumerated As
ColumnStats
HistogramCell Weight
HistogramCell Value
ColumnGroupStats
Table
DataChangeCounter
Index
Familiarity with the Sybase catalogue will be helpful. Familiarity wih our Sybase 15 Data Model (which contains important explanations and additional facilities) will assist even further.
3.3 Content/RowAs we know, every row in a Relational Database must be unique, and uniquely identified by its Primary Key. The Primary Key Columns identify the row content:
It may be easier to understand in a relational diagram. Let's look at a Column first: colidarray consists of a single entry or an array of [1], a single colid, the PK of its parent, syscolumns.
Now let's tackle the ColumnGroup. Ensure that you understand 2.4 and 2.5 ColumnGroup. A Column may be a member of zero, one, or more ColumnGroups:
Just as the colid identifies a Column (within a table), the colidarray identifies an array of colids (within one table). The original Engineers have (brilliantly) used the Relational concept of Identifiers: the Identifier of a ColumnGroup is the list of Identifiers of its component Columns. They reference each other without additional Identifiers, and eliminate the need for an Associative table (or, it exists, and it is folded into sysstatistics, without repetition). (Again, that is acceptable in a server catalogue, but not in a database.)
This also, is easier to understand in a relational diagram. We can immediately identify:• Column rows (colidarray of 1 entry)• a ColumnGroup row (colidarray > 1 entry)• the members of ColumnGroup (contained in the ColumnGroup entry itself)
3.3.1 Column
3.3.2 ColumnGroup
100 Col_A
104 Col_A
102 Col_A
Table_T
Column Stats: Density & basic Distibution
Histogram Cell Value
Histogram Cell Weight
100 Col_A,Col_B
100 Col_A 100 Col_B
104 Col_A
102 Col_A
104 Col_A
102 Col_A
Table_T
ColumnGroup Stats: Density & basic distribution
• Together the Cell Weight and Cell Value comprise the Histogram, containing full data distribution• The depth of the Histogram (no of Cells) is as per default (20) or histogram tuning factor, the settable default orwhatever was previously set for the table via USING Cell VALUES
Warning• I have seen at least four different methods of 'interpreting' colidarray: every one of them uses
procedural processing (very slow for a set-processing engine) quite unnecessarily. Additionally, they are all wrong, in that every one of them additionally takes a laborious approach to unpacking colidarray: the task is simple, if one understands that it is simply an array of words (two bytes), each word being a single colid. Manually handling endian issues is stupefying, unnecessary in SQL.
• All our utilities use pure set-processing, and execute at server speeds, not at developer speeds.
The seven types of rows in sysstatistics, identified by formatid and colidarray, are as follows:
Where there are more then 80 Cells, sequence identifies rows in the series. Note: Weight & Value are stored in separate vectors: sequence and usedcount of Cell Weights do not match that of Cell Values
sequence
Type of Stats row (together with colidarray), as per the table below.formatid
>1 entry (ColumnGroup) One Foreign Key per entry (Column), referring to syscolumns
1 entry (Column) Foreign Key referring to syscolumnscolidarray
Partition level Stats; Foreign Key referring to syspartitionsnon-zero
zero Table level Statspartitionid
Foreign Key referring to sysobjectsid
ContentColumn
1 entry Histogram Cell Weight1 entry Histogram Cell Value
The rows in the Sybase catalogue for this table which are relevant to UPDATE STATISTICS operations, are as follows. The relations between Columns and ColumnGroups, and to indices are also shown:
The different UPDATE STATISTICS operations, and how they affect the different catalogue rows, are illustrated on the following pages.
A complete example may be useful to assist understanding. We will use a simple, Data Warehouse (Sixth Normal Form) table, with two indices. The table is APL, therefore the Clustered Index is real, and Range Queries are supported.
Full Stats (Densities and a Histogram) can be created for any Column.
While this document provides information that is absent from the manuals, it is not intended to replace the manuals; for full syntax and options, refer to the manual.
Continued ...
SM_ComponentValue
1 Creates/updates Column Stats for the Column2 Creates/updates Histogram for the Column
If an Index containing the column exists, it is used, otherwise the Clustered Index or Heap is read
IsolationUPDATE STATISTICS uses:• ISOLATION LEVEL 1 for APL• ISOLATION LEVEL 0 for DPL/DRL.
Any list of columns identified together and given to UPDATE STATISTICS in one command, form a ColumnGroup.
Continued ...
1 Creates/updates ColumnGroup Stats for the second and subequent Step in the group
2 Creates/updates Column Stats for the leading Column
3 Creates/updates Histogram for the leading Column
Record Filing Systems• These tend to have single-column indices, and many more of them• All except the Primary Key are non-unique• The value of ColumnGroups, and Steps, is lost: they must be added manually
SM_ComponentValue
If an Index containing the column list exists, it is used, otherwise the Clustered Index or Heap is read
Resource UseThe leading column in an Index (if one can be used) is already sorted. Non-leading columns need to be sorted: that requires a worktable in tempdb, and sort buffers in the procedure cache.
Second IndexNote that, in this example, at this point, there is no value in updating Stats for the second index, issuing: UPDATE INDEX STATISTICS SM_ComponentValue U_ComponentMetricbecause the Stats for all the Columns in that index have just been freshly updated. Instead, use: UPDATE STATISTICS SM_ComponentValue (Server, Component, Metric, Datetime)Where performance and the maintenance window are a consideration, particularly when the number of Cells is large, a redundant duplication of effort with no gain, is to be avoided.
UPDATE INDEX STATISTICS Table [Index]
100 Server,DateTime
100 Server,DateTime,Component
100 Server,DateTime,Component,Metric
100 Server 100 DateTime 100 Metric100 Component
V102 Server
104 Server W102 DateTime V 102 Metric V102 Component V
104 Component W 104 Metric W104 DateTime W
• Takes all Columns in the Index as a ColumnGroup , providing full Stats for each Column• If the Index is omitted, all indices for the table are processed, without doubling up at the Column level
Consideration• The leading column in an Index is already sorted. A Sort is required for the second and subsequent Columns in the group: that requires a worktable in tempdb, and sort buffers in the procedure cache.• WITH SAMPLING = Percent
• applies to non-leading and unindexed Column• does not update Column & ColumnGroup Stats (updates Histogram only)• accesses the base table (leaf-level of CI for APL; Heap for DPL/DRL)
104 Value W102 Value V102 DateTime V 102 Metric V102 Component V
104 Component W 104 Metric W104 DateTime W
8
UPDATE STATISTICS SM_ComponentValue UC_PK
UPDATE STATISTICS Table [Index]
100 Server,DateTime
100 Server,DateTime,Component
100 Server,DateTime,Component,Metric
100 Server
V102 Server
104 Server W
The older, deprecated form of the command, If Index is omitted, all indices for the table are processed
Automatically executes the older form, if the table is populated, so ensure that UPDATE INDEX STATISTICS is executed afterward.CREATE ... INDEX Table ( Col_1 [, Col_2...] )
Continued ...
1 Creates/updates ColumnGroup Stats for the second and subequent Step in the group
2 Creates/updates Column Stats for the leading Column
3 Creates/updates Histogram for the leading Column
SM_ComponentValue.UC_PK
systabstats
SM_ComponentValue.UC_PKIndex MetricsCluster Ratio Counts
104 Server W102 DateTime V 102 Metric V102 Component V
104 Component W 104 Metric W104 DateTime W 104 Value W102 Value V
100 Server,Component
100 Server,Component,Metric
100 Server,Component,Metric,DateTime
100 Value,Metric
100 Value
9
UPDATE TABLE STATISTICS SM_ComponentValue
UPDATE TABLE STATISTICS TableEXEC sp_flushstats TableThe Checkpoint task updates systabstats periodically, from memory structures, based on recovery interval. Additionally, either of the above commands may be used.
Indicates that ASE reported that Stats for the identified Column or Column Group are Missing (if such is being captured). This treatment presents it in the context of the rest of the Stats, and thus allows considered evaluation, that would otherwise be isolated. nUpd is the no of occasions the Stats were found to be missing (low occurrences can be safely ignored). Missing count is particularly useless in the absence of used count for Stats, as there is nothing to compare against, but it does provide a flag for sites that do not administer Stats.
The number of Requested & Actual Cells in the Histogram
The number of times this Statistic has been updated, and datetime of the last update
Very important single indicator, even for non-unique columns, once it is understood
Column......
ColumnGroup......
Column
Histogram
ColumnGroup
Table
The Density (Statistics) for either a Column or a ColumnGroup. ValueRange/Total are shown only if they differ from the Density
Data Change in the Column since Stats were last updated (constrained to 999 for sanity)
ColumnGroup:Index the first Index in which the ColumnGroup is indexed (matches the leading columns). If there is more than one, the remainder are identified thus:
+[n] the ColumnGroup is indexed an additional n times (identifying possible duplicate indices)Column:
Index the first Index in which the Column is indexed (matches the leading column). If there is more than one, the remainder are identified thus:+[n] the Column is indexed an additional n times (identifying possible duplicate indices)
(Index) the first Index in which the Column appears as a non-leading column. If there in more than one, the remainder are identified thus: +(n) the Column appears in n additional indices
The number of ColumnGroups this Column appears in. ColumnGroups are readily identifiable from the few lines immediately above
The number of rows used to store the table level Histogram for the Column: must be at least 2
Distinct values for the Column or ColumnGroup determined by Stats
The main identifier in the report, each row represents either a Table, or a ColumnGroup Stat, or a Column Stat, that has been stored. For ease of reference, the report is ordered by: Table ColumnGroups Columns
The named Index is Unique
This page describes the content of the Software Gems Help Statistic report. In its default operation, Columns and ColumnGroups Stats are reported at the table level, partition level Stats are not shown. The report shows all Column and ColumnGroup Stats for the tables requested; allows Columns to be easily related to their ColumnGroups and Indices. The Histograms can be viewed via Help Histogram. For detailed information in other areas, refer to the Help Table, Help Index or Help Partition reports (derived stats and index metrics belong with the index).
Table entries are useful in organising the Help Statistic report. They are shown here with the information relevant to the analysis (these columns are overloaded):
Grp [number of indices]Un [number of unique indices]Req [number of partitions]Cell number of Cells in the table level Histogram for all ColumnsHist number of rows used to store the table level Histogram for all ColumnsValueUnique number of rows in the table
Table/ColumnGroup/Column Grp Index/Notice Un M Upd Updated Req Cell Hist Delta DensityRange DensityTotal Uniquens ValueUnique ValueRange ValueTotal
The number of Cells in the table level Histogram for the Column
For partitioned tables, the number of Cells in the partition level Histogram for the Column
Column
Partition
ColumnGroup
Partition
Each row represents either a Table, or a ColumnGroup Stat, or Column Stat that has been stored. For ease of reference, the report is ordered by: Table ColumnGroup (table level) ColumnGroup.Partition (partition level)
The row count for the table (table entry) or Partition (partition entry). This should be evaluated against ValueUnique determined by Stats
The number of rows used to store the table level Histogram for the Column
As per the previous page, in its default execution, the Help Statistic report provides information on Stats at the table level. For partitioned tables, Sybase automatically stores ColumnGroup and Column Stats (including the Histograms) for each partition. For administrators who manage their Stats at the partition partition level, such a report is provided, the additional rows and columns are described here.
The concept is, the Column or ColumnGroup exists in each partition; therefore partition is below Column or ColumnGroup. This is consistent with the optdiag report.
For partitioned tables, the number of rows used to store the partition level Histograms for the Column
ColumnGroup Stats: 1 x Table p x Partition
Histograms:: 1 x Table p x Partition
Column Stats: 1 x Table p x Partition
Column
Histogram
ColumnGroup
Table
Table/ColumnGroup/Column.Parttn Grp Index/Notice Un M Upd Updated Req CellT CellP HistT HistP Delta DensityRange DensityTotal Uniquens Row ValueUnique ValueRange ValueTotal
Table entries are useful in organising the Help Statistic report. They are shown here with the information relevant to the analysis (these columns are overloaded):
Grp [number of indices]Un [number of unique indices]Req [number of partitions]Cell number of Cells in the table level Histogram for all ColumnsHist number of rows used to store the table level Histogram for all ColumnsValueUnique number of rows in the table
For partitioned tables:CellT number of Cells in the table level Histogram for all ColumnCellP number of Cells in the partition level Histogram for all ColumnHistT number of rows used to store the table level Histogram for all ColumnsHistP number of rows used to store the partition level Histogram for all Columns
The Help Histogram report provides full details of the Histograms for the requested tables. It is an adjunct to the Help Statistic report, which should satisfy most needs, however there are times when the full extent of Statistics detail needs to be inspected. In order to allow verification of the data, it matches the optdiag report exactly; but is provided in:
(a) a much more readbale and understandable format, (b) with the confusing bits removed(c) as with all our software, it uses the set-processing power of the engine, and thus
executes in set-processing speeds, not at developer speeds. This, and its absence of failure, differentiate it from the free "software" available on the net.
Advantage over optdiagIt is provided as a stored procedure, which makes it substantially easier to access and use, and the report is therefore a result set, which means the data is also easier to access, use, transfer to a spreadsheet, etc. The improved readability is afforded by:• notable values of 0.0 and 1.0 in the Weight being shortened (or, zero-fill removed):
• Null Values are shown as an empty cell, and therefore more obvious• Frequency Cells are therefore more obvious• the Null Cell, is more obvious, and • differentiated from the minimum Value cell
• repeated values (incorrectly called "duplicated values" in the manuals) are not repeated: • this makes Frequency stand out from Range cells
• the empty space makes the ordinary Weight and Values stand out; the report otherwise is a fat rectangular block of unreadable numbers
This allows:• quick problem diagnosis• accurate problem diagnosis (eliminate errors and reversals)• the minimum Stats required to be easily identified and executed
The formatted option of the Help Histogram report combines the essentials of the Statistics [10] and the full Histogram [12] into one report, intended for landscape printing. The Histogram remains vertical, but it is displayed in three columns, immediately below the Column Statistics. It is particulary useful when dealing with a small number of tables.