Skip to main content
L1

XOPS Software Lifecycle: Comprehensive Persona Question Mapping

Table of Contents

  1. Executive Summary
  2. Persona Mapping Overview
  3. VP (IT)
  4. End User
  5. Director - SAM
  6. Field Tech
  7. CISO / CIO
  8. Analytics Architecture Summary
  9. UI/UX Component Mapping

Executive Summary

This document provides the complete technical implementation specification for how XOPS answers each persona's questions. For each question, we detail:

  • What telemetry sources are required (IDP, UEM, Procurement, Vendor APIs)
  • What L1 Analytics (first-level transformations) are applied
  • What L2 Analytics (second-level aggregations) are generated
  • How Cerebro enhances the data (Memory/Intelligence/Reasoning)
  • How it's represented in the UI (component, visualization type, interaction)

Analytics Layer Definitions

LayerPurposeExamples
L1 Analytics (Bronze→Silver)Normalize, standardize, and resolve entitiesCanonicalize software names, resolve user identities, map vendor names
L2 Analytics (Silver→Gold)Aggregate, calculate metrics, detect patternsCalculate utilization rates, detect inactive licenses, compute compliance scores
Cerebro MemorySemantic understanding and entity resolutionSoftware synonym resolution, vendor M&A tracking, license type classification
Cerebro IntelligencePattern recognition and relationship learningProcurement relationship analysis, usage pattern classification, vendor pricing intelligence
Cerebro ReasoningDecision-making and recommendationsOptimization recommendations, tier change suggestions, vendor consolidation opportunities

Persona Mapping Overview

PersonaQuestionsPrimary Components Used
VP (IT)14 questionsKnowledge Graph, Experience Center, Copilot
End User11 questionsCopilot, Sidekick, Service Ticketing
Director - SAM7 questionsKnowledge Graph, Experience Center, Copilot
Field Tech3 questionsKnowledge Graph, Experience Center, Copilot, Operator App
CISO / CIO4 questionsKnowledge Graph, Experience Center, Copilot

VP (IT)

Overview

The VP of IT needs strategic financial visibility into software spend, vendor relationships, and renewal planning. Questions focus on total cost control, vendor management, and competitive intelligence.


Q1: "I need to see total spend of software"

Why it matters: Be able to control spend and identify for budgets

Telemetry Sources

SourceData RetrievedAPI EndpointRefresh Frequency
ProcurementPurchase orders, invoices, contract valuesAriba/Coupa/SAP APIDaily
Vendor APIsSubscription costs, license quantities, SKU pricingMicrosoft Graph /subscribedSkus, Adobe User Mgmt APIDaily
FinanceGL entries, payment history, accrualsERP ExtractMonthly

L1 Analytics (Bronze→Silver)

-- Normalize procurement data
CREATE TABLE silver.procurement_normalized AS
SELECT
canonical_vendor_id,
canonical_software_product_id,
purchase_date,
quantity,
unit_cost,
total_cost,
contract_id,
cost_center_id
FROM bronze.procurement_raw
WHERE is_software = TRUE;

Transformations:

  • Canonicalize vendor names via Cerebro Memory (Adobe Inc., Adobe Systems → Adobe Inc.)
  • Normalize software product names via Cerebro Memory (MS Office 365, O365 → Microsoft 365)
  • Map cost centers to organizational hierarchy
  • Convert currencies to base currency (USD)

L2 Analytics (Silver→Gold)

-- Calculate total software spend aggregations
CREATE TABLE gold.software_spend_summary AS
SELECT
org_id,
fiscal_year,
fiscal_quarter,
SUM(total_cost) as total_software_spend,
SUM(CASE WHEN license_type = 'subscription' THEN total_cost END) as subscription_spend,
SUM(CASE WHEN license_type = 'perpetual' THEN total_cost END) as perpetual_spend,
COUNT(DISTINCT canonical_vendor_id) as unique_vendors,
COUNT(DISTINCT canonical_software_product_id) as unique_products
FROM silver.procurement_normalized
GROUP BY org_id, fiscal_year, fiscal_quarter;

Metrics Calculated:

  • Total software spend (YTD, QTD, annual)
  • Spend by license type (subscription vs. perpetual)
  • Spend trend (MoM, QoQ, YoY growth rates)
  • Spend per employee (total spend / employee count)

Cerebro Enhancement

  • Intelligence: Detect spending anomalies (e.g., unusual spike in Q3)
  • Intelligence: Compare spend to industry benchmarks
  • Reasoning: Recommend budget allocation optimization

UI Representation

Component: SoftwareSpendOverview card in Experience Center

Visualization:

┌─────────────────────────────────────────────┐
│ Total Software Spend │
├─────────────────────────────────────────────┤
│ $24.3M ▲ 12% YoY │
│ │
│ [==============■] $18.2M Subscription │
│ [======] $ 6.1M Perpetual │
│ │
│ 📊 Spend Trend (Last 12 Months) │
│ ╱╲ ╱╲ │
│ ╱ ╲╱ ╲╱╲ │
│ ─╯ ╲ │
│ │
│ 🔍 Drill into: [By Vendor] [By Dept] │
└─────────────────────────────────────────────┘

Interactions:

  • Click on total to see monthly breakdown
  • Click vendors to filter by top 10 vendors
  • Click departments to see cost center allocation
  • Export to CSV for budget planning

Copilot Query Example:

"What's our total software spend this year?"

Answer: "Your organization has spent $24.3M on software so far this fiscal year, which represents a 12% increase compared to last year. The majority ($18.2M or 75%) is subscription-based spending."


Q2: "I need to see top 10 vendors and cost"

Why it matters: I need to see top groups for spend and managing relationships

Telemetry Sources

Same as Q1 (Procurement + Vendor APIs + Finance)

L1 Analytics (Bronze→Silver)

