Dashboard filters on mobile analytics app not syncing across widgets

I’m building a mobile analytics dashboard in Snowflake 8.0 for our field sales team. The dashboard has a date range filter and a region filter at the top, with 6 KPI widgets below showing sales metrics. On desktop browsers, the filters work perfectly and all widgets update when I change filter values. However, on the mobile app (both iOS and Android), the filters only affect some widgets.

The filter configuration uses:

filter.onChange = function(value) {
  dashboard.refresh();
};

When testing on mobile, the revenue and pipeline widgets update correctly, but the conversion rate and win rate widgets still show data from the previous filter selection. The widget configuration looks identical across all six widgets. Is there a known issue with global filter event binding in the mobile dashboard preview mode, or am I missing a mobile-specific configuration setting?

Good catch - the conversion rate and win rate widgets do use calculated fields that reference other widgets’ data. I checked the ‘Listen to dashboard filters’ setting and it’s enabled on all widgets. However, I don’t see a ‘Refresh on filter change’ option in the advanced settings for Snowflake 8.0. Is that a different version feature, or is it under a different menu?

There’s also a mobile-specific cache issue in 8.0 that affects calculated widgets. The mobile app caches widget data more aggressively than the web version to improve performance on slower connections. You need to set cache invalidation rules for your calculated widgets. Go to Dashboard Settings → Mobile Configuration → Cache Strategy and set it to ‘Invalidate on filter change’ instead of the default ‘Time-based’. This ensures the mobile app doesn’t serve stale calculated values when filters change.

Let me provide a comprehensive solution that addresses all three technical aspects of your mobile filter synchronization issue:

Global Filter Event Binding Fix:

The problem is that Snowflake’s mobile app uses an asynchronous event model that differs from web desktop. Your current filter code needs to be updated for mobile compatibility:

filter.onChange = function(value) {
  dashboard.applyFilters({
    waitForAll: true,
    includeCalculated: true
  }).then(function() {
    dashboard.refreshWidgets();
  });
};

Key changes:

  • Use applyFilters() instead of refresh() - this properly queues filter changes for mobile’s async rendering
  • Set waitForAll: true to ensure all widgets (including calculated ones) receive the filter event before refresh
  • Set includeCalculated: true to explicitly notify widgets with calculated fields
  • Chain refreshWidgets() in the promise callback to ensure proper execution order

The mobile app’s event queue can process filter changes out of order, causing some widgets to miss the event entirely. The promise-based approach guarantees synchronous execution.

Widget Configuration for Mobile:

For each of your six widgets, update their mobile-specific settings:

  1. Edit each widget → Mobile tab (if not visible, enable it in Dashboard Settings → Mobile Configuration → Show mobile-specific options)

  2. For the conversion rate and win rate widgets specifically:

    • Set ‘Filter binding mode’ to ‘Direct parameter binding’
    • Add explicit parameter mappings:
      • dateRangeFilter → @dateRange
      • regionFilter → @region
  3. In the Data Binding tab, modify the calculated field queries to explicitly reference filter parameters:

SELECT
  SUM(conversions) / SUM(opportunities) as conversion_rate
FROM sales_data
WHERE date BETWEEN @dateRange.start AND @dateRange.end
  AND region = @region

This explicit binding ensures mobile widgets don’t rely solely on dashboard-level filter propagation, which can be unreliable for calculated fields.

  1. For ALL six widgets, enable these mobile-specific settings:
    • Data Binding → Advanced → ‘Re-execute query on filter change’: Enabled
    • Mobile Rendering → ‘Invalidate cache on filter event’: Enabled
    • Performance → ‘Defer rendering until filters applied’: Enabled

Mobile Dashboard Preview Mode Considerations:

The mobile preview mode has several quirks you need to account for:

  1. Cache Management:

    • Dashboard Settings → Mobile Configuration → Cache Strategy
    • Change from ‘Aggressive (default)’ to ‘Minimal’
    • Set ‘Cache invalidation triggers’ to include ‘Filter changes’, ‘Widget dependencies’
    • This prevents the mobile app from serving cached calculated values
  2. Widget Dependency Declaration: Since your conversion rate and win rate widgets depend on data from other widgets, declare these dependencies explicitly:

    • Edit conversion_rate widget → Dependencies tab
    • Add: revenue_widget, pipeline_widget as dependencies
    • Set dependency refresh order: ‘Parent widgets first’
    • This ensures base data widgets refresh before calculated widgets
  3. Mobile Preview Testing: Don’t rely solely on mobile preview mode for testing - it doesn’t perfectly replicate the native app behavior:

    • Test on actual iOS/Android devices using the Snowflake mobile app
    • Use the mobile app’s built-in debugger: Settings → Developer Options → Enable filter event logging
    • Check the console logs for filter event propagation timing
  4. Filter Timing Configuration:

    • Dashboard Settings → Filters → Advanced
    • Set ‘Apply mode’ to ‘On change’ for mobile (not ‘On apply button’)
    • Enable ‘Debounce filter changes’ with 500ms delay to prevent excessive refreshes on slow mobile connections
    • Set ‘Filter application strategy’ to ‘Sequential’ instead of ‘Parallel’ for mobile to ensure proper ordering

Debugging Steps:

If issues persist after the above changes:

  1. Enable mobile debug mode:

    • Add ?mobileDebug=true to your dashboard URL when testing in mobile preview
    • This shows filter event propagation in the browser console
  2. Check widget refresh order:

    • Dashboard Actions → View Refresh Log
    • Look for timing differences between working widgets (revenue, pipeline) and problematic ones (conversion, win rate)
    • If calculated widgets refresh BEFORE their source widgets, that’s your problem
  3. Verify filter parameter passing:

    • Edit problematic widget → Data Binding → View SQL
    • Check if filter parameters are being substituted correctly
    • On mobile, sometimes parameter substitution fails silently, leaving widgets with no WHERE clause
  4. Test filter event propagation:

    • Add this to your dashboard’s custom JavaScript:
dashboard.on('filterChange', function(event) {
  console.log('Filter changed:', event.filterName, event.value);
  console.log('Affected widgets:', event.affectedWidgets);
});
  • If affectedWidgets doesn’t include all six widgets, the event binding is incomplete

Root Cause: The core issue is that Snowflake 8.0’s mobile app uses a different widget refresh pipeline than the desktop version. On desktop, calculated widgets automatically subscribe to dashboard filter events and refresh their calculations. On mobile, this subscription is lazy-loaded to conserve battery and bandwidth, which can cause calculated widgets to miss filter events if they haven’t been explicitly bound to filter parameters. The solution requires both updating the filter event code to use mobile-compatible async patterns AND explicitly declaring filter dependencies at the widget level.