
По оценкам специалистов, в 2025 году объём рынка бизнес-аналитики составит $32,4 млрд, а к 2035 году достигнет $64,3 млрд, при этом среднегодовой темп роста за прогнозируемый период составит 7,1%.

Business Intelligence — это не одна или несколько программ, а целые комплексы аналитических инструментов, собранные, как сейчас любят говорить, в «экосистемы». В последние годы бизнес-аналитика переживает беспрецедентную революцию.
Главными задачами BI были сбор и систематизация данных, поступающих из разных источников. На основе визуализации этих данных затем принимались управленческие решения.
Крупные BI-системы и их разработчики известны: Oracle BI, SAP BusinessObjects, IBM Cognos. Это классические BI-системы: дорогие, трудные во внедрении, сложные в использовании, требуют найма специалистов для обслуживания, развития и техподдержки. Стоимость их лицензирования постоянно растёт, а эффективность использования снижается.

В то же время такие сервисы для сбора и систематизации данных, как онлайн-таблицы, считались инструментами вторичными, предполагающими лишь несложные быстрые расчёты «на коленке», или даже вообще не рассматривались. Но, после появления искусственного интеллекта мир стал меняться. В обычных табличных онлайн-редакторах появились ИИ-ассистенты, которые уже могут решать часть проблем. Они сделали таблицы ближе к человеку и проще в использовании, здорово снизив порог входа в рабочие процессы. С этого момента онлайн-таблицы стали понемногу «отъедать» у крупных, дорогих и ожиревших от модулей BI-систем часть рынка в зоне «быстрой аналитики».
Вместо того, чтобы постоянно бегать к инженерам, сидеть в приёмной руководителя или ждать, пока обработается тикет, теперь бухгалтер сам может попросить ИИ «человеческим языком», «на лету» изменить логику какого-то документа, добавить новый срез или дополнительную выборку. И при этом ему не потребуется вникать в SQL, C++ или Java. Да и платить предприятию большие деньги за внедрение сложных BI не придётся. Достаточно будет завести корпоративный аккаунт в онлайн-таблицах, расшарить его для пары-тройки коллег и вести простые расчёты прямо там.
BI-системы сегодня находятся в сложной ситуации. Компании переходят от аналитики на основе сложных разработок к анализу данных с помощью ИИ. Конечно, BI-системы не исчезнут. Они останутся там, где необходима автономная обработка и структурирование огромных массивов данных. Но в сферах, где расчёты относительно просты и нужно делать их очень быстро, онлайн-таблицы с ИИ-ассистентами могут вытеснить BI, помогая сэкономить важнейшие для бизнеса ресурсы — время от вопроса до ответа или решения и деньги.
Как автоматизировать простые задачи
Ассистент, встроенный в Google-таблицы представляет собой отдельный чат, в котором можно задавать вопросы искусственному интеллекту. Никакой волшебной кнопки, которая решала бы все проблемы здесь, конечно же нет. Но помощник может подсказать способы решения множества разных задач, с которыми приходится сталкиваться пользователю. Ты задаёшь вопросы — он отвечает и подсказывает, как действовать дальше. Происходит почти то же, что и в окне чата ИИ, но только ассистент «заточен» под специфику работы с таблицами и, при необходимости не только ответит на конкретный вопрос, но и поможет с формулой или синтаксисом, выдаст в окне нужные данные, проведёт «по шагам», если потребуется сделать что-то очень сложное. Удобное решение.


