Azure Revenue Intelligence System

ARIS

A VS Code extension that turns natural language questions into live Power BI and Kusto queries — delivering instant Azure revenue insights without writing a single line of code.

Get Started → View Architecture
3
Power BI Datasets
1
Kusto Cluster
LLM
AI-Powered Queries
0
Code Required
∞
Custom Skills

Purpose & Problem Solved

Finance and revenue teams work with complex Power BI datasets and Kusto tables daily. ARIS eliminates the barrier of needing DAX or KQL expertise to extract insights.

💬

Ask in Plain English

No DAX, no KQL. Just type your question like you would ask a colleague — ARIS handles the rest using AI to generate and execute the right query automatically.

⚡

Live Data Execution

Every response pulls real-time data from official Power BI datasets and Kusto clusters. No screenshots, no static reports — always fresh numbers from the source of truth.

🔐

Secure by Design

Authentication uses your existing Microsoft corporate identity. Row-Level Security (RLS) is fully enforced by the underlying datasets — ARIS never bypasses access controls.

📊

Multi-Dataset Intelligence

ARIS can query and compare across multiple data sources in a single question — for example comparing monthly vs daily grain data side by side automatically.

📁

Extensible with Skills

Domain experts can add Markdown knowledge files as custom skills. ARIS uses these as additional context when generating queries, allowing team-specific expertise to be embedded.

📈

Built-in Visualisation

Ask for a chart and ARIS renders an interactive Chart.js visualisation in a side panel — complete with PNG export, alongside the underlying data table.

👤

How Users Experience This

ARIS lives entirely inside VS Code's chat panel — no browser tabs, no separate logins

1
Open VS Code Chat Press Ctrl+Shift+I to open the chat panel. Make sure the mode is set to Ask (not Agent).
2
Invoke ARIS Start your first message with @aris — e.g. @aris what is the ACR for FY26?. After the first message, follow-ups in the same thread are automatic.
3
Get Instant Results ARIS generates the query, executes it against live data, and returns a formatted table with summary insights — all in seconds.

End-to-End Architecture

Every user question flows through a 5-stage pipeline from intent detection to formatted output.

1

User Question

Natural language via VS Code Chat panel

2

Skills Manager

Retrieves relevant schema + rules from instruction files

3

LLM (Copilot)

Generates DAX or KQL query from context + question

4

Query Executor

Executes against Power BI REST API or Kusto REST API

5

Formatted Output

Table + insights + optional chart rendered in chat


Component Layers

User Interface
VS Code Chat Panel (@aris) Chat Commands (/start /export /help) WebView Chart Panel
Extension Core
extension.ts (Activation) ArisChatParticipant SkillsManager ChartRenderer
AI / LLM
GitHub Copilot (vscode.lm API) System Prompt Builder Conversation History (last 4 turns) DIRECT_ANSWER detection
Query Execution
DaxExecutor (Power BI REST API) KustoExecutor (Kusto REST API) Parallel multi-dataset execution Token Manager (silent refresh)
Data Sources
AHR (Power BI Live) Daily Grain (Power BI) Planning (Power BI) ACR Kusto Cluster
🔄

What Happens Under the Hood

The user sees only the question and the answer — all of this happens invisibly

→
Skills Manager scans instruction files Relevant schema sections (up to ~8,000 tokens) are retrieved and passed to the LLM as context alongside your question.
→
LLM chooses the right dataset and generates a query Based on keywords in your question, the AI decides whether to query AHR, Daily Grain, Planning, or Kusto — and generates the appropriate DAX or KQL.
→
Query is executed against live data Using Node.js native fetch() for Power BI and PowerShell for Kusto, the query is executed with your authenticated identity — RLS fully enforced.

What ARIS is Built With

A modern TypeScript extension built on top of VS Code's extensibility APIs and GitHub Copilot's language model integration.

🏗️

VS Code Extension (TypeScript)

Built entirely in TypeScript using the VS Code Extension API. The extension activates on demand and registers a Chat Participant (aris.chat) that handles all natural language queries. Compiled to JavaScript via tsc and packaged as a .vsix file for distribution.

🤖

GitHub Copilot (vscode.lm API)