-- Aggregate spend by vendor
CREATE TABLE silver.vendor_spend AS
SELECT
canonical_vendor_id,
fiscal_year,
fiscal_quarter,
SUM(total_cost) as vendor_spend,
COUNT(DISTINCT canonical_software_product_id) as products_purchased,
COUNT(DISTINCT contract_id) as active_contracts
FROM silver.procurement_normalized
GROUP BY canonical_vendor_id, fiscal_year, fiscal_quarter;

L2 Analytics (Silver→Gold)

-- Rank vendors and calculate concentration
CREATE TABLE gold.vendor_spend_ranked AS
SELECT
org_id,
canonical_vendor_id,
vendor_spend,
products_purchased,
active_contracts,
ROW_NUMBER() OVER (PARTITION BY org_id ORDER BY vendor_spend DESC) as vendor_rank,
vendor_spend / SUM(vendor_spend) OVER (PARTITION BY org_id) * 100 as spend_percentage,
SUM(vendor_spend) OVER (PARTITION BY org_id ORDER BY vendor_spend DESC) /
SUM(vendor_spend) OVER (PARTITION BY org_id) * 100 as cumulative_percentage
FROM silver.vendor_spend;

Metrics Calculated:

  • Vendor spend ranking (1-10)
  • Spend concentration (% of total)
  • Cumulative spend percentage (Pareto analysis)
  • Products per vendor
  • Contract count per vendor
  • Spend per product

Cerebro Enhancement

  • Memory: Consolidate vendor entities across M&A (Broadcom acquired VMware → Broadcom)
  • Intelligence: Identify vendor relationship tier (Strategic, Preferred, Tactical)
  • Intelligence: Detect vendor pricing trends over time
  • Reasoning: Recommend vendor consolidation opportunities

UI Representation

Component: TopVendorsTable in Experience Center

Visualization:

┌──────────────────────────────────────────────────────────────┐
│ Top 10 Vendors by Spend │
├──────────────────────────────────────────────────────────────┤
│ Rank │ Vendor │ Annual Spend │ % Total │ Products │ 📊 │
├──────┼───────────────┼──────────────┼─────────┼──────────┼────┤
│ 1 │ Microsoft │ $8.4M │ 34.6% │ 23 │ → │
│ 2 │ Adobe │ $2.1M │ 8.6% │ 8 │ → │
│ 3 │ Salesforce │ $1.9M │ 7.8% │ 5 │ → │
│ 4 │ ServiceNow │ $1.6M │ 6.6% │ 3 │ → │
│ 5 │ Oracle │ $1.4M │ 5.8% │ 12 │ → │
│ 6 │ Google │ $1.2M │ 4.9% │ 7 │ → │
│ 7 │ Atlassian │ $0.9M │ 3.7% │ 6 │ → │
│ 8 │ Zoom │ $0.8M │ 3.3% │ 2 │ → │
│ 9 │ AWS │ $0.7M │ 2.9% │ 15 │ → │
│ 10 │ Slack │ $0.6M │ 2.5% │ 1 │ → │
├──────┴───────────────┴──────────────┴─────────┴──────────┴────┤
│ Top 10 Total: $19.6M (80.7% of total spend) │
│ │
│ 💡 Insight: Top 3 vendors account for 50% of spend - strong │
│ leverage for Enterprise License Agreements │
└────────────────────────────────────────────────────────────────┘

Interactions:

  • Click vendor name → Drill into vendor detail page
  • Click → arrow → See vendor contracts, products, and renewal dates
  • Click 📊 icon → See spend trend for that vendor
  • Sort by any column

Copilot Query Example:

"Who are our top 3 software vendors?"

Answer: "Your top 3 vendors are: 1) Microsoft at $8.4M (34.6%), 2) Adobe at $2.1M (8.6%), and 3) Salesforce at $1.9M (7.8%). Together they represent 50% of your total software spend, giving you strong leverage for enterprise agreements."


Q3: "I need to see how much each software is per user / or pools of licenses"

Why it matters: Be able to control spend and be able to know what charge backs (if applicable) can be allocated

Telemetry Sources

SourceData RetrievedAPI EndpointRefresh Frequency
IDP (Entra/Okta)License assignments per user/users/{id}/licenseDetailsDaily
ProcurementLicense quantities and costsPurchase order line itemsDaily
Vendor APIsSKU pricing, user assignmentsMicrosoft Graph, Adobe APIDaily

L1 Analytics (Bronze→Silver)

-- Calculate per-user cost basis
CREATE TABLE silver.license_cost_basis AS
SELECT
l.software_license_id,
l.software_product_id,
l.quantity,
l.unit_cost,
l.total_cost,
l.license_type,
COUNT(DISTINCT la.pii_id) as assigned_users,
CASE
WHEN l.license_type = 'named_user' THEN l.total_cost / NULLIF(l.quantity, 0)
WHEN l.license_type = 'concurrent' THEN l.total_cost / NULLIF(COUNT(DISTINCT la.pii_id), 0)
WHEN l.license_type = 'site' THEN l.total_cost / NULLIF(org_employee_count, 0)
END as cost_per_user
FROM silver.software_license l
LEFT JOIN silver.license_assignment la ON l.software_license_id = la.software_license_id
GROUP BY l.software_license_id;

L2 Analytics (Silver→Gold)

-- Aggregate cost by software product with allocation options
CREATE TABLE gold.software_cost_allocation AS
SELECT
sp.software_product_id,
sp.software_name,
sp.vendor_name,
SUM(l.total_cost) as total_annual_cost,
SUM(l.quantity) as total_licenses,
SUM(lcb.assigned_users) as total_assigned_users,
SUM(l.total_cost) / NULLIF(SUM(lcb.assigned_users), 0) as cost_per_assigned_user,
SUM(l.total_cost) / NULLIF(SUM(l.quantity), 0) as cost_per_license,
-- Department allocation
d.department_name,
COUNT(DISTINCT CASE WHEN p.department_id = d.department_id THEN la.pii_id END) as dept_users,
SUM(l.total_cost) *
(COUNT(DISTINCT CASE WHEN p.department_id = d.department_id THEN la.pii_id END) /
NULLIF(SUM(lcb.assigned_users), 0)) as dept_allocated_cost
FROM silver.software_product sp
JOIN silver.software_license l ON sp.software_product_id = l.software_product_id
JOIN silver.license_cost_basis lcb ON l.software_license_id = lcb.software_license_id
LEFT JOIN silver.license_assignment la ON l.software_license_id = la.software_license_id
LEFT JOIN silver.pii p ON la.pii_id = p.pii_id
LEFT JOIN silver.department d ON p.department_id = d.department_id
GROUP BY sp.software_product_id, d.department_id;

