diff --git a/superset/assets/src/explore/controls.jsx b/superset/assets/src/explore/controls.jsx index 449cccc06de8..523a39037318 100644 --- a/superset/assets/src/explore/controls.jsx +++ b/superset/assets/src/explore/controls.jsx @@ -88,6 +88,8 @@ const D3_FORMAT_OPTIONS = [ [',.3f', ',.3f (12345.432 => 12,345.432)'], ['+,', '+, (12345.432 => +12,345.432)'], ['$,.2f', '$,.2f (12345.432 => $12,345.43)'], + ['DURATION', 'Duration in ms (66000 => 1m 6s)'], + ['DURATION_SUB', 'Duration in ms (100.40008 => 100ms 400µs 80ns)'], ]; const ROW_LIMIT_OPTIONS = [10, 50, 100, 250, 500, 1000, 5000, 10000, 50000]; diff --git a/superset/assets/src/setup/setupFormatters.js b/superset/assets/src/setup/setupFormatters.js index 7d6bd2c6bfae..9972caeb3ed0 100644 --- a/superset/assets/src/setup/setupFormatters.js +++ b/superset/assets/src/setup/setupFormatters.js @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -import { getNumberFormatter, getNumberFormatterRegistry, NumberFormats } from '@superset-ui/number-format'; +import { createDurationFormatter, getNumberFormatter, getNumberFormatterRegistry, NumberFormats } from '@superset-ui/number-format'; import { getTimeFormatterRegistry, smartDateFormatter, smartDateVerboseFormatter } from '@superset-ui/time-format'; export default function setupFormatters() { @@ -54,7 +54,9 @@ export default function setupFormatters() { .registerValue('.0%f', getNumberFormatter('.1%')) .registerValue('$,0', getNumberFormatter('$,.4f')) .registerValue('$,0f', getNumberFormatter('$,.4f')) - .registerValue('$,.f', getNumberFormatter('$,.4f')); + .registerValue('$,.f', getNumberFormatter('$,.4f')) + .registerValue('DURATION', createDurationFormatter()) + .registerValue('DURATION_SUB', createDurationFormatter({ formatSubMilliseconds: true })); getTimeFormatterRegistry() .registerValue('smart_date', smartDateFormatter)