ARIS uses VS Code's built-in vscode.lm.selectChatModels API to send prompts to Copilot's language model. The LLM receives the user question + retrieved schema context and returns either a DAX/KQL query or a direct answer. No external LLM API keys required.

📊

Power BI REST API

DAX queries are executed via the Power BI executeQueries REST endpoint using Node.js native fetch(). This eliminates encoding issues associated with PowerShell piping. Supports parallel multi-dataset execution for comparison queries.

🔍

Azure Data Explorer (Kusto)

KQL queries are executed against Kusto clusters via the Kusto REST API (/v1/rest/query) using PowerShell with a cached access token. The columnar response format is automatically converted into row objects for display.

📦

ExcelJS — Export to Excel

The /export command uses the ExcelJS library to generate a properly formatted .xlsx file from the last query results. Users choose a save location via VS Code's native file dialog.

📉

Chart.js — Interactive Charts

Chart rendering uses Chart.js running inside a VS Code WebView panel. When the user asks for a chart, ARIS detects the request, builds a chart configuration from the result data, and renders an interactive visualisation with a PNG export button.

Full Technology Reference

TypeScript 5.4 VS Code Extension API 1.99+ Node.js (native fetch) GitHub Copilot LLM Power BI REST API Azure Data Explorer (Kusto) ExcelJS Chart.js PowerShell (auth only) MicrosoftPowerBIMgmt module MSAL / Microsoft SSO vsce (packaging)
💻

What Users Need Installed

Prerequisites on the user's machine before ARIS can run

✓
VS Code 1.99 or later The extension requires a recent version of VS Code. Download from code.visualstudio.com.
✓
GitHub Copilot Extension Must be installed and signed in. ARIS uses Copilot's language model — it will not function without an active Copilot subscription.
✓
Microsoft Corporate Account A @microsoft.com account with access to the relevant Power BI workspaces. Authentication is handled via Microsoft SSO the first time you run @aris /start.
✓
PowerShell (Windows) Used for authentication token retrieval only. All data queries use Node.js. PowerShell is included with Windows — no separate installation needed for most users.

Connected Datasets

ARIS connects to multiple authoritative revenue data sources, each serving a specific analytical purpose. Dataset identifiers are managed securely within the extension.

Power BI REST API

AHR — Azure Health Report

Live Monthly Revenue Dataset
Dataset ID: ****-****-****-****
The primary dataset for monthly Azure Consumed Revenue (ACR). Includes customer segments, service hierarchy, strategic pillars, and geography dimensions. Enforces Row-Level Security per user identity. Used by default for all standard revenue questions.
Power BI REST API

Daily Grain (ADG)

Azure Date Grain Dataset
Dataset ID: ****-****-****-****
Date-level ACR data for granular daily analysis. Used when the user prefixes a question with ADG: or asks for day-level breakdowns. Supports the same dimensional filters as AHR but at daily grain. Comparison queries run both AHR and ADG in parallel.
Power BI REST API

Planning Dataset

Forecasts & Targets
Dataset ID: ****-****-****-****
Contains planning, forecast, and budget data. Shares the same schema as AHR. Triggered when the user mentions keywords such as "planning", "plan cube", "forecast", or "AHRPlanning" in their question.
Kusto REST API

ACR Kusto Cluster

Direct ACR & Anomaly Data
Cluster: acradxprod / acradxppe
Direct access to the ACR Kusto cluster for advanced analytics — strategic pillar joins via SLHMapping, anomaly detection feeds, RI purchase data, MACC/credit blending, and time-series forecasting. Default source when no dataset prefix is specified and the question requires KQL-level analysis.
ADOMD.NET / SSAS

FinHub (KPILakeRevenue)

Finance Hub — AGR & Forecasts
Server: finhubas
Analysis Services cube for Adjusted Revenue (AGR), forecasts, and targets. Triggered with the FinHub: prefix. Requires VPN and runs via Windows PowerShell 5.1 with integrated Windows authentication (SSPI).
🗂️

How to Target a Specific Dataset

ARIS auto-routes based on your question — but you can explicitly control which dataset is used

