🟩 Компьютерно-техническая экспертиза систем Business Intelligence

🟩 Компьютерно-техническая экспертиза систем Business Intelligence

Техническое введение: BI как сложная программная система

Современные системы Business Intelligence (Power BI, Tableau, Qlik Sense, SAP BusinessObjects) представляют собой многоуровневые программные комплексы. Технически они состоят из источников данных (SQL, Excel, API), ETL-процессов (Power Query, Qlik Script), модели данных (DAX, Tableau Calculations), визуализации и журналов аудита. Каждый уровень может быть сфальсифицирован: изменены формулы, удалены дашборды, подменены источники, модифицированы ETL-скрипты. Техническая задача экспертизы — найти неудаляемые следы манипуляций на каждом уровне. 🖥️📊

Мы, эксперты Союза «Федерация судебных экспертов», специализируемся на компьютерно-технической экспертизе систем business intelligence. В этой статье, написанной в техническом стиле, мы представляем методы низкоуровневого анализа BI-систем: от парсинга.pbix и.twb до анализа логов PostgreSQL и Azure Log Analytics. Три реальных кейса иллюстрируют применение этих методов.

Глава 1. Техническая архитектура BI-систем как объект экспертизы

С технической точки зрения, BI-системы имеют следующую архитектуру. 🏗️

Power BI (облачная и on-premise):

Файл.pbix — ZIP-архив, содержащий DataModelSchema (JSON с DAX-формулами), Report/Layout (JSON визуализаций), Connections, а также M-код Power Query.

Логи: Azure Log Analytics (таблицы PowerBIDatasets, PowerBIActivity).

Хранилище: OneDrive/SharePoint (история версий).

Бэкапы: Data Export (через судебный запрос).

Tableau (on-premise и облачный):

Файл.twb — XML-файл с описанием дашбордов, источников данных, вычислений.

Файл.twbx — архив (.twb + данные).

Логи: PostgreSQL (таблицы historical_events, http_requests).

Бэкапы: .tsbak (архив).

Qlik Sense (on-premise):

Файл.qvf — контейнер со скриптами и моделью.

Логи: PostgreSQL (таблицы script_versions, operations, users).

Бэкапы: .qvf (копии приложений).

SAP BusinessObjects (on-premise):

Файлы.unx (универс),.rep (отчёты).

Логи: база данных Audit (CMS).

Бэкапы: резервные копии CMS.

Компьютерно-техническая экспертиза систем business intelligence требует знания всех этих форматов.

Глава 2. Технические методы анализа Power BI

Метод 1. Парсинг.pbix (ZIP + JSON + M)
Файл.pbix — ZIP-архив. Распаковка:

bash

unzip report.pbix -d report_extracted/

Ключевые файлы:

DataModelSchema — JSON с DAX-формулами, связями, мерами.

Report/Layout — JSON визуализаций, страниц, фильтров.

Connections — строки подключения к источникам.

M — скрипты Power Query (в бинарном виде, но могут быть извлечены).

Метод 2. Извлечение DAX-формул
Из DataModelSchema извлекается раздел expressions. Формулы имеют вид:

json

{

«Name»: «Cost»,

«Expression»: «SUM(Production[ActualCost])»

}

Для поиска изменений используется сравнение версий (diff) через jq:

bash

jq ‘.expressions[] | select(.Name==»Cost»)’ old/DataModelSchema > old_cost.json

jq ‘.expressions[] | select(.Name==»Cost»)’ new/DataModelSchema > new_cost.json

diff old_cost.json new_cost.json

Метод 3. Анализ Azure Log Analytics
KQL-запрос (Kusto Query Language):

text

PowerBIDatasets

| where OperationName == «UpdateReport» or OperationName == «DeleteReport»

| project TimeGenerated, UserId, ClientIP, WorkspaceId, ReportName

Метод 4. Восстановление из бэкапа Microsoft
Судебный запрос Data Export. Бэкап предоставляется в виде ZIP-архива с файлами.pbix. Восстановление в тестовую среду.

Глава 3. Кейс №1: Power BI — обнаружение подмены DAX-формулы

🔧 Техническая задача: Обнаружить изменение DAX-формулы себестоимости в Power BI при отключённой истории версий.

Параметры:

Файл.pbix в SharePoint.

История версий отключена.

Azure Log Analytics включён (90 дней).

