Scale.NiceRange¶
Computes a "nice" axis range with rounded min, max, and tick interval Returns values suitable for human-friendly axis labelling
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| dataMin | NUMERIC VAL | Minimum value from source data | ||
| dataMax | NUMERIC VAL | Maximum value from source data | ||
| maxTicks | INT64 | 5 |
Optional: Desired maximum number of ticks. Minimum is 2. Defaults to 5 | |
| includeZero | BOOLEAN | FALSE() |
Optional: Whether to include zero in the range when data is fully positive. Defaults to FALSE. |
TABLE Single-row table with @NiceMin, @NiceMax, @NiceInterval, @NiceTickCount
function 'DaxLib.SVG.Scale.NiceRange' =
(
dataMin: NUMERIC VAL,
dataMax: NUMERIC VAL,
maxTicks: INT64 = 5,
includeZero: BOOLEAN = FALSE()
) =>
VAR _MaxTicks = IF( ISBLANK( maxTicks ) || maxTicks < 2, 5, maxTicks )
VAR _IncludeZero = IF( ISBLANK( includeZero ), FALSE(), includeZero )
VAR _DataMin = IF( _IncludeZero && dataMin > 0, 0, dataMin )
VAR _DataMax = dataMax
VAR _Range = _DataMax - _DataMin
VAR _NiceInterval =
IF(
_Range = 0,
IF(
_DataMax = 0,
1,
DaxLib.SVG.Scale.NiceNum( ABS( _DataMax ) * 0.2 )
),
DaxLib.SVG.Scale.NiceNum( _Range / ( _MaxTicks - 1 ) )
)
VAR _NiceMin = INT( _DataMin / _NiceInterval ) * _NiceInterval
VAR _NiceMax = -INT( -_DataMax / _NiceInterval ) * _NiceInterval
VAR _NiceTickCount = INT( ( _NiceMax - _NiceMin ) / _NiceInterval ) + 1
RETURN
ROW(
"@NiceMin", _NiceMin,
"@NiceMax", _NiceMax,
"@NiceInterval", _NiceInterval,
"@NiceTickCount", _NiceTickCount
)