Dashboards & Visualizations

Does Dashboard Studio force time-like string to not be string type?

yuanliu
SplunkTrust
SplunkTrust

I first notice that Dashboard Studio's input configuration UI sometimes treats a time string as "number"; as a result, that input would not even be populated.  I had to use tostring or another trick to force the UI to accept it as string.

After trying for two days, I haven't been able to reproduce the "number" scenario with trivial data.  With trivial data, DS's configuration UI always treats a time string as "time" (as opposed to "string") unless otherwise forced.  In addition to strange effects in input selector (see example below), DS also passes token of type "time" in a specific format that may be different from the original string.  This may also be undesired.

Here is a sample dashboard to illustrate this.  Source data:

timestring_value
2026-01-23 11:44:252026-01-23 11:44:25
2026-01-23 11:44:252026-01-23 11:44:25
2026-01-27 11:44:252026-01-27 11:44:25
2026-01-27 11:44:252026-01-27 11:44:25
2026-01-27 11:44:252026-01-27 11:44:25
2026-01-29 11:44:252026-01-29 11:44:25
2026-01-30 11:44:252026-01-30 11:44:25
2026-01-30 11:44:252026-01-30 11:44:25
2026-01-31 11:44:252026-01-31 11:44:25
2026-01-31 11:44:252026-01-31 11:44:25
2026-01-31 11:44:252026-01-31 11:44:25

As shown, timestring is of format "%F %T", which a white space between date and time.  The idea is to use the date part as label and pass the timestring as token value.  For this, I tried several ways to obtain single-value timestring such as values() stats function, max() stats function, groupby timestring, and mvexpand timestring.  I also tried different ways to obtain label from timestring including using rex command and using replace function.  To make values very clear in each case, I use top panels to show output from respective searches for the token; these outputs include an evaluation of type of timestring and label to verify that Splunk search shows all of them as String.  The bottom panels simply displays the token value as passed by Dashboard Studio.  As shown, all these token values are transformed into "%FT%T", i.e., with letter "T" between date and time.

 

