Введение
Чтобы добавить вычисляемую таблицу в модель, можно написать формулу анализа данных (DAX). Формула может дублировать или преобразовывать имеющиеся данные модели для создания таблицы.
Примечание
Вычисляемая таблица не может подключаться к внешним данным. Для выполнения этой задачи необходимо использовать Power Query.
Формула вычисляемой таблицы должна возвращать объект таблицы. Простейшая формула может дублировать имеющуюся таблицу модели.
Вычисляемые таблицы повлекут следующие затраты: Они увеличивают размер хранилища модели и могут продлить время обновления данных. Причина заключается в том, что вычисляемые таблицы пересчитываются при наличии зависимостей формул для обновления таблиц.
Дублирование таблицы
В следующем разделе описывается распространенная задача проектирования, которую можно решить путем создания вычисляемой таблицы. Сначала необходимо скачать и открыть файл Adventure Works DW 2020 M03.pbix, а затем переключиться на схему модели.
На схеме модели обратите внимание, что в таблице Sales есть три связи с таблицей Date.
На схеме модели показаны три связи, так как таблица продаж хранит данные о продажах по дате заказа, дате отгрузки и дате выполнения. В столбцах OrderDateKey, ShipDateKey и DueDateKey обратите внимание, что одна связь представлена сплошной линией — активной связью. Другие связи, представленные пунктирными линиями, — это неактивные связи.
Примечание
Между любыми двумя таблицами моделей может существовать только одна активная связь.
На диаграмме наведите указатель мыши на активную связь, чтобы выделить связанные столбцы. Это и есть способ взаимодействия с диаграммой модели для получения сведений о связанных столбцах. В данном случае активная связь фильтрует столбец OrderDateKey в таблице Sales. Поэтому фильтры, применяемые к таблице Date, будут распространяться на таблицу Sales для фильтрации по дате заказа. Фильтрация по дате отгрузки или дате выполнения не осуществляется.
Далее следует удалить две неактивные связи между таблицей Date и таблицей Sales. Чтобы удалить связь, щелкните ее правой кнопкой мыши и выберите Удалить в контекстном меню. Убедитесь, что неактивные связи также удалены.
Затем добавьте новую таблицу, чтобы разрешить пользователям отчетов фильтровать продажи по дате отгрузки. Перейдите в представление "Отчет" и на ленте Моделирование в группе Вычисления выберите Создать таблицу.
В строке формулы (расположенной под лентой) введите следующее вычисляемое определение таблицы и нажмите клавишу ВВОД.
Ship Date = 'Date'
Определение вычисляемой таблицы дублирует данные таблицы Date для создания таблицы с именем Ship Date. Таблица Ship Date содержит те же самые столбцы и строки, что и таблица Date. После обновления данных таблицы Date таблица Ship Date пересчитывается, поэтому эти таблицы всегда синхронизированы.
Переключитесь на схему модели и обратите внимание на добавление таблицы Ship Date.
Затем создайте связь между столбцом DateKey в таблице Ship Date и столбцом ShipDateKey в таблице Sales. Чтобы создать связь, перетащите столбец DateKey в таблице Ship Date в столбец ShipDateKey в таблице Sales.
Вычисляемая таблица дублирует только данные. Она не дублирует объекты и свойства модели, такие как видимость столбцов или иерархии. При необходимости их нужно настроить для новой таблицы.
Совет
Столбцы вычисляемой таблицы можно переименовать. В этом примере рекомендуется переименовать столбцы, чтобы названия лучше описывали их назначение. Например, столбец Fiscal Year в таблице Ship Date можно переименовать в Ship Fiscal Year. Соответственно, когда поля из таблицы Ship Date используются в визуальных элементах, их имена автоматически включаются в заголовки, такие как визуальные заголовки или метки осей.
Чтобы завершить проектирование таблицы Ship Date, можно выполнить приведенные ниже действия:
- Переименуйте следующие столбцы:
- Date в Ship Date.
- Fiscal Year в Ship Fiscal Year.
- Fiscal Quarter в Ship Fiscal Quarter.
- Month в Ship Month.
- Full Date в Ship Full Date.
- Отсортируйте столбец Ship Full Date по столбцу Ship Date.
- Отсортируйте столбец Ship Month по столбцу MonthKey.
- Скройте столбец MonthKey.
- Создайте иерархию с именем Fiscal со следующими уровнями:
- Ship Fiscal Year
- Ship Fiscal Quarter
- Ship Month
- Ship Full Date
- Пометьте таблицу Ship Date как таблицу дат, используя столбец Ship Date.
Вычисляемые таблицы удобны для работы в сценариях, когда существует несколько связей между двумя таблицами, как описано выше. Они также могут использоваться для добавления таблицы дат в модель. Таблицы дат необходимы для применения специальных фильтров времени, таких как функции логики операций со временем.
Создание таблицы дат
В следующем примере будет создана вторая вычисляемая таблица, на этот раз с помощью функции DAX CALENDARAUTO
.
Создайте вычисляемую таблицу Due Date с использованием следующего определения.
Due Date = CALENDARAUTO(6)
Функция DAX CALENDARAUTO
принимает один необязательный аргумент, который является номером последнего месяца года, и возвращает таблицу с одним столбцом. Если вы не передаете номер месяца, предполагается, что он будет равен 12 (для декабря). Например, в Adventure Works финансовый год заканчивается 30 июня каждого года, поэтому передается значение 6 (для июня).
Функция сканирует все столбцы даты и времени в модели, чтобы определить самые ранние и последние сохраненные значения даты. Затем она создает полный набор дат, охватывающих все даты в модели, обеспечивая загрузку дат по всем годам. Например, если самая ранняя дата, сохраненная в модели, — 15 октября 2021 г., то первая дата, возвращаемая функцией CALENDARAUTO
, будет иметь значение 1 июля 2021 г. Если последняя дата, сохраненная в модели, — 15 июня 2022 г., то последней датой, возвращенной функцией CALENDARAUTO
, будет 30 июня 2022 г.
Фактически функция CALENDARAUTO
обеспечивает соблюдение следующих требований для маркировки таблицы дат:
- Таблица должна включать столбец типа данных Date.
- Столбец должен содержать все годы.
- В столбце не должно быть отсутствующих дат.
Совет
Можно также создать таблицу дат с помощью функции DAX CALENDAR
и передать два значения даты, представляющие диапазон дат. Функция создает одну строку для каждой даты в диапазоне. Вы можете передать статические значения даты или выражения, которые извлекают самые ранние или последние даты из конкретных столбцов в модели.
Затем перейдите в представление данных и в области Поля выберите таблицу Due Date. Теперь проверьте столбец дат. Вы можете упорядочить их, чтобы увидеть самую раннюю дату в первой строке, выбрав стрелку в заголовке столбца Date, а затем отсортировав их в возрастающем порядке.
Примечание
Упорядочивание или фильтрация столбцов не влияет на порядок хранения значений. Эти функции помогают исследовать и анализировать данные.
Теперь, когда выбран столбец Date, просмотрите сообщение в строке состояния в левом нижнем углу. В нем указано, сколько строк хранится в таблице и сколько различных значений найдено в выбранном столбце.
Если строки таблицы и различные значения совпадают, значит столбец содержит уникальные значения. Это важно по двум причинам: Требования к пометке таблицы дат удовлетворены, что позволяет использовать этот столбец в качестве односторонней связи модели.
Вычисляемая таблица Due Date будет повторно вычисляться каждый раз, когда обновляется таблица, содержащая столбец дат. Другими словами, когда строка загружается в таблицу Sales с датой заказа 1 июля 2022 г., таблица Due Date автоматически расширяется и включает в себя даты до конца следующего года: 30 июня 2023 г.
В таблице Due Date необходимы дополнительные столбцы для поддержки известных требований к фильтрации и группированию, в частности по годам, кварталам и месяцам.