Запрос к массивной (500М+ строк) таблице Delta в Fabric lakehouse с оптимальной производительностью и доступом к данным почти в реальном времени.
→Используйте семантическую модель в режиме Direct Lake.
Почему: Direct Lake считывает Parquet-файлы напрямую из OneLake, минуя импорт данных или трансляцию запросов. Он обеспечивает производительность, аналогичную режиму Import, без дублирования данных или задержки обновления. DirectQuery работает медленнее; режим Import вносит задержку.
Применение общих расчетов временной аналитики (YTD, QTD, MTD) к десяткам базовых мер (Sales, Profit, Quantity) без создания сотен мер DAX.
→Реализуйте группу вычислений с элементами вычислений для YTD, QTD и MTD.
Почему: Группы вычислений устраняют разрастание мер. Они определяют набор общих вычислений, которые могут динамически применяться к любой выбранной мере, значительно упрощая поддержку модели.
Несколько семантических моделей в рабочей области должны совместно использовать общие таблицы измерений (например, Date, Customer) для обеспечения согласованности и сокращения дублирования данных.
→Создайте "основную" семантическую модель, содержащую общие измерения. Создайте другие "составные" модели, которые подключаются к основной модели через DirectQuery и к таблицам фактов через Direct Lake/Import.
Почему: Эта архитектура "звезда" способствует созданию единого источника истины для измерений. Составные модели позволяют комбинировать данные из разных источников и режимов хранения в унифицированную модель.
Таблица фактов имеет несколько столбцов дат (например, OrderDate, ShipDate), которые должны быть связаны с одной таблицей измерения Date.
→Создайте одно активное и несколько неактивных отношений между таблицами фактов и дат. Используйте функцию DAX `USERELATIONSHIP()` в мерах для активации соответствующего неактивного отношения.
Почему: Power BI позволяет только одно активное отношение между двумя таблицами. Этот шаблон позволяет анализировать данные по разным ролям дат без дублирования таблицы измерений.
Семантическая модель с большой таблицей фактов (миллиарды строк) слишком долго обновляется. Только данные за последние 30 дней часто меняются.
→Настройте инкрементное обновление для таблицы фактов. Установите параметры `RangeStart` и `RangeEnd`. Определите политику для архивации старых данных (например, хранение данных за последние 5 лет) и обновления недавних данных (например, обновление данных за последние 30 дней).
Почему: Это значительно сокращает время обновления и потребление ресурсов, поскольку обрабатываются только разделы, содержащие новые или измененные данные, вместо перезагрузки всей таблицы.
Сложная мера DAX работает медленно, потому что она многократно вычисляет одно и то же промежуточное значение в своей формуле.
→Используйте переменные (`VAR`) для однократного сохранения результата промежуточного вычисления, а затем ссылайтесь на эту переменную несколько раз в операторе `RETURN`.
Почему: Переменные предотвращают повторную оценку одного и того же логического блока движком несколько раз в рамках одного выполнения меры, что значительно улучшает производительность, особенно в итеративных контекстах.
Создание меры для расчета процентного вклада значения (например, продаж продукта) в более крупную общую сумму (например, все продажи продукта) с учетом других фильтров (например, даты).
→Используйте `DIVIDE([Sales], CALCULATE([Sales], ALLEXCEPT(Product, Product[Category])))` для процента от категории или `CALCULATE([Sales], ALL(Product))` для процента от общей суммы.
Почему: `CALCULATE` в сочетании с `ALL`, `ALLEXCEPT` или `REMOVEFILTERS` позволяет изменять контекст фильтра для получения правильного знаменателя для расчета процента.
Отчету нужен срез, который позволяет пользователям выбирать, какую метрику (например, "Выручка", "Стоимость", "Прибыль") должен отображать визуальный элемент.
→Создайте несвязанную таблицу с названиями метрик. Создайте единую меру DAX, используя `SWITCH(SELECTEDVALUE(MetricTable[Metric]), "Revenue", [Total Revenue], "Cost", [Total Cost], ...)` .
Почему: Этот шаблон, часто использующий Field Parameter, предоставляет динамичный и удобный способ переключения вычислений без необходимости использования закладок или нескольких визуальных элементов, делая отчеты более интерактивными и лаконичными.
Команде корпоративной BI необходимо использовать профессиональные инструменты (например, Visual Studio, Tabular Editor, SQL Profiler) для управления, развертывания и устранения неполадок семантической модели Fabric.
→Включите конечную точку XMLA Read/Write для рабочей области.
Почему: Конечная точка XMLA представляет семантическую модель как стандартный экземпляр Analysis Services, обеспечивая подключение из широкой экосистемы передовых инструментов BI и ALM для программного доступа и сложных задач моделирования.
Модель Direct Lake работает медленно. Исследование показывает, что она переключается в режим DirectQuery.
→Используйте DAX Studio или Performance Analyzer для выявления запроса, вызывающего откат. Общие причины включают неподдерживаемые функции DAX, сложный RLS или неоптимизированный/устаревший lakehouse.
Почему: Direct Lake имеет ограничения. Когда запрос использует неподдерживаемую функцию, он незаметно переключается на более медленный движок DirectQuery. Выявление и устранение основной причины (например, оптимизация DAX, выполнение OPTIMIZE для таблицы Delta) является ключом к восстановлению производительности.
Модель имеет отношение "многие ко многим" (например, Sales и Promotions через промежуточную таблицу). Меры возвращают неверные итоговые значения при фильтрации по стороне "многие".
→Убедитесь, что направление кросс-фильтрации в отношениях (Dimension -> Bridge -> Fact) настроено правильно (обычно однонаправленное). При необходимости используйте функции DAX, такие как `TREATAS` или `INTERSECT`, для более сложных вычислений M2M.
Почему: Неправильное направление кросс-фильтрации является частой причиной неверных результатов в моделях M2M. Хотя двунаправленная фильтрация может показаться работающей, она часто приводит к неоднозначности и двойному подсчету. Хорошо определенная модель с явными шаблонами DAX более надежна.
Композитная модель, использующая DirectQuery к массивной таблице фактов, работает медленно. Большинство пользовательских запросов находятся на агрегированном уровне (например, ежемесячные продажи по категориям).
→Создайте агрегированную таблицу, определенную пользователем, в режиме Import. Агрегированная таблица должна содержать предварительно суммированные данные на уровне детализации общих запросов (Month, Category).
Почему: Движок запросов будет автоматически перенаправлять запросы на меньшую, находящуюся в памяти агрегированную таблицу, когда это возможно, обеспечивая значительное повышение производительности. Он будет обращаться к источнику DirectQuery только для запросов, требующих более низкого уровня детализации.
Вычисление сложных нарастающих итогов или скользящих средних в DAX, которые плохо работают с традиционными подходами на основе фильтров.
→Используйте оконные функции DAX, такие как `WINDOW` или `OFFSET`.
Почему: Эти функции специально оптимизированы для позиционных вычислений над отсортированным набором строк. Они часто более производительны и синтаксически проще, чем старые шаблоны, которые полагаются на интенсивную фильтрацию и переходы контекста.
Расчет итоговых значений с начала года (YTD) для компании с финансовым годом, начинающимся 1 июля.
→Используйте функции `TOTALYTD` или `DATESYTD` с необязательным параметром `YearEndDate`. Пример: `TOTALYTD([Sales], 'Date'[Date], "6/30")` .
Почему: Указание параметра даты окончания года является правильным и самым простым способом сделать функции временной аналитики DAX осведомленными о пользовательском финансовом календаре.