Metrics Calculated:

  • Cost per license (total cost / quantity)
  • Cost per assigned user (total cost / assigned users)
  • Cost per active user (total cost / active users)
  • Department allocation (proportional by user count)
  • Pool size (unassigned licenses)
  • Pool value (unassigned licenses × unit cost)

Cerebro Enhancement

  • Intelligence: Detect cost anomalies (unusually high per-user cost)
  • Intelligence: Compare per-user cost to industry benchmarks
  • Reasoning: Recommend license pool sizing optimization

UI Representation

Component: SoftwareCostAllocationTable in Experience Center

Visualization:

┌─────────────────────────────────────────────────────────────────────┐
│ Software Cost Per User & Allocation │
├─────────────────────────────────────────────────────────────────────┤
│ Software │Annual Cost│ Licenses │Users│$/User │Pool│Alloc│ │
├──────────────────┼───────────┼──────────┼─────┼───────┼────┼─────┼──┤
│ Microsoft 365 E3 │ $720K │ 2,000 │1,850│ $389 │150 │ ⚙️ │→ │
│ Microsoft 365 E5 │ $684K │ 1,200 │1,180│ $580 │ 20 │ ⚙️ │→ │
│ Adobe CC │ $288K │ 600 │ 542 │ $531 │ 58 │ ⚙️ │→ │
│ Salesforce │ $432K │ 900 │ 856 │ $505 │ 44 │ ⚙️ │→ │
│ Zoom Enterprise │ $180K │ 2,000 │1,987│ $91 │ 13 │ ⚙️ │→ │
├──────────────────┴───────────┴──────────┴─────┴───────┴────┴─────┴──┤
│ 💡 Pool Value: $67,340 in unassigned licenses across all products │
│ │
│ Allocation Options: [By Department] [By Cost Center] [By Location] │
└───────────────────────────────────────────────────────────────────────┘

Interactions:

  • Click ⚙️ → View/edit department chargeback allocation rules
  • Click → arrow → Drill into software detail with per-department breakdown
  • Click "Pool" → See pool management options
  • Export allocation report for finance

Copilot Query Example:

"What's the cost per user for Microsoft 365?"

Answer: "Microsoft 365 E3 costs $389 per assigned user ($720K / 1,850 users) with a pool of 150 unassigned licenses worth $58,350. E5 costs $580 per user ($684K / 1,180 users) with 20 unassigned licenses."


Q4: "I need the ability to see when licenses are expiring coming up for renewal"

Why it matters: Be able to prepare for license discussions

Telemetry Sources

SourceData RetrievedAPI EndpointRefresh Frequency
ProcurementContract start/end dates, renewal termsContract management systemDaily
Vendor APIsSubscription end dates, auto-renewal statusVendor portalsDaily
IDPCurrent license assignments/subscribedSkusDaily

L1 Analytics (Bronze→Silver)

-- Normalize contract renewal data
CREATE TABLE silver.contract_renewal_tracking AS
SELECT
sl.software_license_id,
sl.software_product_id,
sl.contract_id,
sl.start_date,
sl.end_date,
sl.renewal_type,
sl.notice_period_days,
sl.auto_renew,
sl.end_date - INTERVAL sl.notice_period_days DAY as notice_deadline,
DATEDIFF(sl.end_date, CURRENT_DATE) as days_until_expiry,
CASE
WHEN DATEDIFF(sl.end_date, CURRENT_DATE) <= 30 THEN 'critical'
WHEN DATEDIFF(sl.end_date, CURRENT_DATE) <= 90 THEN 'warning'
WHEN DATEDIFF(sl.end_date, CURRENT_DATE) <= 180 THEN 'upcoming'
ELSE 'future'
END as renewal_urgency,
sl.total_cost as renewal_value
FROM silver.software_license sl
WHERE sl.end_date IS NOT NULL
AND sl.end_date >= CURRENT_DATE;

L2 Analytics (Silver→Gold)

-- Aggregate renewal pipeline with usage context
CREATE TABLE gold.renewal_pipeline AS
SELECT
crt.software_license_id,
sp.software_name,
v.vendor_name,
crt.end_date,
crt.days_until_expiry,
crt.renewal_urgency,
crt.renewal_value,
crt.auto_renew,
crt.notice_deadline,
-- Usage context for renewal decision
sar.assigned,
sar.assigned_active,
sar.assigned_inactive,
sar.assigned_active::FLOAT / NULLIF(sar.assigned, 0) * 100 as utilization_rate,
-- Renewal recommendation
CASE
WHEN sar.assigned_active::FLOAT / NULLIF(sar.assigned, 0) > 0.85 THEN 'renew_full'
WHEN sar.assigned_active::FLOAT / NULLIF(sar.assigned, 0) > 0.60 THEN 'optimize_then_renew'
WHEN sar.assigned_active::FLOAT / NULLIF(sar.assigned, 0) > 0.40 THEN 'reduce_quantity'
ELSE 'consider_cancellation'
END as renewal_recommendation
FROM silver.contract_renewal_tracking crt
JOIN silver.software_product sp ON crt.software_product_id = sp.software_product_id
JOIN silver.software_vendor v ON sp.software_vendor_id = v.software_vendor_id
JOIN gold.software_analytic_report sar ON crt.software_license_id = sar.software_license_id
ORDER BY crt.days_until_expiry ASC;