Бэкап Data Export доступен через суд.

Технический процесс 🔨

Шаг 1. Запрос к Azure Log Analytics
KQL-запрос:

text

PowerBIDatasets

| where OperationName == «UpdateReport»

| where TimeGenerated > datetime(2025-03-14)

Результат: запись от 15.03.2025 02: 17: 33 UTC, пользователь `fin_director@promtech.ru», IP-адрес 185.xxx.xx.xx (VPN).

Шаг 2. Судебный запрос Data Export
Запрос к Microsoft о предоставлении бэкапа на 14.03.2025. Получен ZIP-архив с.pbix.

Шаг 3. Распаковка.pbix и извлечение DAX-формул

bash

unzip backup_20250314.pbix -d backup/

cat backup/DataModelSchema | jq ‘.expressions[] | select(.Name==»Cost»)’

Результат: «Expression»: «SUM(Production[ActualCost])»

Шаг 4. Сравнение с текущей формулой
Текущий.pbix (после изменения):

bash

unzip current.pbix -d current/

cat current/DataModelSchema | jq ‘.expressions[] | select(.Name==»Cost»)’

Результат: «Expression»: «SUM(Production[ActualCost]) * 0.7»

Шаг 5. Diff:

text

— SUM(Production[ActualCost])

+ SUM(Production[ActualCost]) * 0.7

Шаг 6. Технический вывод
Формула была изменена пользователем `fin_director@promtech.ru» 15.03.2025 в 02: 17: 33. Корректная себестоимость — по формуле из бэкапа.

Глава 4. Технические методы анализа Tableau

Метод 1. Парсинг.twb (XML)
.twb — XML-файл. Ключевые узлы:

<datasource> — источник данных и SQL-запрос.

<column> с атрибутом calculation — вычисляемые поля.

<worksheet> — листы дашборда.

<dashboard> — дашборды.

Метод 2. Анализ PostgreSQL Tableau Server
Таблицы:

historical_events — все события (удаления, изменения, просмотры).

http_requests — HTTP-запросы к серверу (IP, метод, URL).

Метод 3. Восстановление из.tsbak
.tsbak — архив. Восстановление:

bash

tabadmin restore /backups/tableau_20250314.tsbak

После восстановления — экспорт дашбордов через tabcmd.

Глава 5. Кейс №2: Tableau — обнаружение удаления дашбордов и подмены источников

🔧 Техническая задача: Обнаружить удаление дашбордов в Tableau Server и подмену источников данных.

Параметры:

Tableau Server on-premise.

Логи PostgreSQL сохранены (historical_events).

Бэкапы.tsbak создаются (ежедневно в 2: 00).

Технический процесс 🔨

Шаг 1. Подключение к PostgreSQL и запрос

bash

psql -h tableau-server -U tableau -d workgroup

sql

SELECT id, created_at, user_id, event_type, details

FROM historical_events

WHERE event_type = ‘workbook-delete’

AND created_at > ‘2025-03-01’;

Результат: 15 записей, user_id = consultant@integrator.ru, имена дашбордов с «Loss», «Negative margin».

Шаг 2. Восстановление бэкапа.tsbak

bash

tabadmin restore /backups/tableau_20250314.tsbak

Шаг 3. Экспорт.twb-файлов

bash

tabcmd export «Убытки_регион_Север» —output-file losses_north.twb

Шаг 4. Анализ XML

xml

<datasource>

<connection>

<sql>SELECT region, product, profit FROM sales WHERE year=2024</sql>

</connection>

</datasource>

Шаг 5. Сравнение с текущим источником
Текущий.twb:

xml

<sql>SELECT region, product, profit FROM sales WHERE year=2024 AND profit>0</sql>

Diff: добавлен AND profit>0 — фильтрация убыточных строк.

Шаг 6. Технический вывод
Удалены 15 дашбордов. Источник данных подменён.

Глава 6. Технические методы анализа Qlik Sense

Метод 1. Парсинг.qvf
.qvf — ZIP-архив. Распаковка:

bash

unzip app.qvf -d app_extracted/

Ключевой файл: Script — Qlik Script (ETL-скрипт).

Метод 2. Анализ PostgreSQL Qlik
Таблицы:

script_versions — история версий скриптов (версия, автор, время, полный текст).

operations — логи действий пользователей (edit_script, delete_app).

