End User Questions
Overview
End Users need self-service capabilities for software access, troubleshooting, and license management. Questions focus on getting access quickly, resolving issues, and understanding their entitlements.
Primary Components: Copilot, Sidekick, Service Ticketing
Table of Contents
- Q1: What software do I have access to?
- Q2: How do I request new software I need for my job?
- Q3: How much does this software cost the company?
- Q4: When was my software licensed?
- Q5: Who approved my software access?
- Q6: Can I switch to a different software tool?
- Q7: Who can I ask about software capabilities?
- Q8: Why don't I have access to specific software?
- Q9: How do I report a software issue?
- Q10: What are the alternatives if I can't get approved?
- Q11: My role changed - what software should I have now?
Q1: What software do I have access to?
Why it matters: Users need to quickly discover what tools are available to them for productivity, understand their entitlements, and know where to access applications.
Telemetry Sources
| Source | Data Retrieved | API Endpoint | Refresh Frequency |
|---|---|---|---|
| IDP (Entra/Okta) | Assigned licenses, SSO applications | /users/{id}/appRoleAssignments | Real-time |
| UEM (Intune) | Installed applications on user devices | /deviceManagement/managedDevices | Hourly |
| Service Catalog | Available software catalog, request status | Service catalog API | Daily |
L1 Analytics (Bronze→Silver)
-- Normalize user entitlements across sources
CREATE TABLE silver.user_entitlements AS
SELECT
la.pii_id,
la.software_product_id,
sp.software_name,
sp.vendor_name,
sp.category,
la.assignment_date,
la.assignment_status, -- 'active', 'pending_provision', 'deprovisioned'
sp.sso_enabled,
sp.access_url,
sp.desktop_app_available,
sp.mobile_app_available,
-- Installation status
CASE WHEN di.device_id IS NOT NULL THEN TRUE ELSE FALSE END as installed_on_device
FROM silver.license_assignment la
JOIN silver.software_product sp ON la.software_product_id = sp.software_product_id
LEFT JOIN silver.device_install di ON la.pii_id = di.pii_id AND la.software_product_id = di.software_product_id
WHERE la.assignment_status IN ('active', 'pending_provision');
Transformations:
- Consolidate entitlements across IDP, UEM, and manual assignments
- Resolve software product names via Cerebro Memory (consistent naming)
- Enrich with access methods (SSO portal, desktop app, mobile app)
- Include installation status on user's devices
L2 Analytics (Silver→Gold)
-- Aggregate user software portfolio with categorization
CREATE TABLE gold.user_software_portfolio AS
SELECT
ue.pii_id,
u.display_name,
u.email,
u.department_name,
u.job_title,
-- Portfolio summary
COUNT(DISTINCT ue.software_product_id) as total_applications,
COUNT(DISTINCT ue.vendor_name) as unique_vendors,
COUNT(DISTINCT CASE WHEN ue.assignment_status = 'active' THEN ue.software_product_id END) as active_applications,
COUNT(DISTINCT CASE WHEN ue.assignment_status = 'pending_provision' THEN ue.software_product_id END) as pending_applications,
-- By category
COUNT(DISTINCT CASE WHEN ue.category = 'productivity' THEN ue.software_product_id END) as productivity_apps,
COUNT(DISTINCT CASE WHEN ue.category = 'collaboration' THEN ue.software_product_id END) as collaboration_apps,
COUNT(DISTINCT CASE WHEN ue.category = 'development' THEN ue.software_product_id END) as development_apps,
COUNT(DISTINCT CASE WHEN ue.category = 'design' THEN ue.software_product_id END) as design_apps,
-- Access methods
COUNT(DISTINCT CASE WHEN ue.sso_enabled = TRUE THEN ue.software_product_id END) as sso_apps,
COUNT(DISTINCT CASE WHEN ue.installed_on_device = TRUE THEN ue.software_product_id END) as installed_apps
FROM silver.user_entitlements ue
JOIN silver.user_directory u ON ue.pii_id = u.pii_id
GROUP BY ue.pii_id, u.display_name, u.email, u.department_name, u.job_title;
Metrics Calculated:
- Total applications assigned
- Active vs. pending provisioning
- Applications by category (productivity, collaboration, development, design)
- Access methods (SSO, desktop, mobile)
- Installation status on user devices
- Recently added applications (last 30 days)
Cerebro Enhancement
- Memory: Personalized software portfolio by user
- Intelligence: Suggest commonly used apps in user's department
- Intelligence: Identify underutilized applications assigned to user
- Reasoning: Recommend relevant software based on job role and peer usage
UI Representation
Component: Copilot conversational interface with "My Software" card in Sidekick
Visualization:
┌─────────────────────────────────────────────────────────────┐
│ 💬 Copilot │
├──────────────────────────────────────────────────────── ─────┤
│ You: What software do I have access to? │
│ │
│ 🤖 Copilot: You currently have access to 14 applications: │
│ │
│ 📊 Productivity (5) │
│ • Microsoft 365 (Word, Excel, PowerPoint) │
│ • Adobe Acrobat Pro │
│ • Notion │
│ │
│ 💬 Collaboration (4) │
│ • Microsoft Teams │
│ • Zoom │
│ • Slack │
│ • Miro │
│ │
│ 🛠️ Development (3) │
│ • Visual Studio Code │
│ • GitHub Enterprise │
│ • Postman │
│ │
│ 🎨 Design (2) │
│ • Figma │
│ • Adobe Creative Cloud (Photoshop, Illustrator) │
│ │
│ [View Full List] [Access My Apps] [Request More] │
│ │
│ 💡 Tip: Click "Access My Apps" to open your SSO portal │
└─────────────────────────────────────────────────────────────┘
Interactions:
- Natural language query: "What software do I have?"
- Click "View Full List" → See detailed list with access links
- Click "Access My Apps" → Open SSO portal
- Click "Request More" → Start software request workflow
- Filter by category or vendor
Copilot Query Example:
"What software do I have access to?"
Answer: "You have access to 14 applications across 4 categories: 5 productivity tools (Microsoft 365, Adobe Acrobat, Notion), 4 collaboration tools (Teams, Zoom, Slack, Miro), 3 development tools (VS Code, GitHub, Postman), and 2 design tools (Figma, Adobe Creative Cloud). All are accessible through your SSO portal at apps.company.com."
Q2: How do I request new software I need for my job?
Why it matters: Self-service software requests empower users to quickly get the tools they need while ensuring proper approval and compliance workflows.
Telemetry Sources
| Source | Data Retrieved | API Endpoint | Refresh Frequency |
|---|---|---|---|
| Service Desk | Request tickets, approval status | ServiceNow /table/sc_request | Real-time |
| Service Catalog | Available software, pricing, approval matrix | Service catalog API | Daily |
| IDP | User role, department, manager | SCIM /Users | Daily |
| Procurement | Existing licenses, seat availability | Procurement system API | Hourly |
L1 Analytics (Bronze→Silver)
-- Normalize software request workflow data
CREATE TABLE silver.software_requests AS
SELECT
sr.request_id,
sr.requestor_pii_id,
sr.software_product_id,
sp.software_name,
sp.vendor_name,
sr.request_date,
sr.request_status, -- 'submitted', 'pending_approval', 'approved', 'provisioned', 'rejected'
sr.approval_required,
sr.approver_pii_id,
sr.approval_date,
sr.rejection_reason,
sr.provisioning_eta_days,
sr.fulfillment_date,
sr.business_justification,
-- Approval routing
DATEDIFF(sr.approval_date, sr.request_date) as approval_time_days,
DATEDIFF(sr.fulfillment_date, sr.approval_date) as provisioning_time_days,
DATEDIFF(sr.fulfillment_date, sr.request_date) as total_time_to_access_days
FROM bronze.service_request sr
JOIN silver.software_product sp ON sr.software_product_id = sp.software_product_id
WHERE sr.request_type = 'software_access';
Transformations:
- Map service requests to canonical software products
- Calculate approval and provisioning timelines
- Identify approval routing (manager, IT, procurement, security)
- Track request status and rejection reasons
L2 Analytics (Silver→Gold)
-- Aggregate request patterns and SLAs
CREATE TABLE gold.software_request_analytics AS
SELECT
sr.software_product_id,
sp.software_name,
sp.vendor_name,
-- Request volume
COUNT(DISTINCT sr.request_id) as total_requests,
COUNT(DISTINCT CASE WHEN sr.request_status = 'approved' THEN sr.request_id END) as approved_requests,
COUNT(DISTINCT CASE WHEN sr.request_status = 'rejected' THEN sr.request_id END) as rejected_requests,
COUNT(DISTINCT CASE WHEN sr.request_status = 'provisioned' THEN sr.request_id END) as fulfilled_requests,
-- Approval metrics
AVG(CASE WHEN sr.request_status IN ('approved', 'provisioned') THEN sr.approval_time_days END) as avg_approval_time_days,
AVG(CASE WHEN sr.request_status = 'provisioned' THEN sr.provisioning_time_days END) as avg_provisioning_time_days,
AVG(CASE WHEN sr.request_status = 'provisioned' THEN sr.total_time_to_access_days END) as avg_total_time_days,
-- Rejection analysis
COUNT(DISTINCT CASE WHEN sr.request_status = 'rejected' THEN sr.request_id END)::FLOAT /
NULLIF(COUNT(DISTINCT sr.request_id), 0) * 100 as rejection_rate_pct,
MODE(CASE WHEN sr.request_status = 'rejected' THEN sr.rejection_reason END) as most_common_rejection_reason
FROM silver.software_requests sr
JOIN silver.software_product sp ON sr.software_product_id = sp.software_product_id
WHERE sr.request_date >= CURRENT_DATE - INTERVAL '90 days'
GROUP BY sr.software_product_id, sp.software_name, sp.vendor_name;
Metrics Calculated:
- Available software in catalog
- Request approval routing (manager → IT → procurement)
- Average approval time by software
- Provisioning SLA (time to access)
- Approval/rejection rates
- Common rejection reasons
Cerebro Enhancement
- Memory: User's previous requests and approval patterns
- Intelligence: Predict approval likelihood based on role and justification
- Intelligence: Suggest similar approved software (if request likely to be rejected)
- Reasoning: Pre-fill business justification based on job role
- Reasoning: Route to fastest approval path based on software type
UI Representation
Component: Copilot-guided request workflow in Sidekick portal
Visualization:
┌─────────────────────────────────────────────────────────────┐
│ 💬 Copilot - Software Request Assistant │
├─────────────────────────────────────────────────────────────┤
│ You: I need access to Figma for design work │
│ │
│ 🤖 Copilot: Great! I can help you request Figma access. │
│ │
│ 📋 Software: Figma Professional │
│ 💰 Cost: $144/year per user │
│ ⏱️ Typical approval time: 2-3 business days │
│ ✓ 94% approval rate for Design team members │
│ │
│ 📝 To complete your request, please provide: │
│ │
│ Business Justification: │
│ [I need Figma to collaborate with the design team on UI │
│ mockups for the Q1 product launch] │
│ │
│ Manager Approval Required: ✓ Yes (Sarah Chen) │
│ │
│ 💡 Your request will be routed to: │
│ 1. Sarah Chen (Manager) - Auto-approved ✓ │
│ 2. IT Team - Typically approves in 1 day │
│ │
│ Alternative: Your team already has Miro. Would you like to │
│ try that first? [Learn More] │
│ │
│ [Submit Request] [Browse Alternatives] [Cancel] │
└─────────────────────────────────────────────────────────────┘
Interactions:
- Natural language request: "I need Figma for design work"
- Copilot guides through request justification
- Pre-filled business case based on role
- Shows approval routing and timeline
- Suggests alternatives if applicable
- Track request status in real-time
Copilot Query Example:
"I need access to Figma for design work"
Answer: "I can help you request Figma Professional ($144/year). Based on your role as Product Manager, this typically requires your manager's approval (Sarah Chen) and IT approval, taking 2-3 business days. The approval rate for Design team members is 94%. I've pre-filled a business justification based on your role. Would you like to submit the request?"
Q3: How much does this software cost the company?
Why it matters: Users want to understand the cost of tools they're requesting or using, helping them make informed decisions and appreciate the investment in their productivity.
Telemetry Sources
| Source | Data Retrieved | API Endpoint | Refresh Frequency |
|---|---|---|---|
| Procurement | License costs, seat pricing | Procurement system API | Daily |
| Service Catalog | Published pricing (may be estimated) | Service catalog API | Daily |
| Finance | Actual spend per application | Finance system API | Monthly |
L1 Analytics (Bronze→Silver)
-- Calculate user-facing cost information
CREATE TABLE silver.user_visible_costs AS
SELECT
sp.software_product_id,
sp.software_name,
sp.vendor_name,
sp.category,
-- Licensing costs
sl.license_type,
sl.unit_cost as cost_per_license,
sl.billing_frequency, -- 'monthly', 'annual', 'perpetual'
-- Normalized annual cost
CASE
WHEN sl.billing_frequency = 'monthly' THEN sl.unit_cost * 12
WHEN sl.billing_frequency = 'annual' THEN sl.unit_cost
WHEN sl.billing_frequency = 'perpetual' THEN sl.unit_cost / 5 -- Amortize over 5 years
END as annual_cost_per_user,
-- Company-wide investment
sl.quantity as total_licenses,
sl.total_cost as total_annual_cost,
-- Visibility controls
sp.cost_visible_to_users, -- Some orgs hide costs
CASE
WHEN sp.cost_visible_to_users = TRUE THEN 'visible'
ELSE 'contact_it'
END as cost_display_mode
FROM silver.software_product sp
JOIN silver.software_license sl ON sp.software_product_id = sl.software_product_id;
Transformations:
- Normalize costs to annual per-user basis
- Apply visibility rules (some orgs hide costs from users)
- Round to user-friendly numbers
- Include total company investment context
L2 Analytics (Silver→Gold)
-- Aggregate cost context for user decision-making
CREATE TABLE gold.user_cost_context AS
SELECT
uvc.software_product_id,
uvc.software_name,
uvc.vendor_name,
uvc.annual_cost_per_user,
uvc.total_annual_cost,
uvc.total_licenses,
-- Usage context
COUNT(DISTINCT la.pii_id) as assigned_users,
COUNT(DISTINCT CASE WHEN lua.usage_classification IN ('power_user', 'regular_user') THEN la.pii_id END) as active_users,
-- Cost per active user
uvc.total_annual_cost / NULLIF(COUNT(DISTINCT CASE WHEN lua.usage_classification IN ('power_user', 'regular_user') THEN la.pii_id END), 0) as cost_per_active_user,
-- Comparative context
AVG(uvc.annual_cost_per_user) OVER (PARTITION BY uvc.category) as avg_cost_in_category,
CASE
WHEN uvc.annual_cost_per_user > AVG(uvc.annual_cost_per_user) OVER (PARTITION BY uvc.category) * 1.5 THEN 'premium'
WHEN uvc.annual_cost_per_user > AVG(uvc.annual_cost_per_user) OVER (PARTITION BY uvc.category) THEN 'above_average'
ELSE 'standard'
END as cost_tier
FROM silver.user_visible_costs uvc
LEFT JOIN silver.license_assignment la ON uvc.software_product_id = la.software_product_id
LEFT JOIN gold.license_usage_analytics lua ON la.software_license_id = lua.software_license_id AND la.pii_id = lua.pii_id
GROUP BY uvc.software_product_id, uvc.software_name, uvc.vendor_name, uvc.annual_cost_per_user, uvc.total_annual_cost, uvc.total_licenses;
Metrics Calculated:
- Cost per user (monthly/annual)
- Total company investment
- Cost tier (standard, above average, premium)
- Comparative context within category
- Total users with access
Cerebro Enhancement
- Intelligence: Contextualize cost relative to similar tools
- Intelligence: Highlight company's investment in user's productivity
- Reasoning: Suggest cost-effective alternatives when appropriate
- Reasoning: Explain value proposition relative to cost
UI Representation
Component: Copilot conversational cost transparency
Visualization:
┌─────────────────────────────────────────────────────────────┐
│ 💬 Copilot │
├─────────────────────────────────────────────────────────────┤
│ You: How much does Adobe Creative Cloud cost? │
│ │
│ 🤖 Copilot: Adobe Creative Cloud costs the company: │
│ │
│ 💰 $52.99/month per user ($636/year) │
│ 📊 Total company investment: $288,000/year │
│ 👥 Licensed to: 452 employees │
│ │
│ This is a premium design tool. For context: │
│ • Average design tool: ~$400/year │
│ • Adobe CC includes: Photoshop, Illustrator, InDesign, │
│ Premiere Pro, After Effects, and 15+ more apps │
│ │
│ ✓ You currently have access to Adobe CC │
│ │
│ 💡 The company invests in premium tools like this to │
│ ensure you have professional-grade design software. │
│ │
│ [View My Software] [Learn More] [Request Different Tool] │
└─────────────────────────────────────────────────────────────┘
Interactions:
- Natural language query: "How much does X cost?"
- Copilot explains per-user and total costs
- Provides context (premium vs. standard)
- Highlights value and capabilities
- Option to request alternatives if needed
Copilot Query Example:
"How much does Figma cost the company?"
Answer: "Figma Professional costs $12/month per user ($144/year). The company currently licenses it for 85 employees with a total annual investment of $12,240. This is a standard-priced design collaboration tool. Figma is popular in the design and product teams for real-time collaboration on UI/UX projects."
Q4: When was my software licensed?
Why it matters: Users want to understand when they received access, how long they've had tools, and when licenses might expire or need renewal.
Telemetry Sources
| Source | Data Retrieved | API Endpoint | Refresh Frequency |
|---|---|---|---|
| IDP | Assignment date, last modified | /users/{id}/appRoleAssignments | Real-time |
| Service Desk | Fulfillment date from request | ServiceNow /table/sc_request | Real-time |
| UEM | Installation date on devices | Device telemetry API | Hourly |
| Audit Logs | License assignment events | /auditLogs/directoryAudits | Real-time |
L1 Analytics (Bronze→Silver)
-- Track user license lifecycle dates
CREATE TABLE silver.user_license_timeline AS
SELECT
la.license_assignment_id,
la.pii_id,
u.display_name,
la.software_product_id,
sp.software_name,
-- Timeline dates
sr.request_date,
sr.approval_date,
la.assignment_date,
la.first_login_date,
la.last_login_date,
sl.end_date as license_expiry_date,
-- Tenure
DATEDIFF(CURRENT_DATE, la.assignment_date) as days_since_assigned,
DATEDIFF(la.first_login_date, la.assignment_date) as days_to_first_use,
DATEDIFF(CURRENT_DATE, la.last_login_date) as days_since_last_use,
-- Status
la.assignment_status,
CASE
WHEN sl.end_date < CURRENT_DATE THEN 'expired'
WHEN sl.end_date BETWEEN CURRENT_DATE AND CURRENT_DATE + INTERVAL '30 days' THEN 'expiring_soon'
ELSE 'active'
END as license_status
FROM silver.license_assignment la
JOIN silver.user_directory u ON la.pii_id = u.pii_id
JOIN silver.software_product sp ON la.software_product_id = sp.software_product_id
LEFT JOIN silver.software_license sl ON la.software_license_id = sl.software_license_id
LEFT JOIN silver.software_requests sr ON la.pii_id = sr.requestor_pii_id AND la.software_product_id = sr.software_product_id;
Transformations:
- Link assignment to original request (if applicable)
- Calculate tenure (how long user has had access)
- Identify first use vs. assignment date
- Flag expiring licenses
L2 Analytics (Silver→Gold)
-- Aggregate user license history
CREATE TABLE gold.user_license_history AS
SELECT
ult.pii_id,
ult.display_name,
ult.software_product_id,
ult.software_name,
-- Key dates
ult.assignment_date,
ult.first_login_date,
ult.last_login_date,
ult.license_expiry_date,
-- Tenure metrics
ult.days_since_assigned,
FLOOR(ult.days_since_assigned / 365.0) as years_with_access,
FLOOR(MOD(ult.days_since_assigned, 365) / 30.0) as additional_months_with_access,
-- Usage pattern
CASE
WHEN ult.first_login_date IS NULL THEN 'never_used'
WHEN ult.days_to_first_use > 30 THEN 'slow_adoption'
ELSE 'immediate_use'
END as adoption_pattern,
CASE
WHEN ult.days_since_last_use <= 7 THEN 'active_this_week'
WHEN ult.days_since_last_use <= 30 THEN 'active_this_month'
WHEN ult.days_since_last_use <= 90 THEN 'active_this_quarter'
ELSE 'inactive'
END as recent_usage,
-- Expiry awareness
ult.license_status,
CASE
WHEN ult.license_status = 'expiring_soon' THEN DATEDIFF(ult.license_expiry_date, CURRENT_DATE)
END as days_until_expiry
FROM silver.user_license_timeline ult;
Metrics Calculated:
- Assignment date (when access was granted)
- First login date (when user first used it)
- License expiry date (if applicable)
- Tenure (years/months with access)
- Recent activity status
- Days until expiry (if expiring soon)
Cerebro Enhancement
- Memory: Track user's complete license history across role changes
- Intelligence: Detect unused licenses assigned long ago
- Intelligence: Alert users of expiring licenses before they lose access
- Reasoning: Suggest renewal if license expiring and actively used
UI Representation
Component: Copilot conversational timeline with "My Software Timeline" view
Visualization:
┌─────────────────────────────────────────────────────────────┐
│ 💬 Copilot │
├─────────────────────────────────────────────────────────────┤
│ You: When was I given access to Adobe Creative Cloud? │
│ │
│ 🤖 Copilot: Your Adobe Creative Cloud license history: │
│ │
│ 📅 Granted: March 15, 2022 (2 years, 10 months ago) │
│ 🚀 First use: March 18, 2022 (3 days after assignment) │
│ 📊 Last used: Today │
│ ⏰ Expires: March 15, 2025 (59 days remaining) │
│ │
│ ⚠️ Your license expires in 59 days. IT will │
│ automatically renew active licenses 30 days before │
│ expiry. No action needed on your part. │
│ │
│ 💡 You've been actively using Adobe CC for almost │
│ 3 years - great utilization! │
│ │
│ [View All My Software] [Usage History] [Contact IT] │
└─────────────────────────────────────────────────────────────┘
Interactions:
- Natural language query: "When did I get access to X?"
- Shows complete timeline (granted → first use → last use → expiry)
- Alerts if license expiring soon
- Explains renewal process
- Links to usage history
Copilot Query Example:
"When was my Figma license granted?"
Answer: "You were granted access to Figma Professional on June 10, 2024 (7 months ago). You first used it on June 12, 2024, and you last logged in yesterday. Your license is part of the company's annual subscription and will renew automatically on March 1, 2025. No action needed from you."
Q5: Who approved my software access?
Why it matters: Users want transparency into approval workflows, understand who supported their request, and know who to contact for future software needs.
Telemetry Sources
| Source | Data Retrieved | API Endpoint | Refresh Frequency |
|---|---|---|---|
| Service Desk | Approval workflow, approvers | ServiceNow /table/sysapproval_approver | Real-time |
| IDP | User directory for approver details | SCIM /Users | Daily |
| Audit Logs | Approval actions and timestamps | /auditLogs/directoryAudits | Real-time |
L1 Analytics (Bronze→Silver)
-- Track approval workflow for user requests
CREATE TABLE silver.user_software_approvals AS
SELECT
sr.request_id,
sr.requestor_pii_id,
req.display_name as requestor_name,
sr.software_product_id,
sp.software_name,
sr.request_date,
-- Approval chain
sa.approver_pii_id,
app.display_name as approver_name,
app.email as approver_email,
app.job_title as approver_title,
app.department_name as approver_department,
sa.approval_level, -- 1 = manager, 2 = IT, 3 = procurement, etc.
sa.approval_stage, -- 'manager_approval', 'it_approval', 'security_review'
sa.approval_status, -- 'approved', 'rejected', 'pending'
sa.approval_date,
sa.approval_comments,
-- Relationship to requestor
CASE
WHEN app.pii_id = req.manager_pii_id THEN 'direct_manager'
WHEN app.department_name = 'IT' THEN 'it_team'
WHEN app.department_name = 'Procurement' THEN 'procurement_team'
WHEN app.department_name = 'Security' THEN 'security_team'
ELSE 'other'
END as approver_type
FROM silver.software_requests sr
JOIN silver.user_directory req ON sr.requestor_pii_id = req.pii_id
JOIN silver.software_product sp ON sr.software_product_id = sp.software_product_id
LEFT JOIN bronze.service_approval sa ON sr.request_id = sa.request_id
LEFT JOIN silver.user_directory app ON sa.approver_pii_id = app.pii_id
WHERE sr.request_status IN ('approved', 'provisioned');
Transformations:
- Resolve approver identities and roles
- Identify approval chain (manager → IT → procurement)
- Track approval timeline per stage
- Classify approver relationship to user
L2 Analytics (Silver→Gold)
-- Aggregate approval patterns for user context
CREATE TABLE gold.user_approval_summary AS
SELECT
usa.requestor_pii_id,
usa.software_product_id,
usa.software_name,
usa.request_date,
-- Approval summary
COUNT(DISTINCT usa.approver_pii_id) as total_approvers,
STRING_AGG(usa.approver_name, ' → ' ORDER BY usa.approval_level) as approval_chain,
STRING_AGG(usa.approver_type, ' → ' ORDER BY usa.approval_level) as approval_path,
MIN(usa.approval_date) as first_approval_date,
MAX(usa.approval_date) as final_approval_date,
DATEDIFF(MAX(usa.approval_date), usa.request_date) as total_approval_time_days,
-- Primary approver (usually direct manager)
MAX(CASE WHEN usa.approval_level = 1 THEN usa.approver_name END) as primary_approver,
MAX(CASE WHEN usa.approval_level = 1 THEN usa.approver_email END) as primary_approver_email
FROM silver.user_software_approvals usa
GROUP BY usa.requestor_pii_id, usa.software_product_id, usa.software_name, usa.request_date;
Metrics Calculated:
- Complete approval chain (all approvers in sequence)
- Primary approver (usually manager)
- Approval timeline (request → final approval)
- Number of approval stages
- Approver roles (manager, IT, procurement, security)
Cerebro Enhancement
- Memory: Track which approvers typically support which types of requests
- Intelligence: Identify user's primary software champion (approves most requests)
- Reasoning: Suggest which approver to contact for expedited requests
UI Representation
Component: Copilot conversational approval history
Visualization:
┌─────────────────────────────────────────────────────────────┐
│ 💬 Copilot │
├─────────────────────────────────────────────────────────────┤
│ You: Who approved my Figma access? │
│ │
│ 🤖 Copilot: Your Figma Professional access was approved by:│
│ │
│ 📋 Request Date: June 10, 2024 │
│ │
│ ✅ Approval Chain: │
│ 1. Sarah Chen (Your Manager) │
│ • Approved: June 10, 2024 (same day) │
│ • Role: Product Design Manager │
│ • Email: [email protected] │
│ │
│ 2. IT Team (Kevin Park) │
│ • Approved: June 11, 2024 (next day) │
│ • Role: IT Systems Administrator │
│ • Email: [email protected] │
│ │
│ ⏱️ Total approval time: 2 days │
│ ✓ Provisioned: June 12, 2024 │
│ │
│ 💡 Sarah Chen has approved 4 of your software requests │
│ in the past year - she's your primary software │
│ champion for future requests. │
│ │
│ [View All Approvals] [Request New Software] [Thank Sarah] │
└─────────────────────────────────────────────────────────────┘
Interactions:
- Natural language query: "Who approved my X access?"
- Shows complete approval chain with names, roles, emails
- Timeline of approval stages
- Identifies primary software champion
- Option to thank approvers or contact for future requests
Copilot Query Example:
"Who approved my Adobe Creative Cloud license?"
Answer: "Your Adobe Creative Cloud access was approved by: 1) Sarah Chen (your manager) on March 15, 2022, and 2) IT Team (Kevin Park) on March 15, 2022. Both approvals came in on the same day, and you were provisioned on March 15, 2022. Sarah has been your primary software approver, supporting 6 of your software requests."
Q6: Can I switch to a different software tool?
Why it matters: Users need flexibility to try alternative tools if current software doesn't meet their needs, while understanding the process and impact.
Telemetry Sources
| Source | Data Retrieved | API Endpoint | Refresh Frequency |
|---|---|---|---|
| Service Catalog | Available alternatives, capabilities | Service catalog API | Daily |
| IDP | Current entitlements | /users/{id}/appRoleAssignments | Real-time |
| Procurement | Existing licenses, seat availability | Procurement system API | Hourly |
| Usage Analytics | Usage patterns, feature utilization | Usage telemetry API | Daily |
L1 Analytics (Bronze→Silver)
-- Map software alternatives and switching feasibility
CREATE TABLE silver.software_alternatives AS
SELECT
sp.software_product_id as current_software_id,
sp.software_name as current_software_name,
sp.category,
-- Alternative products
alt.software_product_id as alternative_software_id,
alt.software_name as alternative_software_name,
alt.vendor_name as alternative_vendor,
-- Comparison
rel.relationship_type, -- 'direct_alternative', 'upgrade', 'downgrade', 'complementary'
rel.feature_overlap_pct,
rel.migration_complexity, -- 'easy', 'moderate', 'complex'
-- Availability
CASE
WHEN alt_lic.available_seats > 0 THEN TRUE
ELSE FALSE
END as seats_available,
alt_lic.available_seats,
alt_lic.unit_cost as alternative_cost,
sp.unit_cost as current_cost,
-- Switching policy
pol.switch_allowed,
pol.approval_required,
pol.trial_period_days
FROM silver.software_product sp
JOIN silver.software_relationship rel ON sp.software_product_id = rel.software_product_id
JOIN silver.software_product alt ON rel.related_software_product_id = alt.software_product_id
LEFT JOIN silver.software_license alt_lic ON alt.software_product_id = alt_lic.software_product_id
LEFT JOIN silver.software_policy pol ON sp.software_product_id = pol.software_product_id
WHERE rel.relationship_type IN ('direct_alternative', 'upgrade', 'downgrade');
Transformations:
- Identify approved alternatives by category
- Check seat availability in existing licenses
- Calculate cost implications
- Assess migration complexity
- Apply company switching policies
L2 Analytics (Silver→Gold)
-- Aggregate switching options for user decision-making
CREATE TABLE gold.user_switching_options AS
SELECT
sa.current_software_id,
sa.current_software_name,
sa.category,
-- Alternatives summary
COUNT(DISTINCT sa.alternative_software_id) as available_alternatives,
COUNT(DISTINCT CASE WHEN sa.seats_available = TRUE THEN sa.alternative_software_id END) as alternatives_with_seats,
COUNT(DISTINCT CASE WHEN sa.relationship_type = 'upgrade' THEN sa.alternative_software_id END) as upgrade_options,
COUNT(DISTINCT CASE WHEN sa.relationship_type = 'downgrade' THEN sa.alternative_software_id END) as downgrade_options,
-- Switching friction
MODE(sa.migration_complexity) as typical_migration_complexity,
MODE(sa.approval_required) as typically_requires_approval,
-- Cost impact
AVG(sa.alternative_cost - sa.current_cost) as avg_cost_difference
FROM silver.software_alternatives sa
GROUP BY sa.current_software_id, sa.current_software_name, sa.category;
Metrics Calculated:
- Available alternatives in same category
- Seat availability in alternative licenses
- Cost implications (more/less expensive)
- Migration complexity (data transfer, training)
- Approval requirements for switching
- Trial period availability
Cerebro Enhancement
- Memory: Track user's previous software preferences and switches
- Intelligence: Recommend best alternative based on user's role and usage patterns
- Intelligence: Predict switching success based on peer migrations
- Reasoning: Suggest trial period before permanent switch
- Reasoning: Highlight data migration considerations
UI Representation
Component: Copilot-guided software comparison and switching workflow
Visualization:
┌─────────────────────────────────────────────────────────────┐
│ 💬 Copilot │
├─────────────────────────────────────────────────────────────┤
│ You: Can I switch from Miro to Figma? │
│ │
│ 🤖 Copilot: Yes, you can switch! Here's what you need to │
│ know: │
│ │
│ 📊 Current: Miro (Whiteboarding) │
│ 🎯 Alternative: Figma (Design/Prototyping) │
│ │
│ ✓ Seat available: Yes (85 licenses, 12 open seats) │
│ 💰 Cost impact: +$96/year ($144 vs. $48) │
│ ⏱️ Migration: Easy (projects can be exported/imported) │
│ 👥 Approval needed: Yes (Manager + IT) │
│ │
│ 💡 Differences: │
│ • Miro: Best for brainstorming and workshops │
│ • Figma: Best for UI/UX design and prototyping │
│ • Can you use both? Yes, they complement each other │
│ │
│ 📋 Next Steps: │
│ 1. Try Figma free trial (14 days) before switching │
│ 2. Export your Miro boards (I can guide you) │
│ 3. Request Figma access (typical approval: 2-3 days) │
│ 4. Optionally keep Miro if you use it for different │