→
Default (no prefix) → AHR or Kusto Plain questions like "what is ACR for FY26?" route to AHR for DAX or Kusto for KQL-level analysis automatically based on context.
→
Prefix ADG: → Daily Grain e.g. "ADG: compare ACR for TPID X in FY26 at fiscal month grain"
→
Prefix FinHub: → FinHub SSAS e.g. "FinHub: what is the AGR for FY26 by fiscal quarter?"
→
Keywords "planning" / "plan" → Planning Dataset e.g. "what is the plan ACR for FY27?" — the word "plan" triggers the Planning dataset automatically.

How Authentication Works

ARIS uses your existing Microsoft corporate identity. No passwords are stored by the extension — authentication is delegated entirely to Microsoft's identity platform.

🔐 Initial Sign-In (One Time)

  • ① User runs @aris /start
  • ② ARIS checks for a cached Power BI token via the MicrosoftPowerBIMgmt PowerShell module
  • ③ If no token exists, a terminal opens with a Microsoft SSO browser popup
  • ④ User completes sign-in with their corporate account
  • ⑤ Token is cached by MSAL — subsequent sessions use the cached refresh token silently

🔄 Silent Token Refresh

  • ① Before every query, ARIS checks if the current token is still valid
  • ② If the token is expiring, ARIS calls Get-PowerBIAccessToken which silently uses the MSAL cached refresh token — no browser popup
  • ③ Tokens are valid for ~55 minutes and auto-refresh for the entire VS Code session
  • ④ If silent refresh fails (e.g. after a restart), user is prompted to run @aris /start again

🛡️ Row-Level Security (RLS)

  • • All Power BI queries are executed under the signed-in user's identity — RLS is enforced by the Power BI service and cannot be bypassed
  • • If a query returns fewer rows than expected, it reflects your authorised data access — ARIS will not attempt to infer or extrapolate data outside your RLS boundary
  • • ARIS never stores, logs, or transmits your access token outside of the API call context
  • • PowerShell is used exclusively for token retrieval — all data API calls use Node.js native fetch, eliminating encoding or injection attack surfaces
🔑

Authentication Steps for Users

This only needs to be done once per VS Code session

1
Open VS Code and the Chat Panel Press Ctrl+Shift+I. Ensure the chat mode is set to Ask.
2
Type @aris /start This triggers the authentication flow. A terminal will open if a new sign-in is needed.
3
Complete Microsoft SSO in the terminal Sign in with your @microsoft.com account. The terminal will confirm success and close automatically.
4
ARIS confirms readiness You'll see: "✅ ARIS is ready! Authentication: active (auto-refreshes silently)" — you're good for the entire session.

Features & Functionality

A complete breakdown of what ARIS can do out of the box.

🔄 Multi-Dataset Comparison Core

Ask ARIS to compare AHR vs Daily Grain side by side. Both queries run in parallel and results are merged with a source column, including absolute and percentage differences.

📁 Custom Skills New

Add your own Markdown files as skills — either individual files or an entire folder at once. ARIS loads them automatically and uses them as additional context when answering relevant questions.

📚 Knowledge Base Files New

Separate from skills, knowledge base files are domain-specific reference documents. Add them via the ARIS command palette. They're semantically indexed and retrieved when relevant.

📊 Interactive Charts

Ask for a bar chart, line chart, or any visualisation. ARIS detects the intent, renders a Chart.js chart in a WebView side panel with zoom and PNG export capability.

📤 Export to Excel

Run @aris /export after any query to save the results as a formatted .xlsx file. A save dialog lets you choose the destination.

🧠 Conversation Memory

The last 4 turns of conversation are included as context in every request, enabling follow-up questions without repeating filters or context: "now show it for FY25 instead"

⚡ Kusto KQL Execution New

ARIS now executes Kusto KQL queries natively — anomaly detection, SLH joins, RI analysis, forecasting, and more. Triggered automatically when domain knowledge points to Kusto.

🔍 Smart Query Routing

Dataset selection is automatic — ARIS reads question keywords and loaded skill files to decide whether to use AHR, Daily Grain, Planning, FinHub, or Kusto without the user needing to specify.

📋 Summary Insights

Every data response automatically includes a Summary Insights section — key findings, notable trends, peaks, and dips — without needing to ask for it separately.

