usto-excel

блог об Excel и не только

Html

Правила мер

Комментариев нет :

В предыдущей статье мы познакомились с понятием мер и даже создали несколько мер и проверили их меняя структуру сводных таблиц.
Однако, прежде чем продолжить наше знакомство с DAX давайте сделаем шаг назад и поразмышляем о том как работают сводные таблицы.
К примеру, как Вы думаете, что означает выделенная ячейка в данной сводной таблице?



  • Вариант А: в 2001 году общая сумма продаж продукта с кодом 344 составила 98600 долларов США;
  • Вариант Б: если в таблице отфильтровать столбец "Год" так чтобы отображались только строки равные 2001 а потом отфильтровать столбец "КодПродукта" так чтобы отображались только строки равные 344, после чего суммировать значения отображающихся строк по столбцу "СуммаПродаж", то их сумма будет равняться 98600 долларов США.
Если Вы выбрали вариант А, то скорее всего у Вас ещё недостаточно опыта работы со сводными таблицами и возможно Вам следует попрактиковаться с обычными сводными таблицами прежде чем продолжать изучение Power Pivot. Потому что правильный ответ - вариант Б.
Очень важно чтобы Вы понимали процесс вычисления мер так, как это указано в варианте Б, потому что именно так DAX их и вычисляет. Конечно, думать как человек (вариант А) всё ещё важно и даже нормально, когда Вы создаёте меры и получаете правильные результаты. Но, когда Ваша формула мер не работает так как Вы ожидаете, Вам нужно "мыслить как DAX", чтобы отладить её.

Пошаговое изучение примера

Давайте в окне Power Pivot пройдём все этапы описанные в Варианте Б, чтобы получить  более ясную картину того как было получено значение "98600".
В окне Power Pivot откроем вкладку таблицы продаж "t_sales".


Обратите особое внимание на три элемента окна Power Pivot:

  1. Кнопка "Отменить все фильтры" на ленте. На рисунке выше данная кнопка серая, т.е. неактивная, что говорит о том что к таблице не было применено никаких фильтров;
  2. Табло количества строк. Показывает, что таблица продаж, при отключённых фильтрах, состоит из 60398 строк и что курсор находится в строке 1. 

      3. Область вычисления. Данное поле находится внизу таблицы и в нём отображаются все созданные в данной таблице меры с их текущими значениями.



Итак, применим фильтр к столбцу "Год" и выберем "2001".



Сразу же после этого, проверим значения мер и количество строк.



А теперь применим фильтр к столбцу "КодПродукта" и снова проверим значения.


И к своему удовлетворению находим, что эти значения совпадают со значениями сводной таблицы. Более того, [Прибыль] равна $47 462 а [Процент Прибыли] равен 48,1%, точь в точь как в сводной таблице.


Точно также совпадает количество транзакций (количество строк).


И если развернуть окно фильтра в столбце "ДатаЗаказа" и посчитать количество дней в списке, то можно убедиться, что значение [ДниПродаж] тоже вычислено правильно.


Три Золотых Правила мер DAX

Правило А: Меры DAX рассчитываются на основе исходных данных, а не сводных таблиц



Хоть на первый взгляд и кажется, что значение Общего итога столбца "Прибыль" в сводной таблице является суммой остальных строк этого столбца, Вы должны мысленно представлять исходную таблицу данных, и понимать что в движке DAX меры рассчитываются именно на основе этой исходной таблицы.

Правило В: Каждая ячейка мер вычисляется независимо

Каждую ячейку меры можно представить как островок, так как ни одна ячейка меры не влияет на другую. Каждая мера вычисляется независимо и на основе исходной таблицы.

Правило С: Процесс вычисления мер DAX подразделяется на шесть логических шагов

Шаг 1: Определение координат сводной

Прежде чем ознакомиться с введённой Вами формулой, движок DAX определяет координаты ячейки мер в текущей сводной таблице (в поле "Значения", так как это единственное поле сводной таблицы куда можно поместить меры).
Чтобы лучше это проиллюстрировать изменим нашу сводную таблицу. Переместим "Год" в поле "Столбцы", создадим срез из столбца "НомерМесяца" а в поле "Значения" оставим лишь [ИтогоПродаж].


В полученной сводной таблице, выделим ячейку со значением $75 144.


У выделенной ячейки мер три "значения координат" сформированных на основе комбинации значений из полей "Строки", "Столбцы" а также значения среза:

t_sales[НомерМесяца]=8
t_sales[Год]=2001
t_sales[КодПродукта]=313

Обратите внимание как координаты описываются в формате Таблица[Столбец]. Сейчас это может казаться странным, но использование этого формата очень пригодится когда мы будем использовать несколько таблиц. Так что привыкайте к этому формату описания координат.
Очень часто набор координат меры называется её Фильтр-контекстом.

Шаг 2: Функция CALCULATE() изменяет Фильтр-контекст

Эта тема будет раскрыта в следующей статье, в которой мы познакомимся с данной функцией.


Шаг 3: Применение координат фильтра к исходной таблице

Координаты меры (фильтры составляющие фильтр-контекст меры) применяются к исходной таблице. В вышеприведенном примере все три значения координат/фильтры относятся к таблице "t_sales", значит указанные фильтры применяются именно к этой таблице. (Конечно, мы не видим этих фильтров, потому как весь этот процесс происходит внутри движка DAX). В нашем случае, таблица фильтруется на основе значений фильтр-контекста НомерМесяца, КодПродукта и Год.


Шаг 4: Фильтры подчиняются установленным связям

Данный шаг также будет более подробно описан в следующих статьях.

Шаг 5: Вычисление

Только после того как фильтр-контекст ячейки меры был применён к исходной таблице и ТОЛЬКО ПОСЛЕ ЭТОГО, движок DAX приступает к вычислениям на основе записанной в мере формулы.


Шаг 6: Возврат результата

Результат проведённых вычислений возвращается ячейке меры сводной таблице и весь процесс начинается заново уже для следующей ячейки.


Весь вышеописанный процесс можно представить в виде конвейера состоящего из двух движков - движка фильтров и движка вычислений.

Кроме Трёх Золотых Правил описывающих процесс работы движка DAX, будет не менее полезно изучить несколько дополнительных правил, способных облегчить наш процесс работы с мерами в будущем:

Никаких "Голых столбцов" в формулах мер 

В формуле мер можно ссылаться на столбец только если эта ссылка помещается внутри какой-либо функции. Прямая "голая" ссылка на столбец приведёт к ошибке.

Данное правило касается только мер но не вычисляемых столбцов.

Ссылаться на столбцы и меры по-разному

При написании формулы меры предпочтительно:

  • при ссылке на столбец, использовать формат ИмяТаблицы[ИмяСтолбца];
  • при ссылке на другую меру, использовать формат [ИмяМеры].
Соблюдение данного правила в дальнейшем облегчит чтение формул в будущем. Так если ссылка содержит название таблицы мы сразу поймём, что это ссылка на столбец и наоборот.

Мера должна применяться к нужной таблице

С помощью строки "Имя таблицы" в редакторе мер можно контролировать то к какой таблице относится выбранная мера.



Предпочтительнее всего, если мера применяется к той таблице, которая содержит столбцы данных на которые ссылается данная мера.

Заключение

Понимание процесса работы мер является критически важным для дальнейшей работы с ними. Опять же повторюсь, для тех кто работал со сводными таблицами понимание этого процесса не составит труда.