Metrics Calculated:

  • Days until expiry
  • Notice deadline (when decision must be made)
  • Renewal value ($$$ at stake)
  • Utilization rate (for right-sizing)
  • Renewal pipeline value (next 30/60/90/180 days)
  • Auto-renew risk (high-value contracts on auto-renew)

Cerebro Enhancement

  • Intelligence: Analyze historical renewal pricing trends
  • Intelligence: Compare renewal terms to market rates
  • Intelligence: Predict renewal increase percentage based on vendor patterns
  • Reasoning: Generate renewal negotiation strategy (renew, reduce, cancel, switch)
  • Reasoning: Recommend optimal renewal timing based on usage trends

UI Representation

Component: RenewalPipelineTimeline in Experience Center

Visualization:

┌──────────────────────────────────────────────────────────────────────┐
│ License Renewal Pipeline │
├──────────────────────────────────────────────────────────────────────┤
│ Timeline View [List View] [Calendar View] │
│ │
│ Next 30 Days (Critical) - $2.4M │
│ ├─ 🔴 Microsoft 365 E5 │ Jan 28 │ $684K │ 94% util │ Renew Full │
│ └─ 🔴 ServiceNow ITSM │ Feb 5 │ $420K │ 78% util │ Optimize │
│ │
│ 31-90 Days (Warning) - $4.1M │
│ ├─ 🟡 Adobe Creative Cloud│ Feb 18 │ $288K │ 90% util │ Renew Full │
│ ├─ 🟡 Salesforce Sales │ Mar 1 │ $432K │ 95% util │ Renew Full │
│ ├─ 🟡 Zoom Enterprise │ Mar 15 │ $180K │ 99% util │ Renew Full │
│ └─ 🟡 Slack Enterprise │ Mar 22 │ $156K │ 45% util │ Reduce 50% │
│ │
│ 91-180 Days (Upcoming) - $7.2M │
│ ├─ 🟢 Oracle Database │ Apr 10 │ $1.2M │ 88% util │ Optimize │
│ └─ 🟢 [12 more...] │ │ │ │ │
│ │
│ 📊 Total Pipeline (Next 180 Days): $13.7M │
│ │
│ ⚠️ 2 contracts on auto-renew require review ($1.1M) │
│ 💡 Optimization potential: $890K savings identified │
└──────────────────────────────────────────────────────────────────────┘

Interactions:

  • Click software name → See renewal detail page with negotiation intelligence
  • Click urgency indicator (🔴🟡🟢) → Filter by urgency
  • Set reminder for notice deadline
  • Export renewal calendar for procurement team
  • Mark as "In Negotiation", "Renewed", "Cancelled"

Copilot Query Example:

"What licenses are expiring in the next 60 days?"

Answer: "You have 6 licenses expiring in the next 60 days worth $6.5M: Microsoft 365 E5 ($684K, Jan 28), ServiceNow ($420K, Feb 5), Adobe CC ($288K, Feb 18), Salesforce ($432K, Mar 1), Zoom ($180K, Mar 15), and Slack ($156K, Mar 22). Optimization analysis shows potential to reduce Slack by 50% due to 45% utilization."


Q5: "How we are using the licenses (usage analysis)"

Why it matters: Understanding actual usage patterns to optimize license allocation and identify waste

Telemetry Sources

SourceData RetrievedAPI EndpointRefresh Frequency
IDP (Entra/Okta)Last login, license assignments/users/{id}/licenseDetails, /auditLogs/signInsHourly
UEM (Intune/Workspace ONE)Application launch events, usage durationDevice telemetry APIReal-time
Vendor APIsFeature usage, module activationMicrosoft Graph /reports/, Adobe Analytics APIDaily
SIEM/Log AggregationApplication access logsSplunk/Datadog query APIReal-time

L1 Analytics (Bronze→Silver)

-- Normalize usage events across telemetry sources
CREATE TABLE silver.software_usage_events AS
SELECT
pii_id,
software_product_id,
usage_timestamp,
usage_type, -- 'login', 'launch', 'feature_use', 'api_call'
usage_duration_seconds,
feature_name,
device_id,
source_system -- 'idp', 'uem', 'vendor_api', 'siem'
FROM bronze.usage_events_raw
WHERE usage_timestamp >= CURRENT_DATE - INTERVAL '90 days';

Transformations:

  • Deduplicate usage events across multiple telemetry sources
  • Canonicalize software names via Cerebro Memory
  • Resolve user identities across systems (email → pii_id)
  • Classify usage intensity (light, moderate, heavy)

L2 Analytics (Silver→Gold)

-- Calculate comprehensive usage metrics per license
CREATE TABLE gold.license_usage_analytics AS
SELECT
la.software_license_id,
la.pii_id,
sp.software_name,
-- Basic usage metrics
COUNT(DISTINCT DATE(sue.usage_timestamp)) as days_used_last_90,
MAX(sue.usage_timestamp) as last_usage_date,
DATEDIFF(CURRENT_DATE, MAX(sue.usage_timestamp)) as days_since_last_use,
SUM(sue.usage_duration_seconds) / 3600.0 as total_hours_used,
COUNT(sue.usage_timestamp) as total_usage_events,
-- User classification
CASE
WHEN COUNT(DISTINCT DATE(sue.usage_timestamp)) >= 60 THEN 'power_user'
WHEN COUNT(DISTINCT DATE(sue.usage_timestamp)) >= 30 THEN 'regular_user'
WHEN COUNT(DISTINCT DATE(sue.usage_timestamp)) >= 10 THEN 'occasional_user'
WHEN COUNT(DISTINCT DATE(sue.usage_timestamp)) >= 1 THEN 'rare_user'
ELSE 'never_used'
END as usage_classification,
-- Feature adoption
COUNT(DISTINCT sue.feature_name) as unique_features_used,
MAX(CASE WHEN sue.feature_name IN (SELECT premium_feature FROM ref.premium_features WHERE software_product_id = sp.software_product_id) THEN 1 ELSE 0 END) as uses_premium_features
FROM silver.license_assignment la
JOIN silver.software_product sp ON la.software_product_id = sp.software_product_id
LEFT JOIN silver.software_usage_events sue ON la.pii_id = sue.pii_id AND la.software_product_id = sue.software_product_id
GROUP BY la.software_license_id, la.pii_id, sp.software_name;

