CREATE TABLE curated_fct_gws_login AS
SELECT
l.event_id,
l.user_id,
l.login_type,
l.is_suspicious,
l.created_at
-- omit ip_address from default analytics facts
FROM raw_gws_login_activity l
WHERE l.user_id IS NOT NULL;
Curated dim user / drive activity fact
User without email; Drive activity without bodies; suspended-in-groups signal.
CREATE TABLE curated_dim_gws_user AS
SELECT
user_id,
org_unit_path,
suspended,
created_at
-- omit primary_email from default analytics dims
FROM raw_gws_user;
CREATE TABLE curated_fct_gws_drive_activity AS
SELECT
a.activity_id,
a.actor_user_id,
a.file_id,
a.activity_type,
a.created_at
FROM raw_gws_drive_activity a
WHERE a.file_id IS NOT NULL;
CREATE TABLE curated_fct_gws_group_membership AS
SELECT
m.group_id,
m.user_id,
m.role,
u.suspended,
CASE WHEN u.suspended = TRUE THEN TRUE ELSE FALSE END AS is_suspended_member
FROM raw_gws_group_membership m
JOIN raw_gws_user u ON u.user_id = m.user_id;
Curated measure SELECTs
Logins, Drive edits, users without OU, suspended in groups — adapt period filters.
-- Login events in period
SELECT COUNT(*) AS login_events
FROM curated_fct_gws_login
WHERE created_at BETWEEN :period_start AND :period_end;
-- Drive edit/create activities in period
SELECT COUNT(*) AS drive_edit_events
FROM curated_fct_gws_drive_activity
WHERE activity_type IN ('edit', 'create')
AND created_at BETWEEN :period_start AND :period_end;
-- Active users without org unit
SELECT COUNT(*) AS users_without_ou
FROM curated_dim_gws_user
WHERE suspended = FALSE
AND (org_unit_path IS NULL OR org_unit_path = '');
-- Suspended users still in groups
SELECT COUNT(DISTINCT user_id) AS suspended_users_in_groups
FROM curated_fct_gws_group_membership
WHERE is_suspended_member = TRUE;
Tools
Open related Binom-Tools workflows to adapt formulas, PII and measures for this source.