Благодаря ИИ современные таблицы перестали быть просто «сеткой ячеек». Обладая подобными инструментами, они постепенно превращаются в умные аналитические системы, которые в недалёком будущем смогут самостоятельно загружать, очищать, агрегировать и визуализировать данные. А пользователь будет только наблюдать и управлять их действиями.
Но и без ИИ, таблицы — штука мощная. При большом желании с их помощью можно кое-что автоматизировать, используя только встроенные инструменты. Давайте создадим скрипт, который будет загружать данные, группировать и выводить срез клиентов по странам из найденного в Сети примера. Так в идеале и должен работать ИИ — как автономный аналитик, встроенный в привычный интерфейс. Такой подход будет особенно ценен для бизнеса, поскольку, как я уже писал выше, сэкономит время и ресурсы.
function refreshFromCsvAndSummarize() { const CSV_URL = 'https://drive.google.com/uc?export=download&id=1zO8ekHWx9U7mrbx\_0Hoxxu6od7uxJqWw'; const RAW_SHEET = 'Raw'; const SUMMARY_SHEET = 'Summary'; const DASHBOARD_SHEET = 'Dashboard'; const groupCol = 6; const ss = SpreadsheetApp.getActive(); const raw = ss.getSheetByName(RAW_SHEET) || ss.insertSheet(RAW_SHEET); const summary = ss.getSheetByName(SUMMARY_SHEET) || ss.insertSheet(SUMMARY_SHEET); const dashboard = ss.getSheetByName(DASHBOARD_SHEET) || ss.insertSheet(DASHBOARD_SHEET); const resp = UrlFetchApp.fetch(CSV_URL); const csv = resp.getContentText('UTF-8'); if (csv.trim().startsWith('<')) throw new Error('Получен HTML, а не CSV'); const data = Utilities.parseCsv(csv); raw.clear(); raw.getRange(1, 1, data.length, data[0].length).setValues(data); const rows = raw.getDataRange().getValues(); const header = rows[0]; const cleaned = [header].concat(rows.slice(1).filter(r => r.some(c => String(c).trim() !== ''))); raw.clear(); raw.getRange(1, 1, cleaned.length, cleaned[0].length).setValues(cleaned); const agg = new Map(); cleaned.slice(1).forEach(r => { const key = String(r[groupCol]).trim(); if (key) agg.set(key, (agg.get(key) || 0) + 1); }); const out = [['Страна', 'Клиентов']].concat(Array.from(agg.entries()).sort((a, b) => b[1] - a[1])); summary.clear(); summary.getRange(1, 1, out.length, out[0].length).setValues(out); dashboard.clear(); dashboard.getRange(1, 1, out.length, out[0].length).setValues(out); const chart = dashboard.newChart() .asColumnChart() .addRange(dashboard.getRange(1, 1, out.length, 2)) .setOption('title', 'Клиенты по странам') .setOption('height', 400) .setOption('width', 800) .setPosition(5, 1, 0, 0) .build(); dashboard.insertChart(chart); }


С поддержкой ИИ эту же операцию сможет выполнить любой пользователь, ничего не изучая и не разбираясь в тонкостях и синтаксисе языка таблиц. В его руках ИИ-ассистент станет мощным оружием, которое быстро превратит онлайн-таблицы в активные аналитические системы. Со временем они эволюционируют и смогут самостоятельно загружать данные из внешних источников, адаптировать их к нужному формату, формировать необходимые выборки, срезы, контрольные точки и т. д, а пользователь будет получать нужную ему информацию без дополнительных усилий и затрат.
Лидеры рынка тоже пытаются не отстать от жизни. Microsoft внедряет аналогичные решения в свои облачные сервисы, но работать с ними сложнее, так как они являются частью экосистемы Microsoft 365. Google Sheets с Apps Script намного доступнее.
Доступный ИИ-ассистент появился и в Яндекс Таблицах. Встроенные нейросетевые возможности помогут получить краткий пересказ текста, ужать его до тезисов, перевести на другой язык или вообще придумать, определить тональность (полезная функция, во всю используемая в чатах служб поддержки), извлечь из массива данных нужную информацию, распределить по категориям, исправить ошибки, составить формулы для расчётов. ИИ поможет навести порядок в данных — убрать двойные пробелы, привести все даты к единому формату и т. д.
И его ключевая фишка – нативная поддержка русского языка, которая позволяет “общаться” с таблицами простым языком: без формул, без скриптов и всего того, что пугает людей в таблицах (хотя, если нужно, все это имеется). ИИ в Таблицах выступают в роли ассистента, который выполнит поставленные задачи.
Сервис, как и современный Excel, также является частью экосистемы (в данном случае, Яндекс 360), но пользоваться ИИ можно с некоторыми ограничениями без подписки и без дополнительных трудностей. Сервис можно считать неплохим входным билетом в табличный ИИ.
В 2026 году появятся и десктопные приложения Документов и Таблиц от Яндекс 360 для Windows, macOS и Linux, которые будут совместимы с MS Office. Разработчики обещают, что новые приложения справятся даже со сложными документами и нестандартным форматированием. И уже с самого начала пользователям будут доступны редактирование, комментирование и рецензирование, а чуть позднее — синхронизация с облаком. ИИ, судя по косвенным признакам, также будет доступен. Но официально это не подтверждали.