Metrics Calculated:

  • Active users (used in last 30 days)
  • Usage frequency (daily, weekly, monthly, inactive)
  • Feature adoption rate (% using premium features)
  • Usage intensity distribution (power/regular/occasional/rare/never)
  • Average usage hours per user
  • License utilization rate (active / total assigned)

Cerebro Enhancement

  • Intelligence: Detect usage patterns and anomalies (sudden drop in usage)
  • Intelligence: Identify underutilized premium licenses
  • Intelligence: Predict future usage trends based on historical patterns
  • Reasoning: Recommend license tier optimization (E5 → E3 downgrade)
  • Reasoning: Identify candidates for license reclamation

UI Representation

Component: LicenseUsageAnalytics dashboard in Experience Center

Visualization:

┌─────────────────────────────────────────────────────────────────────┐
│ License Usage Analysis │
├─────────────────────────────────────────────────────────────────────┤
│ Software: Microsoft 365 E5 │
│ │
│ Usage Distribution (1,200 licenses) │
│ ┌────────────────────────────────────────────┐ │
│ │ ████████████ 42% Power Users (504) │ 60+ days/90 │
│ │ ██████ 23% Regular Users (276) │ 30-59 days/90 │
│ │ ████ 15% Occasional Users (180) │ 10-29 days/90 │
│ │ ██ 8% Rare Users (96) │ 1-9 days/90 │
│ │ ██ 12% Never Used (144) ⚠️ │ 0 days/90 │
│ └────────────────────────────────────────────┘ │
│ │
│ 📊 Utilization: 88% (1,056 active / 1,200 assigned) │
│ │
│ Feature Adoption │
│ ├─ Teams Advanced Features: 67% ✓ │
│ ├─ Power BI Premium: 34% ⚠️ │
│ ├─ Advanced Threat Protection: 89% ✓ │
│ └─ eDiscovery & Compliance: 12% ⚠️ │
│ │
│ 💡 Insights: │
│ • 144 licenses unused for 90+ days ($83,520 annual waste) │
│ • 276 users not using premium features → E3 candidate ($138K save)│
│ • Usage trending up 5% QoQ │
│ │
│ [Export Report] [Reclamation Plan] [Usage Trends] │
└─────────────────────────────────────────────────────────────────────┘

Interactions:

  • Click user classification → Drill into user list for that category
  • Click feature adoption → See per-user feature usage matrix
  • Click "Reclamation Plan" → Generate list of licenses to reclaim
  • Export usage report for vendor negotiation
  • Set usage thresholds for automated alerts

Copilot Query Example:

"How are we using our Microsoft 365 E5 licenses?"

Answer: "Out of 1,200 M365 E5 licenses, 88% are actively used (1,056 users). 42% are power users, but 12% (144 licenses) haven't been used in 90+ days, representing $83K in waste. Additionally, 276 users aren't utilizing premium E5 features and could be downgraded to E3, saving $138K annually."


Q6: "When was this purchased (purchase history)"

Why it matters: Track procurement timeline, contract anniversary dates, and historical spending patterns for budget planning

Telemetry Sources

SourceData RetrievedAPI EndpointRefresh Frequency
ProcurementPurchase orders, requisitions, approval datesERP/Procurement system APIDaily
FinanceInvoice dates, payment dates, GL postingFinance system APIDaily
Vendor APIsSubscription start dates, trial conversion datesVendor portal APIDaily
Contract ManagementContract signing dates, amendment datesCLM system APIDaily

L1 Analytics (Bronze→Silver)

-- Normalize purchase history across systems
CREATE TABLE silver.purchase_history AS
SELECT
sl.software_license_id,
sl.software_product_id,
sp.software_name,
v.vendor_name,
-- Purchase timeline
po.requisition_date,
po.approval_date,
po.purchase_order_date,
c.contract_signature_date,
inv.invoice_date,
inv.payment_date,
sl.start_date as subscription_start_date,
-- Purchase details
po.purchase_order_number,
c.contract_id,
inv.invoice_number,
po.requestor_pii_id,
po.approver_pii_id,
po.procurement_agent_pii_id,
-- Financial details
po.original_amount,
inv.invoiced_amount,
inv.paid_amount,
sl.total_cost as current_annual_cost
FROM silver.software_license sl
JOIN silver.software_product sp ON sl.software_product_id = sp.software_product_id
JOIN silver.software_vendor v ON sp.software_vendor_id = v.software_vendor_id
LEFT JOIN silver.purchase_order po ON sl.purchase_order_id = po.purchase_order_id
LEFT JOIN silver.contract c ON sl.contract_id = c.contract_id
LEFT JOIN silver.invoice inv ON po.purchase_order_id = inv.purchase_order_id;

Transformations:

  • Link purchase records across ERP, finance, and vendor systems
  • Calculate procurement cycle time (requisition → payment)
  • Identify original purchaser and current owner
  • Track price changes across renewals

L2 Analytics (Silver→Gold)