Метод 3. Восстановление из.qvf
Копирование.qvf и загрузка в Qlik Sense Desktop.

Глава 7. Кейс №3: Qlik Sense — обнаружение дублирования продаж в ETL-скрипте

🔧 Техническая задача: Обнаружить изменение Qlik Script, дублирующее суммы продаж.

Параметры:

Qlik Sense Enterprise on-premise.

История версий скриптов включена.

Логи PostgreSQL сохранены.

Технический процесс 🔨

Шаг 1. Запрос к script_versions

sql

SELECT version, modified_by, modified_time, script

FROM script_versions

WHERE app_name = ‘Sales Dashboard’

ORDER BY modified_time;

Шаг 2. Сравнение версий
Версия 5:

text

LOAD customer, amount FROM sales.csv;

Версия 6:

text

LOAD customer, amount * 2 as amount FROM sales.csv;

Diff: amount * 2.

Шаг 3. Идентификация автора
modified_by = sales_head@torghab.ru, modified_time = 10.02.2025 23: 45: 00.

Шаг 4. Запрос к operations

sql

SELECT user_id, operation, time, ip_address

FROM operations

WHERE user_id = ‘sales_head@torghab.ru’ AND operation = ‘edit_script’;

IP-адрес: 192.168.1.100 (домашний компьютер).

Шаг 5. Технический вывод
Скрипт изменён, добавлено дублирование продаж. Корректные KPI восстановлены откатом к версии 5.

Глава 8. Сравнительный анализ технических методов

BI-системаФормат файловЛогиБэкапыИнструменты анализа
Power BI.pbix (ZIP+JSON)Azure Log Analytics (KQL)Data Exportjq, DAX Studio, PowerShell
Tableau.twb (XML),.twbxPostgreSQL (historical_events).tsbakxmlstarlet, psql, tabcmd
Qlik Sense.qvf (ZIP)PostgreSQL (script_versions).qvfpsql, diff, Qlik Sense Desktop

Компьютерно-техническая экспертиза систем business intelligence требует владения этими инструментами.

Глава 9. Инструментарий эксперта BI

Программное обеспечение:

Power BI: Power BI Desktop, DAX Studio, Tabular Editor, jq (JSON), PowerShell.

Tableau: Tableau Desktop, Tabcmd, PostgreSQL client (psql), xmlstarlet.

Qlik: Qlik Sense Desktop, Qlik Management Console, psql.

Общие: WinMerge, Beyond Compare, Git diff, Python (pandas, openpyxl).

Аппаратные средства (для on-premise):

Tableau Forensic Duplicator T8 (копирование дисков).

WriteBlocker для SATA/SAS/NVMe.

PC-3000 (восстановление данных с повреждённых дисков).

Глава 10. Технические ограничения методов

Когда восстановление невозможно:

История версий Power BI отключена, бэкапы вендора перезаписаны (>90 дней).

Логи Tableau Server не настроены (historical_events не создана).

Бэкапы.tsbak /.qvf не создавались.

История версий Qlik Sense отключена.

Процент восстановления:

BI-системаИсточникПроцентСрок
Power BIAzure Log Analytics + Data Export95-100%до 90 дней
Tableauhistorical_events +.tsbak95-100%зависит от настроек
Qlik Sensescript_versions +.qvf100%пока не очищена

Глава 11. Часто задаваемые технические вопросы

Вопрос: Как восстановить.pbix, если он не сохранён в OneDrive?
✅ Ответ: Только через судебный запрос Data Export к Microsoft.

Вопрос: Как часто Tableau Server создаёт бэкапы.tsbak?
✅ Ответ: По умолчанию — ежедневно в 2: 00. Настраивается.

Вопрос: Можно ли восстановить скрипт Qlik, если история версий очищена?
✅ Ответ: Через бэкапы.qvf или через WAL PostgreSQL (если включён).

Вопрос: Какова минимальная сумма иска для окупаемости экспертизы?
✅ Ответ: Экспертиза стоит от 120 000 руб. Окупается при иске от 3-5 млн руб.

Глава 12. Экономическая эффективность

Формула: EV = S × q — C — (1-q) × F

Пример (иск 20 млн руб., C=400 000 руб., q=0,95):
EV(с экспертизой) = 20×0,95 — 0,4 — 0,05×0,2 = 18,59 млн руб.
EV(без экспертизы) = 20×0,30 — 0 — 0,70×0,2 = 5,86 млн руб.
Выигрыш: 12,73 млн руб.

