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.
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 ChatPress Ctrl+Shift+I to open the chat panel. Make sure the mode is set to Ask (not Agent).
2
Invoke ARISStart 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 ResultsARIS generates the query, executes it against live data, and returns a formatted table with summary insights — all in seconds.
System Design
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
The user sees only the question and the answer — all of this happens invisibly
→
Skills Manager scans instruction filesRelevant 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 queryBased 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 dataUsing Node.js native fetch() for Power BI and PowerShell for Kusto, the query is executed with your authenticated identity — RLS fully enforced.
Technology
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.4VS Code Extension API 1.99+Node.js (native fetch)GitHub Copilot LLMPower BI REST APIAzure Data Explorer (Kusto)ExcelJSChart.jsPowerShell (auth only)MicrosoftPowerBIMgmt moduleMSAL / Microsoft SSOvsce (packaging)
💻
What Users Need Installed
Prerequisites on the user's machine before ARIS can run
✓
VS Code 1.99 or laterThe extension requires a recent version of VS Code. Download from code.visualstudio.com.
✓
GitHub Copilot ExtensionMust be installed and signed in. ARIS uses Copilot's language model — it will not function without an active Copilot subscription.
✓
Microsoft Corporate AccountA @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.
Data Sources
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 KustoPlain 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 Graine.g. "ADG: compare ACR for TPID X in FY26 at fiscal month grain"
→
Prefix FinHub: → FinHub SSASe.g. "FinHub: what is the AGR for FY26 by fiscal quarter?"
→
Keywords "planning" / "plan" → Planning Datasete.g. "what is the plan ACR for FY27?" — the word "plan" triggers the Planning dataset automatically.
Security & Authentication
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 PanelPress Ctrl+Shift+I. Ensure the chat mode is set to Ask.
2
Type @aris /startThis triggers the authentication flow. A terminal will open if a new sign-in is needed.
3
Complete Microsoft SSO in the terminalSign in with your @microsoft.com account. The terminal will confirm success and close automatically.
4
ARIS confirms readinessYou'll see: "✅ ARIS is ready! Authentication: active (auto-refreshes silently)" — you're good for the entire session.
Capabilities
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
Command
Type
Description
@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 modelSelect 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 periodsPhrases like "FY26", "Q2 FY26", "November 2025", or "last 3 months" are all understood and produce more precise queries.
💡
Follow up naturallyAfter 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 questionsClick + to start a fresh chat. Type @aris on the first message — follow-ups don't need the prefix after that.
User Guide
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
Issue
Fix
Not authenticated error
Run @aris /start again to refresh the session token
No response / empty chat
Check that the chat mode is set to Ask — not Agent
No language model available
Ensure GitHub Copilot is installed, signed in, and your subscription is active
Query returns no results
Your account may not have access to that data (RLS). Contact your data admin for access.
Extension not showing
Ctrl+Shift+P → Developer: Reload Window
Slow or no response after a long pause
Token may have expired. Run @aris /start to re-authenticate.