-- Aggregate purchase history with trend analysis
CREATE TABLE gold.purchase_history_analytics AS
SELECT
ph.software_product_id,
ph.software_name,
ph.vendor_name,
-- Timeline metrics
MIN(ph.purchase_order_date) as first_purchase_date,
MAX(ph.purchase_order_date) as most_recent_purchase_date,
COUNT(DISTINCT ph.purchase_order_number) as total_purchases,
COUNT(DISTINCT EXTRACT(YEAR FROM ph.purchase_order_date)) as years_as_customer,
-- Procurement cycle analysis
AVG(DATEDIFF(ph.payment_date, ph.requisition_date)) as avg_procurement_cycle_days,
AVG(DATEDIFF(ph.approval_date, ph.requisition_date)) as avg_approval_time_days,
-- Cost evolution
MIN(ph.original_amount) as lowest_purchase_amount,
MAX(ph.original_amount) as highest_purchase_amount,
AVG(ph.original_amount) as avg_purchase_amount,
SUM(ph.paid_amount) as total_lifetime_spend,
-- Stakeholder tracking
MODE(ph.requestor_pii_id) as primary_requestor,
MODE(ph.approver_pii_id) as primary_approver,
COUNT(DISTINCT ph.requestor_pii_id) as unique_requestors
FROM silver.purchase_history ph
GROUP BY ph.software_product_id, ph.software_name, ph.vendor_name;

Metrics Calculated:

  • First purchase date (customer since)
  • Purchase frequency (annual, per renewal, ad-hoc)
  • Procurement cycle time (req → approval → PO → payment)
  • Cost trend (increasing, decreasing, stable)
  • Total lifetime spend per product
  • Primary stakeholders (requestor, approver, owner)

Cerebro Enhancement

  • Memory: Link purchase history across vendor M&A and product rebranding
  • Intelligence: Detect purchasing patterns and seasonality
  • Intelligence: Identify procurement bottlenecks (long approval times)
  • Reasoning: Predict optimal purchase timing based on historical pricing
  • Reasoning: Recommend procurement process improvements

UI Representation

Component: PurchaseHistoryTimeline in Experience Center

Visualization:

┌─────────────────────────────────────────────────────────────────────┐
│ Purchase History: Adobe Creative Cloud │
├─────────────────────────────────────────────────────────────────────┤
│ Customer Since: March 2018 (6 years, 10 months) │
│ │
│ Purchase Timeline │
│ ├─ 2018 Mar Initial Purchase 300 seats $180K [View PO] │
│ ├─ 2019 Mar Renewal 400 seats $252K ↑40% [View PO] │
│ ├─ 2020 Mar Renewal 450 seats $279K ↑11% [View PO] │
│ ├─ 2021 Mar Renewal 500 seats $315K ↑13% [View PO] │
│ ├─ 2022 Mar Renewal 550 seats $363K ↑15% [View PO] │
│ ├─ 2023 Mar Renewal 600 seats $396K ↑ 9% [View PO] │
│ └─ 2024 Mar Renewal 600 seats $420K ↑ 6% [View PO] │
│ │
│ 📊 Metrics │
│ ├─ Total Purchases: 7 │
│ ├─ Total Lifetime Spend: $2.2M │
│ ├─ Average Annual Increase: 13.2% │
│ ├─ Avg Procurement Cycle: 42 days │
│ └─ Next Renewal: March 2025 (62 days) │
│ │
│ 👤 Stakeholders │
│ ├─ Primary Requestor: Sarah Chen (Creative Director) │
│ ├─ Approver: David Park (VP Marketing) │
│ └─ Procurement Contact: Mike Johnson │
│ │
│ 💡 Insight: Price increases averaging 13% annually - significantly│
│ above market rate (typically 5-8%). Recommend competitive bid. │
│ │
│ [Export History] [View Contracts] [Renewal Analysis] │
└─────────────────────────────────────────────────────────────────────┘

Interactions:

  • Click purchase entry → View complete PO, invoice, and contract details
  • Click stakeholder name → See all purchases they've requested/approved
  • Click "Renewal Analysis" → Compare historical pricing to market rates
  • Export purchase history for audit or vendor negotiation
  • Set anniversary reminders for renewal planning

Copilot Query Example:

"When did we first purchase Adobe Creative Cloud?"

Answer: "Your organization first purchased Adobe Creative Cloud in March 2018 with 300 seats for $180K. You've been a customer for 6 years 10 months with 7 total purchases. Your spending has grown from $180K to $420K (133% increase), with an average annual price increase of 13.2% - significantly above market rates of 5-8%."


Q7: "Who purchased the license (procurement tracking)"

Why it matters: Accountability, approval workflow tracking, and identifying software champions for renewal decisions

Telemetry Sources

SourceData RetrievedAPI EndpointRefresh Frequency
ProcurementRequestor, approver, buyer detailsERP requisition/PO APIDaily
IDPUser identity, org chart, departmentSCIM /Users, /GroupsDaily
Service DeskService requests, approval ticketsServiceNow/Jira Service Mgmt APIDaily
Contract ManagementContract signatories, business ownersCLM system APIDaily

L1 Analytics (Bronze→Silver)

-- Resolve procurement stakeholders
CREATE TABLE silver.procurement_stakeholders AS
SELECT
sl.software_license_id,
sl.software_product_id,
sp.software_name,
-- Requestor information
po.requestor_pii_id,
req_user.display_name as requestor_name,
req_user.email as requestor_email,
req_user.department_name as requestor_department,
req_user.manager_name as requestor_manager,
-- Approver information
po.approver_pii_id,
app_user.display_name as approver_name,
app_user.email as approver_email,
app_user.department_name as approver_department,
-- Procurement agent information
po.procurement_agent_pii_id,
proc_user.display_name as procurement_agent_name,
proc_user.email as procurement_agent_email,
-- Contract owner information
c.business_owner_pii_id,
owner_user.display_name as business_owner_name,
owner_user.email as business_owner_email,
owner_user.department_name as business_owner_department,
-- Timeline
po.requisition_date,
po.approval_date,
po.purchase_order_date
FROM silver.software_license sl
JOIN silver.software_product sp ON sl.software_product_id = sp.software_product_id
LEFT JOIN silver.purchase_order po ON sl.purchase_order_id = po.purchase_order_id
LEFT JOIN silver.contract c ON sl.contract_id = c.contract_id
LEFT JOIN silver.user_directory req_user ON po.requestor_pii_id = req_user.pii_id
LEFT JOIN silver.user_directory app_user ON po.approver_pii_id = app_user.pii_id
LEFT JOIN silver.user_directory proc_user ON po.procurement_agent_pii_id = proc_user.pii_id
LEFT JOIN silver.user_directory owner_user ON c.business_owner_pii_id = owner_user.pii_id;