Глава 13. Протокол технического исследования BI

Для Power BI:

Извлечь.pbix через SharePoint API или судебный запрос.

Распаковать.pbix (ZIP).

Извлечь DAX-формулы из DataModelSchema (JSON).

Сравнить версии (diff через jq).

Запросить Azure Log Analytics (KQL).

Для Tableau:

Сделать дамп PostgreSQL (historical_events).

Восстановить.tsbak.

Извлечь.twb (XML).

Сравнить узлы <datasource> и <calculation> (xmlstarlet).

Для Qlik:

Сделать дамп PostgreSQL (script_versions).

Восстановить.qvf.

Извлечь Qlik Script.

Сравнить версии (diff).

Глава 14. Технические рекомендации по сохранению данных

Для компаний:

Включить историю версий в Power BI (OneDrive/SharePoint).

Настроить аудит Tableau Server (historical_events).

Включить версионирование скриптов в Qlik Sense.

Регулярно создавать бэкапы (.pbix,.tsbak,.qvf).

Сохранять логи Azure Log Analytics (экспорт в Storage Account).

Глава 15. Сравнение версий (diff) как основной технический метод

Инструменты:

WinMerge, Beyond Compare (графические).

Git diff (командная строка).

jq —argjson (JSON diff).

xmlstarlet (XML diff).

Пример JSON diff (Power BI):

diff

— «Expression»: «SUM(Production[ActualCost])»

+ «Expression»: «SUM(Production[ActualCost]) * 0.7»

Пример XML diff (Tableau):

diff

— <sql>SELECT profit FROM sales</sql>

+ <sql>SELECT profit FROM sales WHERE profit>0</sql>

Пример Qlik Script diff:

diff

— LOAD customer, amount FROM sales.csv;

+ LOAD customer, amount * 2 as amount FROM sales.csv;

Глава 16. Судебный запрос к вендору BI

Процедура:

Ходатайство об истребовании доказательств (ст. 66 АПК РФ).

Суд выносит определение. Направляется в Microsoft (Power BI), Salesforce (Tableau) или Qlik.

Вендор предоставляет данные (бэкапы, логи) в зашифрованном виде (30-90 дней).

Сложности:

Отказ вендора → суд делает выводы против оппонента (ст. 65 АПК РФ).

Глава 17. Новые технические вызовы

Тренд 1. Power BI Copilot (AI)
AI может генерировать фальшивые формулы. Экспертиза будет выявлять статистические аномалии.

Тренд 2. Real-time BI (Kafka, Event Hubs)
Экспертиза требует анализа потоковых логов (Kafka offsets, Event Hubs Capture).

Тренд 3. GraphQL API
Усложняет анализ API-логов (запросы менее структурированы). Метод: парсинг AST.

Глава 18. Заключение: техническая истина — в сравнении версий

Три кейса показали возможности компьютерно-технической экспертизы систем business intelligence:

✅ Power BI — подмена DAX-формулы (45 млн руб.).
✅ Tableau — удаление дашбордов и подмена SQL (23 млн руб.).
✅ Qlik Sense — дублирование продаж через ETL-скрипт (12 млн руб.).

🟩 Мы — Союз «Федерация судебных экспертов». Сайт: https: //kompexp.ru/

Техническая истина — в сравнении версий. Мы умеем его делать. 🔧⚖️

Похожие статьи

Новые статьи

▶️ Независимая экспертиза побои

Техническое введение: BI как сложная программная система Современные системы Business Intelligence (Power BI, Tableau, Q…

🆘 Оценка доли в квартире для выкупа

Техническое введение: BI как сложная программная система Современные системы Business Intelligence (Power BI, Tableau, Q…

⏺️Экспертиза потребительских товаров

Техническое введение: BI как сложная программная система Современные системы Business Intelligence (Power BI, Tableau, Q…

🆘 Лаборатория химического анализа

Техническое введение: BI как сложная программная система Современные системы Business Intelligence (Power BI, Tableau, Q…

🆘 Судебно-медицинская экспертиза трупов новорожденных

Техническое введение: BI как сложная программная система Современные системы Business Intelligence (Power BI, Tableau, Q…

Задавайте любые вопросы

19+18=