{
    "title": "Dashboard Studio thinks time string is other than string",
    "description": "",
    "inputs": {
        "input_1kIxDHKk": {
            "context": {
                "formattedConfig": {
                    "number": {
                        "prefix": ""
                    }
                },
                "formattedStatics": ">statics | formatByType(formattedConfig)",
                "label": ">primary | seriesByName(\"label\") | renameSeries(\"label\") | formatByType(formattedConfig)",
                "statics": [],
                "value": ">primary | seriesByName(\"timestring\") | renameSeries(\"value\") | formatByType(formattedConfig)"
            },
            "dataSources": {
                "primary": "ds_Uh3WYGcG"
            },
            "options": {
                "items": ">frame(label, value) | prepend(formattedStatics) | objects()",
                "selectFirstSearchResult": true,
                "token": "groupby_rex_tok"
            },
            "title": "groupby with rex label",
            "type": "input.dropdown"
        },
        "input_2qavhtpJ": {
            "context": {
                "formattedConfig": {
                    "number": {
                        "prefix": ""
                    }
                },
                "formattedStatics": ">statics | formatByType(formattedConfig)",
                "label": ">primary | seriesByName(\"timestring\") | renameSeries(\"label\") | formatByType(formattedConfig)",
                "statics": [],
                "value": ">primary | seriesByName(\"timestring\") | renameSeries(\"value\") | formatByType(formattedConfig)"
            },
            "dataSources": {
                "primary": "ds_GAZj9qSN"
            },
            "options": {
                "items": ">frame(label, value) | prepend(formattedStatics) | objects()",
                "selectFirstSearchResult": true,
                "token": "max_timestring_tok"
            },
            "title": "max timestring",
            "type": "input.dropdown"
        },
        "input_R3Q1RvBK": {
            "context": {
                "formattedConfig": {
                    "number": {
                        "prefix": ""
                    }
                },
                "formattedStatics": ">statics | formatByType(formattedConfig)",
                "label": ">primary | seriesByName(\"label\") | renameSeries(\"label\") | formatByType(formattedConfig)",
                "statics": [],
                "value": ">primary | seriesByName(\"timestring\") | renameSeries(\"value\") | formatByType(formattedConfig)"
            },
            "dataSources": {
                "primary": "ds_nZMqnAeL"
            },
            "options": {
                "items": ">frame(label, value) | prepend(formattedStatics) | objects()",
                "selectFirstSearchResult": true,
                "token": "mvexpand_rex_tok"
            },
            "title": "mvexpand with rex label",
            "type": "input.dropdown"
        },
        "input_qjIV5Ix1": {
            "context": {
                "formattedConfig": {
                    "number": {
                        "prefix": ""
                    }
                },
                "formattedStatics": ">statics | formatByType(formattedConfig)",
                "label": ">primary | seriesByName(\"label\") | renameSeries(\"label\") | formatByType(formattedConfig)",
                "statics": [],
                "value": ">primary | seriesByName(\"timestring\") | renameSeries(\"value\") | formatByType(formattedConfig)"
            },
            "dataSources": {
                "primary": "ds_beX8QYoY"
            },
            "options": {
                "items": ">frame(label, value) | prepend(formattedStatics) | objects()",
                "selectFirstSearchResult": true,
                "token": "label_replace_tok"
            },
            "title": "label by replace",
            "type": "input.dropdown"
        }
    },
    "defaults": {
        "dataSources": {
            "ds.search": {
                "options": {
                    "queryParameters": {
                        "earliest": "$global_time.earliest$",
                        "latest": "$global_time.latest$"
                    }
                }
            }
        },
        "visualizations": {
            "global": {
                "showProgressBar": true
            }
        }
    },
    "visualizations": {
        "viz_93ySZ5Cc": {
            "dataSources": {
                "primary": "ds_Uh3WYGcG"
            },
            "description": "| stats count as _count by timestring | rex field=timestring \"(?<label>\\S+)\" | sort - label | eval v_type = typeof(timestring), l_type = typeof(label) | fields label l_type timestring v_type",
            "options": {
                "columnFormat": {
                    "l_type": {
                        "width": 84
                    },
                    "label": {
                        "width": 86
                    },
                    "timestring": {
                        "width": 136
                    }
                },
                "showInternalFields": false
            },
            "title": "groupby with rex label",
            "type": "splunk.table"
        },
        "viz_HaKyhXKv": {
            "dataSources": {
                "primary": "ds_sfp5IIKQ"
            },
            "type": "splunk.table"
        },
        "viz_KJJE0cri": {
            "dataSources": {
                "primary": "ds_GAZj9qSN"
            },
            "description": "| stats max(timestring) as timestring by _value | eval v_type = typeof(timestring) | sort - timestring",
            "options": {
                "columnFormat": {
                    "timestring": {
                        "width": 127
                    }
                },
                "showInternalFields": false
            },
            "title": "max timestring",
            "type": "splunk.table"
        },
        "viz_SMBNQ4XA": {
            "dataSources": {
                "primary": "ds_nZMqnAeL"
            },
            "description": "| stats values(timestring) as timestring | mvexpand timestring | rex field=timestring \"(?<label>\\S+)\" | eval v_type = typeof(timestring), l_type = typeof(label) | sort - label | fields label l_type timestring v_type",
            "options": {
                "columnFormat": {
                    "label": {
                        "width": 98
                    },
                    "timestring": {
                        "width": 158
                    }
                },
                "showInternalFields": false
            },
            "title": "mvexpand with rex label",
            "type": "splunk.table"
        },
        "viz_UsOo59WW": {
            "dataSources": {
                "primary": "ds_beX8QYoY"
            },
            "description": "| stats values(timestring) as timestring by _value | rex field=timestring \"(?<label>\\S+)\" | eval v_type = typeof(timestring), l_type = typeof(label) | sort - label | fields label l_type timestring v_type",
            "options": {
                "columnFormat": {
                    "l_type": {
                        "width": 93
                    },
                    "label": {
                        "width": 108
                    },
                    "timestring": {
                        "width": 147
                    }
                },
                "showInternalFields": false
            },
            "title": "label by replace",
            "type": "splunk.table"
        },
        "viz_amq7ntem": {
            "containerOptions": {},
            "dataSources": {
                "primary": "ds_lWSFXLao"
            },
            "options": {
                "columnFormat": {
                    "max_timestring_tok": {
                        "width": 190
                    }
                }
            },
            "showLastUpdated": false,
            "showProgressBar": true,
            "type": "splunk.table"
        },
        "viz_bMEWY9PX": {
            "dataSources": {
                "primary": "ds_z6WkSe6U"
            },
            "options": {
                "columnFormat": {
                    "label_replace_tok": {
                        "width": 90
                    }
                }
            },
            "type": "splunk.table"
        },
        "viz_dvN9WkEw": {
            "dataSources": {
                "primary": "ds_Nwgz464R"
            },
            "options": {
                "showInternalFields": false
            },
            "type": "splunk.table"
        }
    },
    "dataSources": {
        "ds_34OFi4Mu": {
            "name": "multivalue timestring",
            "options": {
                "query": "| makeresults format=csv data=\"timestring\n2026-01-23 11:44:25\n2026-01-23 11:44:25\n2026-01-27 11:44:25\n2026-01-27 11:44:25\n2026-01-27 11:44:25\n2026-01-29 11:44:25\n2026-01-30 11:44:25\n2026-01-30 11:44:25\n2026-01-31 11:44:25\n2026-01-31 11:44:25\n2026-01-31 11:44:25\"\n| eval _value = timestring\n",
                "queryParameters": {
                    "earliest": "-24h@h",
                    "latest": "now"
                }
            },
            "type": "ds.search"
        },
        "ds_GAZj9qSN": {
            "name": "max timestring",
            "options": {
                "extend": "ds_34OFi4Mu",
                "query": "| stats max(timestring) as timestring by _value\n| eval v_type = typeof(timestring)\n| sort - timestring"
            },
            "type": "ds.chain"
        },
        "ds_Nwgz464R": {
            "name": "timestring as groupby passed",
            "options": {
                "query": "| makeresults format=csv data=\"groupby_rex_tok\n$groupby_rex_tok$\"\n| eval type = typeof(groupby_rex_tok)",
                "queryParameters": {
                    "earliest": "-24h@h",
                    "latest": "now"
                }
            },
            "type": "ds.search"
        },
        "ds_Uh3WYGcG": {
            "name": "timestring as groupby",
            "options": {
                "extend": "ds_34OFi4Mu",
                "query": "| stats count as _count by timestring\n| rex field=timestring \"(?<label>\\S+)\"\n| sort - label\n| eval v_type = typeof(timestring), l_type = typeof(label)\n| fields label l_type timestring v_type"
            },
            "type": "ds.chain"
        },
        "ds_beX8QYoY": {
            "name": "label from replace",
            "options": {
                "extend": "ds_34OFi4Mu",
                "query": "| stats values(timestring) as timestring by _value\n| eval label=replace(timestring, \"(\\S+).+\", \"\\1\")\n| eval v_type = typeof(timestring), l_type = typeof(label)\n| sort - label\n| fields label l_type timestring v_type"
            },
            "type": "ds.chain"
        },
        "ds_lWSFXLao": {
            "name": "time string passed",
            "options": {
                "query": "| makeresults format=csv data=\"max_timestring_tok\n$max_timestring_tok$\"\n| eval type = typeof(max_timestring_tok)",
                "queryParameters": {
                    "earliest": "-24h@h",
                    "latest": "now"
                }
            },
            "type": "ds.search"
        },
        "ds_nZMqnAeL": {
            "name": "mvexpand with rex label",
            "options": {
                "extend": "ds_34OFi4Mu",
                "query": "| stats values(timestring) as timestring\n| mvexpand timestring\n| rex field=timestring \"(?<label>\\S+)\"\n| eval v_type = typeof(timestring), l_type = typeof(label)\n| sort - label\n| fields label l_type timestring v_type"
            },
            "type": "ds.chain"
        },
        "ds_sfp5IIKQ": {
            "name": "mvexpand timestring passed",
            "options": {
                "query": "| makeresults format=csv data=\"mvexpand_rex_tok\n$mvexpand_rex_tok$\"\n| eval type = typeof(mvexpand_rex_tok)",
                "queryParameters": {
                    "earliest": "-24h@h",
                    "latest": "now"
                }
            },
            "type": "ds.search"
        },
        "ds_z6WkSe6U": {
            "name": "time string passed by label",
            "options": {
                "query": "| makeresults format=csv data=\"label_replace_tok\n$label_replace_tok$\"\n| eval type = typeof(label_replace_tok)",
                "queryParameters": {
                    "earliest": "-24h@h",
                    "latest": "now"
                }
            },
            "type": "ds.search"
        }
    },
    "layout": {
        "globalInputs": [
            "input_2qavhtpJ",
            "input_qjIV5Ix1",
            "input_1kIxDHKk",
            "input_R3Q1RvBK"
        ],
        "layoutDefinitions": {
            "layout_1": {
                "options": {
                    "height": 960,
                    "width": 1440
                },
                "structure": [
                    {
                        "item": "viz_KJJE0cri",
                        "position": {
                            "h": 339,
                            "w": 273,
                            "x": 0,
                            "y": 0
                        },
                        "type": "block"
                    },
                    {
                        "item": "viz_amq7ntem",
                        "position": {
                            "h": 136,
                            "w": 273,
                            "x": 0,
                            "y": 339
                        },
                        "type": "block"
                    },
                    {
                        "item": "viz_UsOo59WW",
                        "position": {
                            "h": 339,
                            "w": 376,
                            "x": 273,
                            "y": 0
                        },
                        "type": "block"
                    },
                    {
                        "item": "viz_bMEWY9PX",
                        "position": {
                            "h": 136,
                            "w": 376,
                            "x": 273,
                            "y": 339
                        },
                        "type": "block"
                    },
                    {
                        "item": "viz_93ySZ5Cc",
                        "position": {
                            "h": 339,
                            "w": 403,
                            "x": 649,
                            "y": 0
                        },
                        "type": "block"
                    },
                    {
                        "item": "viz_dvN9WkEw",
                        "position": {
                            "h": 136,
                            "w": 403,
                            "x": 649,
                            "y": 339
                        },
                        "type": "block"
                    },
                    {
                        "item": "viz_SMBNQ4XA",
                        "position": {
                            "h": 339,
                            "w": 388,
                            "x": 1052,
                            "y": 0
                        },
                        "type": "block"
                    },
                    {
                        "item": "viz_HaKyhXKv",
                        "position": {
                            "h": 136,
                            "w": 388,
                            "x": 1052,
                            "y": 339
                        },
                        "type": "block"
                    }
                ],
                "type": "grid"
            }
        },
        "options": {},
        "tabs": {
            "items": [
                {
                    "label": "New tab",
                    "layoutId": "layout_1"
                }
            ]
        }
    }
}

 

Screenshot 2026-02-01 at 10.14.09 PM.png

As the screenshot shows, even with labels correctly extracted, when DS considers the field as type time, the input dropdown uses extracted date followed by letter "T" and 0 hour 0 minute 0 second.  Are these all intentional?

Labels (2)
0 Karma
Got questions? Get answers!

Join the Splunk Community Slack to learn, troubleshoot, and make connections with fellow Splunk practitioners in real time!

Meet up IRL or virtually!

Join Splunk User Groups to connect and learn in-person by region or remotely by topic or industry.

Get Updates on the Splunk Community!

Why Splunk Customers Should Attend Cisco Live 2026 Las Vegas

Why Splunk Customers Should Attend Cisco Live 2026 Las Vegas     Cisco Live 2026 is almost here, and this ...

What Is the Name of the USB Key Inserted by Bob Smith? (BOTS Hint, Not the Answer)

Hello Splunkers,   So you searched, “what is the name of the usb key inserted by bob smith?”  Not gonna lie… ...

Automating Threat Operations and Threat Hunting with Recorded Future

    Automating Threat Operations and Threat Hunting with Recorded Future June 29, 2026 | Register   Is your ...