Transformations:

  • Resolve PII IDs to human-readable names and org context
  • Link current business owner (may differ from original requestor)
  • Track ownership changes over time
  • Identify department affiliation for chargeback

L2 Analytics (Silver→Gold)

-- Aggregate procurement patterns by stakeholder
CREATE TABLE gold.stakeholder_procurement_patterns AS
SELECT
ps.requestor_pii_id,
ps.requestor_name,
ps.requestor_department,
-- Procurement activity
COUNT(DISTINCT ps.software_license_id) as total_licenses_requested,
COUNT(DISTINCT ps.software_product_id) as unique_products_requested,
SUM(sl.total_cost) as total_value_requested,
MIN(ps.requisition_date) as first_request_date,
MAX(ps.requisition_date) as most_recent_request_date,
-- Approval metrics
AVG(DATEDIFF(ps.approval_date, ps.requisition_date)) as avg_approval_time_days,
-- Current ownership
COUNT(DISTINCT CASE WHEN ps.business_owner_pii_id = ps.requestor_pii_id THEN ps.software_license_id END) as licenses_currently_owned
FROM silver.procurement_stakeholders ps
JOIN silver.software_license sl ON ps.software_license_id = sl.software_license_id
GROUP BY ps.requestor_pii_id, ps.requestor_name, ps.requestor_department;

Metrics Calculated:

  • Requestor/approver for each license
  • Total procurement value per person
  • Number of software requests per department
  • Current business owners
  • Approval time by approver
  • Ownership transitions (original → current)

Cerebro Enhancement

  • Intelligence: Identify "software champions" (frequent requestors)
  • Intelligence: Detect approval bottlenecks (slow approvers)
  • Intelligence: Track ownership changes (departures, role changes)
  • Reasoning: Recommend ownership reassignment for orphaned licenses
  • Reasoning: Suggest approval workflow improvements

UI Representation

Component: ProcurementStakeholderView in Experience Center

Visualization:

┌─────────────────────────────────────────────────────────────────────┐
│ Procurement Tracking: Salesforce Sales Cloud │
├─────────────────────────────────────────────────────────────────────┤
│ 📝 Original Purchase (Jan 2020) │
│ ├─ Requestor: Jennifer Martinez (VP Sales) │
│ │ └─ Department: Sales │
│ ├─ Approver: Michael Thompson (CFO) │
│ │ └─ Approval Time: 5 days │
│ ├─ Procurement Agent: Lisa Wang │
│ └─ Purchase Amount: $324,000 (500 licenses) │
│ │
│ 👤 Current Business Owner │
│ ├─ Robert Chen (VP Revenue Operations) │
│ ├─ Department: Sales Operations │
│ ├─ Email: [email protected]
│ └─ Owner Since: June 2023 (transfer from J. Martinez) │
│ │
│ 📊 Renewal History │
│ ├─ 2021 Renewal: Same owner (J. Martinez) │
│ ├─ 2022 Renewal: Same owner (J. Martinez) │
│ ├─ 2023 Renewal: Owner changed to R. Chen │
│ └─ 2024 Renewal: Same owner (R. Chen) │
│ │
│ 🔔 Upcoming Renewal (March 2025) │
│ └─ Action Required: Confirm R. Chen still owns this contract │
│ │
│ 💡 Related Software Owned by R. Chen: │
│ • Salesforce Sales Cloud ($432K) │
│ • Outreach.io ($156K) │
│ • Gong.io ($240K) │
│ Total Portfolio: $828K │
│ │
│ [Contact Owner] [View Purchase Order] [Transfer Ownership] │
└─────────────────────────────────────────────────────────────────────┘

Interactions:

  • Click stakeholder name → See all software they've requested/own
  • Click "Contact Owner" → Email template for renewal discussion
  • Click "Transfer Ownership" → Reassign business owner
  • View complete approval workflow history
  • Export stakeholder report for audit

Copilot Query Example:

"Who purchased our Salesforce licenses?"

Answer: "Salesforce Sales Cloud was originally purchased in January 2020 by Jennifer Martinez (VP Sales) with approval from Michael Thompson (CFO). The current business owner is Robert Chen (VP Revenue Operations) who took ownership in June 2023. Robert also owns Outreach.io and Gong.io, managing a total software portfolio of $828K."


Q8: "Who is the sponsor/owner (software ownership)"

Why it matters: Clear accountability for renewal decisions, usage optimization, and business justification

Telemetry Sources

SourceData RetrievedAPI EndpointRefresh Frequency
Contract ManagementBusiness owner, technical owner, executive sponsorCLM system APIDaily
IDPUser status, org chart, role changesSCIM /UsersDaily
HR SystemEmployee status, terminations, transfersHRIS APIDaily
ProcurementOriginal requestor, cost center ownerERP APIDaily

L1 Analytics (Bronze→Silver)