Старый Exсel без ИИ, но умные задачи решать умеет
Почти то же самое — загрузку файлов, очистку данных, формирование отчётов, построение диаграмм — можно выполнить в старом Excel, не вкладывая ни рубля в облачные подписки. Любой Excel, даже весьма преклонных лет выпуска, представляет собой крепкую платформу для несложной автоматизации: он умеет работать с UTF-8, корректно парсит сложные CSV, выбирает необходимые данные — и делает всё это локально, без подключения жадных облачных сервисов, вроде Microsoft 365. Excel используют более 750 млн пользователей во всём мире.
Правда, хозяева Microsoft, похоже, окончательно «зажрались»: вместо развития встроенного, доступного всем инструментария, компания всё больше толкает пользователей в платные экосистемы Power Platform, Office Scripts и облако, превращая решение достаточно простых задач в привилегию подписчиков. А между тем — Excel, под рукой, без интернета и ежемесячных платежей и ещё может «задать жару».
Создадим в нём скрипт, который, хоть и не будет использовать нейросети, но покажет те же возможности, которые мы уже использовали в таблицах Google. Он найдёт и скачает нужный файл, сделает необходимую выборку и должным образом её оформит (группируем пользователей по значению из колонки address в найденном примере). При желании скрипт можно расширить, добавив нужные функции.
Option Explicit ' === НАСТРОЙКИ === Private Const CSV_URL As String = "https://template-builder.net/test-data/csv-files/10kb.csv" Private Const RAW_SHEET As String = "Raw" Private Const SUMMARY_SHEET As String = "Summary" Private Const CHART_NAME As String = "SummaryChart" Private Const DELIMITER As String = "," Private Const GROUP_BY_HEADER As String = "address" Private Const AGG_HEADER As String = "" ' "" = COUNT Public Sub RefreshFromCsvAndSummarize_ByHeader() Dim oldCalc As XlCalculation, oldSU As Boolean oldCalc = Application.Calculation oldSU = Application.ScreenUpdating On Error GoTo Cleanup Application.ScreenUpdating = False Application.Calculation = xlCalculationManual Dim csvText As String csvText = HttpGetUtf8(CSV_URL) Dim data As Variant data = CsvTo2DArray(csvText, DELIMITER) If IsEmpty(data) Then Err.Raise vbObjectError + 9001, , "CSV parsed as empty." Dim cleaned As Variant cleaned = RemoveCompletelyBlankRows(data) If IsEmpty(cleaned) Then Err.Raise vbObjectError + 9002, , "All rows are blank after cleaning." Dim wb As Workbook: Set wb = ThisWorkbook Dim wsRaw As Worksheet: Set wsRaw = GetOrCreateSheet(wb, RAW_SHEET) Dim wsSum As Worksheet: Set wsSum = GetOrCreateSheet(wb, SUMMARY_SHEET) ' 1) Raw wsRaw.Cells.Clear wsRaw.Range("A1").Resize(UBound(cleaned, 1), UBound(cleaned, 2)).Value = cleaned ' 2) Find columns by header Dim keyCol As Long keyCol = FindColumnIndexByHeader(cleaned, GROUP_BY_HEADER) If keyCol = 0 Then Err.Raise vbObjectError + 2001, , "GROUP_BY_HEADER not found: " & GROUP_BY_HEADER Dim sumCol As Long If Trim$(AGG_HEADER) <> "" Then sumCol = FindColumnIndexByHeader(cleaned, AGG_HEADER) If sumCol = 0 Then Err.Raise vbObjectError + 2002, , "AGG_HEADER not found: " & AGG_HEADER Else sumCol = 0 End If ' 3) Summarize Dim summary As Variant summary = GroupAgg(cleaned, keyCol, sumCol) wsSum.Cells.Clear wsSum.Range("A1").Resize(UBound(summary, 1), UBound(summary, 2)).Value = summary wsSum.Columns("A:B").AutoFit ' 4) Chart UpsertSummaryChart wsSum, CHART_NAME, UBound(summary, 1) Cleanup: Application.Calculation = oldCalc Application.ScreenUpdating = oldSU If Err.Number <> 0 Then Err.Raise Err.Number, Err.Source, Err.Description End Sub ' ========================= ' HTTP GET with UTF-8 decode (WinHTTP) ' ========================= Private Function HttpGetUtf8(ByVal url As String) As String Dim req As Object: Set req = CreateObject("WinHttp.WinHttpRequest.5.1") req.Option(6) = True ' follow redirects req.Open "GET", url, False req.SetRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64)" req.SetRequestHeader "Accept", "text/csv,text/plain,*/*;q=0.8" req.SetRequestHeader "Referer", "https://template-builder.net/" req.Send If req.Status < 200 Or req.Status >= 300 Then Err.Raise vbObjectError + 1000, , "HTTP " & req.Status & vbCrLf & Left$(req.ResponseText, 800) End If Dim stm As Object: Set stm = CreateObject("ADODB.Stream") stm.Type = 1: stm.Open stm.Write req.ResponseBody stm.Position = 0 stm.Type = 2: stm.Charset = "utf-8" HttpGetUtf8 = stm.ReadText stm.Close End Function ' ========================================================== ' CSV parser (supports quotes + embedded newlines in quotes) ' ========================================================== Private Function CsvTo2DArray(ByVal csvText As String, ByVal delim As String) As Variant If Len(delim) <> 1 Then Err.Raise vbObjectError + 3001, , "Delimiter must be 1 character" csvText = Replace(csvText, ChrW(&HFEFF), "") Dim rows As Collection: Set rows = New Collection Dim inQuotes As Boolean Dim field As String: field = "" Dim fields As Collection: Set fields = New Collection Dim i As Long, ch As String Dim L As Long: L = Len(csvText) i = 1 Do While i <= L ch = Mid$(csvText, i, 1) If ch = """" Then If inQuotes Then If i < L And Mid$(csvText, i + 1, 1) = """" Then field = field & """" i = i + 1 Else inQuotes = False End If Else inQuotes = True End If ElseIf (Not inQuotes) And (ch = delim) Then fields.Add field field = "" ElseIf (Not inQuotes) And (ch = vbCr Or ch = vbLf) Then fields.Add field field = "" rows.Add FieldsToArray(fields) Set fields = New Collection If ch = vbCr And i < L And Mid$(csvText, i + 1, 1) = vbLf Then i = i + 1 End If Else field = field & ch End If i = i + 1 Loop If fields.Count > 0 Or Len(field) > 0 Then fields.Add field rows.Add FieldsToArray(fields) End If CsvTo2DArray = RowsTo2DArray(rows) End Function Private Function FieldsToArray(ByVal fields As Collection) As Variant Dim arr() As Variant, j As Long ReDim arr(1 To fields.Count) As Variant For j = 1 To fields.Count arr(j) = fields(j) Next j FieldsToArray = arr End Function Private Function RowsTo2DArray(ByVal rows As Collection) As Variant If rows.Count = 0 Then RowsTo2DArray = Empty Exit Function End If Dim r As Long, c As Long, maxCols As Long maxCols = 0 For r = 1 To rows.Count Dim rowArr As Variant rowArr = rows(r) If Not IsEmpty(rowArr) Then If UBound(rowArr) > maxCols Then maxCols = UBound(rowArr) End If Next r Dim out() As Variant ReDim out(1 To rows.Count, 1 To maxCols) As Variant For r = 1 To rows.Count rowArr = rows(r) For c = 1 To UBound(rowArr) out(r, c) = rowArr(c) Next c Next r RowsTo2DArray = out End Function ' ========================= ' Cleaning: remove blank rows (keeps header) ' ========================= Private Function RemoveCompletelyBlankRows(ByVal data As Variant) As Variant If IsEmpty(data) Then RemoveCompletelyBlankRows = Empty Exit Function End If Dim rowsCount As Long: rowsCount = UBound(data, 1) Dim colsCount As Long: colsCount = UBound(data, 2) Dim temp() As Variant ReDim temp(1 To rowsCount, 1 To colsCount) As Variant Dim r As Long, c As Long, outR As Long outR = 1 For c = 1 To colsCount temp(outR, c) = data(1, c) Next c For r = 2 To rowsCount Dim hasAny As Boolean: hasAny = False For c = 1 To colsCount If Len(Trim$(CStr(data(r, c)))) > 0 Then hasAny = True Exit For End If Next c If hasAny Then outR = outR + 1 For c = 1 To colsCount temp(outR, c) = data(r, c) Next c End If Next r ReDim Preserve temp(1 To outR, 1 To colsCount) As Variant RemoveCompletelyBlankRows = temp End Function ' ========================= ' Header lookup (case-insensitive + trims + BOM) ' ========================= Private Function FindColumnIndexByHeader(ByVal data As Variant, ByVal headerName As String) As Long Dim colsCount As Long: colsCount = UBound(data, 2) Dim c As Long, target As String target = LCase$(Trim$(headerName)) For c = 1 To colsCount Dim h As String h = Replace(CStr(data(1, c)), ChrW(&HFEFF), "") h = LCase$(Trim$(h)) If h = target Then FindColumnIndexByHeader = c Exit Function End If Next c FindColumnIndexByHeader = 0 End Function ' ========================= ' Aggregation: COUNT or SUM ' ========================= Private Function GroupAgg(ByVal data As Variant, ByVal keyCol As Long, ByVal sumCol As Long) As Variant Dim dict As Object: Set dict = CreateObject("Scripting.Dictionary") Dim r As Long For r = 2 To UBound(data, 1) Dim key As String key = Trim$(CStr(data(r, keyCol))) If key = "" Then GoTo NextRow If sumCol = 0 Then If dict.Exists(key) Then dict(key) = dict(key) + 1 Else dict.Add key, 1 Else Dim v As Double v = ToDoubleSafe(data(r, sumCol)) If dict.Exists(key) Then dict(key) = dict(key) + v Else dict.Add key, v End If NextRow: Next r Dim out() As Variant ReDim out(1 To dict.Count + 1, 1 To 2) As Variant out(1, 1) = "Group" out(1, 2) = IIf(sumCol = 0, "Count", "Sum") Dim i As Long: i = 0 Dim k As Variant For Each k In dict.Keys i = i + 1 out(i + 1, 1) = k out(i + 1, 2) = dict(k) Next k GroupAgg = out End Function Private Function ToDoubleSafe(ByVal v As Variant) As Double On Error GoTo Fail Dim s As String: s = Trim$(CStr(v)) If s = "" Then ToDoubleSafe = 0: Exit Function s = Replace(s, " ", "") Dim decSep As String: decSep = Application.International(xlDecimalSeparator) If decSep = "," Then s = Replace(s, ".", ",") Else s = Replace(s, ",", ".") ToDoubleSafe = CDbl(s) Exit Function Fail: ToDoubleSafe = 0 End Function ' ========================= ' Chart: create/update ' ========================= Private Sub UpsertSummaryChart(ByVal ws As Worksheet, ByVal chartName As String, ByVal lastRow As Long) If lastRow < 2 Then Exit Sub Dim rng As Range Set rng = ws.Range("A1:B" & lastRow) Dim co As ChartObject On Error Resume Next Set co = ws.ChartObjects(chartName) On Error GoTo 0 If co Is Nothing Then Set co = ws.ChartObjects.Add(Left:=300, Top:=10, Width:=520, Height:=320) co.Name = chartName End If With co.Chart .ChartType = xlColumnClustered .SetSourceData Source:=rng .HasTitle = True .ChartTitle.Text = "Summary (" & GROUP_BY_HEADER & ")" On Error Resume Next .Legend.Delete On Error GoTo 0 End With End Sub ' ========================= ' Utilities ' ========================= Private Function GetOrCreateSheet(ByVal wb As Workbook, ByVal name As String) As Worksheet On Error Resume Next Set GetOrCreateSheet = wb.Worksheets(name) On Error GoTo 0 If GetOrCreateSheet Is Nothing Then Set GetOrCreateSheet = wb.Worksheets.Add(After:=wb.Worksheets(wb.Worksheets.Count)) GetOrCreateSheet.Name = name End If End Function
Итог: таблица клиентов, разбитая по адресам. Может и неидеально, зато информативно.


А можно ли, допустим, интегрировать Exсel и ИИ (построить собственное маленькое королевство, где-нибудь на частной фирме), минуя все препятствия, вроде корпоративных интересов компаний, платной подписки и прочего раздражающего мусора? Да. можно. Хотя, это не так просто.
На GitHub есть проект xlsm-llm, который предлагает готовый набор функций для решения таких задач. Разработчики пишут, что их система работает в Windows, Linux и MacOs и есть даже гайд по установке.
Она позволяет отправлять ИИ, обрабатывать тексты, обобщать, переводить и генерировать код в Exсel. Причём xlsm-llm поддерживает как локальные модели, так и внешние API (OpenAI, Gemini и Upstage). В случае использования локальных моделей будут, конечно, огромные «подводные камни», в виде запуска языковой модели на локальном сервере. Но при желании и наличии некоторых ресурсов возможно и не такое.
Вывод
Трансформация бизнес-аналитики, запущенная искусственным интеллектом, необратима. Традиционные BI-системы не исчезнут полностью, но их роль изменится: они останутся в нишах, требующих обработки огромных массивов данных и сложной интеграции.
Экономический эффект от перехода в эру ИИ впечатляет: компании смогут сократить затраты на аналитику, одновременно повысив скорость принятия решений. Полный контроль над данными, ранее сосредоточенный в руках инженеров, теперь станет доступен и сотрудникам из смежных отраслей: бухгалтерам, экономистам, маркетологам, что даст бизнесу большую гибкость. Через год-два году мы сможем наблюдать дальнейшую эволюцию этого тренда: появление десктопных приложений с ИИ-возможностями, и дальнейшее снижение барьеров для входа в аналитику. Мы видим, что об этом задумались как мировые гиганты, так и локальные вендоры. В России первый шаг в этом направлении сделал Яндекс 360. Скорее всего, за ним последуют и другие компании.
Будущее бизнес-аналитики — за гибридными решениями, где ИИ-ассистенты в привычных инструментах, вроде Google Sheets и Excel станут первым шагом в аналитику, а традиционные BI-платформы будут использоваться для решения ресурсоёмких задач другого уровня. Этот переход не просто сэкономит деньги и время — он сделает данные доступным стратегическим ресурсом для любого специалиста, независимо от его технической подготовки.
