What this means for your store
Row-level security (RLS) restricts which rows each user sees based on Tableau username, group membership, or user attributes. A performance agency hosting ten Shopify clients on one Server must ensure Brand A never sees Brand B's unit economics. RLS applies at query time on published data sources - unlike dashboard filters, users cannot strip it without changing identity.
Scenario on a real storefront
Common Thread Collective publishes Ecommerce Core once and maps Tableau groups to brand IDs so each client sees only their orders and margin:
// User filter on published data source
[brand_id] = USERATTRIBUTE('brand_id')
// Or group-based mapping table
[brand_id] IN (
{ FIXED [username] :
MAX(IF [allowed_brand] = USERNAME() THEN [brand_id] END)
}
)
// Tableau Server → Users and Groups
Group: client_brand_a → User Attribute brand_id = A
// Embed: pass JWT with matching attributes (Tableau Connected Apps)
// Test: “View as” each group before certifying workbook
What to do next
- RLS on blended sources is fragile - enforce tenant keys in BigQuery views first.
- Service accounts used in subscriptions run as one user; schedule per client or use impersonation.
- Audit quarterly: new hires in
agency_allmay inherit too much access to competitor margin data.
Bottom line
Row-level security is the control plane for multi-brand ecommerce analytics on shared infrastructure. Map identities to brand keys, test with View As, and prefer warehouse views as the first line of defence.