-- Establish current ownership with org context
CREATE TABLE silver.software_ownership AS
SELECT
sl.software_license_id,
sl.software_product_id,
sp.software_name,
v.vendor_name,
sl.total_cost,
-- Business owner (decision maker)
c.business_owner_pii_id,
bo.display_name as business_owner_name,
bo.email as business_owner_email,
bo.department_name as business_owner_department,
bo.manager_name as business_owner_manager,
bo.employment_status as business_owner_status,
-- Technical owner (administrator)
c.technical_owner_pii_id,
tech.display_name as technical_owner_name,
tech.email as technical_owner_email,
tech.department_name as technical_owner_department,
-- Executive sponsor (budget authority)
c.executive_sponsor_pii_id,
exec.display_name as executive_sponsor_name,
exec.email as executive_sponsor_email,
exec.title as executive_sponsor_title,
-- Cost center allocation
sl.cost_center_id,
cc.cost_center_name,
cc.cost_center_owner_pii_id,
cc_owner.display_name as cost_center_owner_name,
-- Ownership metadata
c.ownership_last_verified_date,
DATEDIFF(CURRENT_DATE, c.ownership_last_verified_date) as days_since_verification
FROM silver.software_license sl
JOIN silver.software_product sp ON sl.software_product_id = sp.software_product_id
JOIN silver.software_vendor v ON sp.software_vendor_id = v.software_vendor_id
LEFT JOIN silver.contract c ON sl.contract_id = c.contract_id
LEFT JOIN silver.user_directory bo ON c.business_owner_pii_id = bo.pii_id
LEFT JOIN silver.user_directory tech ON c.technical_owner_pii_id = tech.pii_id
LEFT JOIN silver.user_directory exec ON c.executive_sponsor_pii_id = exec.pii_id
LEFT JOIN silver.cost_center cc ON sl.cost_center_id = cc.cost_center_id
LEFT JOIN silver.user_directory cc_owner ON cc.cost_center_owner_pii_id = cc_owner.pii_id;

Transformations:

  • Distinguish business owner vs technical owner vs executive sponsor
  • Flag orphaned licenses (owner terminated/transferred)
  • Track ownership verification freshness
  • Link ownership to cost center for financial accountability

L2 Analytics (Silver→Gold)

-- Aggregate ownership portfolio and identify issues
CREATE TABLE gold.ownership_portfolio AS
SELECT
so.business_owner_pii_id,
so.business_owner_name,
so.business_owner_department,
so.business_owner_status,
-- Portfolio metrics
COUNT(DISTINCT so.software_license_id) as licenses_owned,
COUNT(DISTINCT so.software_product_id) as unique_products_owned,
COUNT(DISTINCT so.vendor_name) as unique_vendors,
SUM(so.total_cost) as total_portfolio_value,
-- Ownership health
COUNT(CASE WHEN so.business_owner_status != 'active' THEN 1 END) as orphaned_licenses,
COUNT(CASE WHEN so.days_since_verification > 365 THEN 1 END) as unverified_licenses,
MAX(so.days_since_verification) as longest_unverified_days,
-- Upcoming renewals
COUNT(CASE WHEN sl.end_date BETWEEN CURRENT_DATE AND CURRENT_DATE + INTERVAL '90 days' THEN 1 END) as renewals_next_90_days,
SUM(CASE WHEN sl.end_date BETWEEN CURRENT_DATE AND CURRENT_DATE + INTERVAL '90 days' THEN so.total_cost END) as renewal_value_next_90_days
FROM silver.software_ownership so
JOIN silver.software_license sl ON so.software_license_id = sl.software_license_id
GROUP BY so.business_owner_pii_id, so.business_owner_name, so.business_owner_department, so.business_owner_status;

Metrics Calculated:

  • Business owner (decision authority)
  • Technical owner (system administrator)
  • Executive sponsor (budget authority)
  • Ownership portfolio size and value per person
  • Orphaned licenses (owner departed/inactive)
  • Ownership verification staleness
  • Multi-role ownership (same person multiple roles)

Cerebro Enhancement

  • Intelligence: Detect ownership gaps (no owner assigned)
  • Intelligence: Identify ownership concentration risk (one person owns too much)
  • Intelligence: Track ownership transitions and reasons
  • Reasoning: Recommend ownership reassignment based on usage patterns
  • Reasoning: Suggest ownership consolidation opportunities

UI Representation

Component: SoftwareOwnershipDashboard in Experience Center

Visualization:

┌─────────────────────────────────────────────────────────────────────┐
│ Software Ownership: Microsoft 365 E5 │
├─────────────────────────────────────────────────────────────────────┤
│ 👤 Business Owner (Decision Authority) │
│ ├─ Name: Amanda Rodriguez │
│ ├─ Title: VP IT Operations │
│ ├─ Email: [email protected]
│ ├─ Department: IT │
│ └─ Status: ✓ Active │
│ │
│ 🔧 Technical Owner (Administrator) │
│ ├─ Name: Kevin Park │
│ ├─ Title: Senior IT Systems Administrator │
│ ├─ Email: [email protected]
│ ├─ Responsibilities: License provisioning, support escalation │
│ └─ Status: ✓ Active │
│ │
│ 💼 Executive Sponsor (Budget Authority) │
│ ├─ Name: David Chen │
│ ├─ Title: Chief Information Officer │
│ ├─ Email: [email protected]
│ └─ Budget: IT Operations ($8.4M software budget) │
│ │
│ 💰 Cost Center Allocation │
│ └─ CC-1200: IT Operations (100%) │
│ │
│ 📊 Owner Portfolio (Amanda Rodriguez) │
│ ├─ Total Software Owned: 8 products │
│ ├─ Total Portfolio Value: $3.2M │
│ ├─ Licenses Managed: 4,200 │
│ └─ Next Renewal: Microsoft 365 E5 (Jan 28, $684K) │
│ │
│ ✓ Ownership Last Verified: Dec 15, 2024 (30 days ago) │
│ │
│ [Re-verify Ownership] [Transfer Ownership] [View Portfolio] │
└─────────────────────────────────────────────────────────────────────┘

Interactions:

  • Click owner name → View complete ownership portfolio
  • Click "Re-verify Ownership" → Send verification email
  • Click "Transfer Ownership" → Initiate ownership change workflow
  • View ownership history and transitions
  • Export ownership report for compliance/audit

Copilot Query Example:

"Who owns our Microsoft 365 licenses?"

Answer: "Microsoft 365 E5 is owned by Amanda Rodriguez (VP IT Operations) as the business owner. Kevin Park is the technical administrator, and David Chen (CIO) is the executive sponsor. Amanda's portfolio includes 8 products worth $3.2M. The ownership was last verified 30 days ago on December 15, 2024."