I’m working with a customized dashboard template in ad-hoc reporting and running into a frustrating issue. When I apply global filters at the dashboard level, only some widgets respond while others show unfiltered data.
The dashboard has 6 widgets total - 3 charts and 3 tables. The global date range filter works fine on 2 charts but completely ignores the third chart and all table widgets. I’ve checked the widget query bindings in the JSON and they all reference the same dataset.
Has anyone encountered this before? I’m wondering if there’s something specific in the dashboard JSON structure or filter configuration that I’m missing. The inconsistent behavior is causing confusion for end users who expect all widgets to reflect the same filtered view.
I exported the dashboard JSON and found the issue - the state object was missing references for some widgets. I’m trying to add them manually but getting syntax errors. Could someone share an example of the correct structure?
I’ve seen this before! The issue is usually in how the global filter is bound to each widget’s SAQL query. Can you check if all your widgets are using the same binding syntax? Sometimes when you copy widgets, the filter references get disconnected.
You need to ensure the global filter is properly defined in the dashboard state section and then each widget’s query must explicitly reference that filter parameter. The binding happens through the step parameter in your SAQL. Check your dashboard JSON for the ‘state’ object - that’s where global filters are defined. Then verify each widget’s query includes the correct filter reference like q = load "dataset"; q = filter q by date in ["{{cell(dateFilter.selection, 0, "start")}}"..].
Let me walk you through the complete solution for getting global filters to work consistently across all widgets.
Dashboard JSON Structure:
First, verify your dashboard’s state section properly defines the global filter. This should be at the root level of your dashboard JSON:
"state": {
"filters": [
{"name": "dateFilter", "type": "date"}
]
}
Widget Query Bindings:
Each widget must reference this filter in its query parameter. For the widgets that aren’t responding, you need to update their step definitions. Here’s the pattern:
"query": "q = load YourDataset; q = filter q by 'Date' in {{dateFilter.selection}}; ..."
The key is the {{dateFilter.selection}} binding - this connects the widget query to your global filter state.
Global Filter Configuration:
In your dashboard editor, ensure each non-working widget has the filter binding enabled:
- Select the widget
- Open the query editor
- Look for the “Use global filters” checkbox or parameter
- If editing JSON directly, add the filter reference to the widget’s parameters section
For your specific case with 3 non-responding widgets, you’ll need to:
- Export the dashboard JSON and locate each problematic widget by its ID
- Check the step definition for each widget - look for the “query” or “pigql” property
- Add the filter binding if missing: ensure the query includes the global filter variable
- Update the widget parameters to include filter dependencies
- Verify the state bindings - each widget should list the global filters it consumes
A common mistake is that table widgets often need explicit column mapping to the filter field. If your tables use a different date field name than your charts, the binding won’t work even if the syntax is correct.
After making these changes, re-import the JSON and test each widget individually. The filter should now apply consistently across all 6 widgets. If you still see issues with specific widgets, check that the dataset fields match exactly - case sensitivity matters in SAQL queries.
One more tip: use the dashboard inspector (available in edit mode) to verify filter propagation in real-time. It will show you which widgets are receiving the filter values and which aren’t, making debugging much easier.
Also worth checking if your non-responding widgets were created using a different method than the working ones. Widgets added through the dashboard editor versus those added via JSON can have different filter binding patterns. I’ve noticed that manually added widgets sometimes need the binding explicitly set in the widget parameters section of the JSON.