Available Commands

CommandTypeDescription
@aris /start Chat Sign in to Power BI. Run once per VS Code session. Shows auth status, model name, and loaded skills count on success.
@aris /export Chat Export the last query result to an Excel (.xlsx) file. Opens a save dialog to choose the file location.
@aris /help Chat Display the help guide with example questions, dataset routing rules, and feature overview.
ARIS: Sign in to Power BI Palette Command palette equivalent of /start. Accessible via Ctrl+Shift+P.
ARIS: Add Custom Skills Palette Add one or more Markdown files — or an entire folder — as custom skills. Files are immediately active after loading.
ARIS: Add Knowledge Base File Palette Add domain reference Markdown files — or an entire folder — as knowledge base context for ARIS queries.
ARIS: List Skills Palette View all loaded skills (bundled, custom, and knowledge base). Select custom or KB files to delete them.
💡

Tips for Best Results

How to get the most out of ARIS in day-to-day use

💡
Use the recommended model Select Claude Sonnet or similar from the model dropdown at the bottom of the chat for best DAX and KQL generation quality.
💡
Be specific with time periods Phrases like "FY26", "Q2 FY26", "November 2025", or "last 3 months" are all understood and produce more precise queries.
💡
Follow up naturally After a result, ask "now break this down by segment" or "show the same for FY25" — ARIS retains context across the last 4 turns.
💡
Open a new thread for unrelated questions Click + to start a fresh chat. Type @aris on the first message — follow-ups don't need the prefix after that.

Getting Started with ARIS

From installation to your first query in under 5 minutes.

Step 1 — Install the Extension

Obtain the .vsix file from your team's shared location. In VS Code, press Ctrl+Shift+P, type Install from VSIX, select the file, and click Reload when prompted.

Step 2 — Ensure GitHub Copilot is Active

ARIS requires GitHub Copilot. Make sure the Copilot extension is installed and your account is signed in. You can verify this from the Accounts icon at the bottom-left of VS Code.

Step 3 — Open Chat in Ask Mode

Press Ctrl+Shift+I to open the Chat panel. Check the mode dropdown at the bottom — it must say Ask. If it says "Agent", click and switch to Ask.

Step 4 — Authenticate with Power BI

Type @aris /start and press Enter. A terminal will open for Microsoft SSO. Sign in with your corporate account. When the terminal confirms success, ARIS is ready.

Step 5 — Ask Your First Question

Type a revenue question, for example: @aris what is the ACR for FY26 by fiscal month? — ARIS will generate the query, execute it, and return a formatted table with insights.

Optional — Add Domain Knowledge

Press Ctrl+Shift+P → ARIS: Add Custom Skills or ARIS: Add Knowledge Base File to load Markdown files from your team. Select individual files or an entire folder — all .md files are loaded recursively and become immediately active.

🧩

Example Questions You Can Ask

A sample of what ARIS understands out of the box

💬 What is the ACR for FY26?
💬 Give me ACR by segment for November 2025
💬 Which strategic pillars contribute most to revenue?
💬 Compare AHR vs ADG ACR for FY26 by fiscal month
💬 Show month-over-month ACR change for Strategic Pillar AVD
💬 What is the ACR for SL4 'Azure AI Search' in India for Sep 2025?
💬 Which TPID has the highest ACR in FY26?
💬 Show ACR by billing type for Analytics SL1
💬 Forecast the next 6 months of ACR for Strategic Pillar AVD
💬 Show a bar chart of ACR by fiscal month for FY25 and FY26
💬 FinHub: what is the AGR target for FY26 Q3?
💬 What are the TPID anomalies from last week?

🔧 Troubleshooting

IssueFix
Not authenticated errorRun @aris /start again to refresh the session token
No response / empty chatCheck that the chat mode is set to Ask — not Agent
No language model availableEnsure GitHub Copilot is installed, signed in, and your subscription is active
Query returns no resultsYour account may not have access to that data (RLS). Contact your data admin for access.
Extension not showingCtrl+Shift+P → Developer: Reload Window
Slow or no response after a long pauseToken may have expired. Run @aris /start to re-authenticate.