Страницы: 1
RSS
Power BI, Power pivot контекст запроса контекст фильтра DAX
 
Скажите пожалуйста, есть русскоязычные источники где можно посмотреть какие формулы в каком контексте работают. И еще было бы неплохо разобраться с этими контекстами, а то я до конца не понимаю
 
Из того что видел в рунете, здесь самое полное и доходчивое описание функций DAX на русском. А вот про контекст вычислений ничего путного не наблюдал. Да и понятие это приходит только с практикой. ИМХО. Но можно ознакомиться что про него пишут буржуйские профи.
Можете еще здесь по спрашивать.
И вот еще совершенно забесплатно статья из мегакниги "The Definitive Guide to DAX: Business intelligence with Microsoft Excel, SQL Server Analysis Services, and Power BI"
Изменено: PooHkrd - 07.09.2018 16:03:24
Вот горшок пустой, он предмет простой...
 
Цитата
Korochaboy написал:
какие формулы в каком контексте работают.
:) любые формулы работают именно в том контексте, в который вы их поместите. Важно и то, что требует та или иная функция на вход в качестве аргумента(ов) - скалярное значение, столбец или таблицу. В основном все срубаются на этом.

Вообще с определением контекстов даже у мелкософта проблемы: вот тут их три, а вот тут их два.  :D Но тем не менее, ссылки почитайте.

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

Внешний, или контекст запроса: включает в себя все фильтры, заданные явно или неявно используемыми столбцами (полями) и фильтрами/срезами сводной (полями визуального элемента Power BI), в общем, все фильтры, которые приходят в формулу "снаружи" (должны примениться к формуле и существуют/установлены ДО её вычисления).

Контекст фильтра - полный набор всех фильтров, применяемых к набору данных, в том числе модифицированных (измененных, добавленных или удаленных) внутри самой формулы.

Контекст строки: работает в вычисляемых столбцах и функциях-итераторах (типа SUMX или FILTER) - о нем чуть ниже.

В вычисляемых столбцах есть контекст строки. Контекст строки - это значения каждого столбца текущей строки (если чуть упрощать). В этом контексте простое обращение к столбцу понимается как обращение к значению столбца в текущей строке (мы хотим получить конкретное скалярное значение). Однако если мы используем в вычисляемом столбце не просто формулу типа Таблица[Столбец1]+Таблица[Столбец2], а какую-то функцию, и эта функция на вход принимает не скалярное значение, а столбец, то и будет рассматриваться то, что запрошено: столбец таблицы целиком. Самый простой пример: функция SUM требует своим аргументом столбец, и при создании вычисляемого столбца с формулой =SUM(Таблица[Столбец]) она возьмет в рассмотрение весь столбец.

Если мы используем в формуле вычисляемого столбца функцию CALCULATE, то она преобразует контекст строки в контекст фильтра - значение КАЖДОГО столбца текущей строки становится самостоятельным фильтром для данных этой таблицы. То есть формула =CALCULATE(SUM(Таблица[Столбец])) посчитает сумму столбца только в текущей строке (или, если несколько строк дублируются полностью, посчитает сумму столбца по всем дублирующимся строкам).
Использование меры в расчете вычисляемого столбца равнозначно использованию CALCULATE.
Эта история называется перенос контекста.

Аналогично работает контекст строки и перенос контекста в виртуальных таблицах (например, внутри функции SUMX мы перебираем строки виртуальной таблицы и для каждой строки делаем какие-то вычисления - почти как вычисляемый столбец в обычной таблице).

Но вообще всё просто:
  1. Есть какой-то набор строк (набор данных).
  2. Формула читает (наружный по отношению к ней) набор внешних фильтров, которые создаются полями сводной таблицы или срезами (это внешний контекст). Если формула в вычисляемом столбце обычной таблицы, то набор внешних фильтров пустой - его нет, так как это же не сводная, а просто таблица.
  3. Далее она при необходимости модифицирует его (например, фильтрующими аргументами внутри CALCULATE). Либо меняет фильтр на каком-то столбце, либо убирает его совсем, либо наоборот, добавляет. Так формируется контекст фильтра. И если у нас есть при этом контекст строки, то он может быть (если мы сказали это делать, при помощи CALCULATE) преобразован в такой же контекст фильтра.
  4. В итоге весь получившийся набор фильтров - внешний, внутренний, перенесенный - миксуется и вычисляется, наконец, окончательное значение.

В DAX вообще всё просто: есть таблицы и есть примененные к ним фильтры, и больше, в общем, ничего там особенного нет. Другое дело, что удержать в голове все пересечения и модификации фильтров может быть тяжело без привычки.
F1 творит чудеса
 
Коллеги, спасибо вам огромное за приведённые выше "выжимки"! Как раз появилась "боевая" модель и очень важно разобраться в контекстах. Но при копании в англоязычных референсах либо глаза разбегаются, либо мозг взрывается (не всегда понятно, что имелось в виду). В общем, ваши разъяснения бесценны :)
Pravé bohatství se skrývá uvnitř
 
мне понравились эти определения
Цитата
Контекст фильтра   - это набор значений, разрешенных в каждом столбце в зависимости от ограничений фильтра, которые применяются к строке или определенных критериям фильтра в формуле.
Контекст строки   - фактически соответствует понятию текущей строки. Если создан вычисляемый столбец, то контекстом строки служат значение в каждой отдельной строке и значение в столбцах, связанных с текущей строкой.
Контекст запроса   - относится к подмножеству данных, которые неявным образом создаются для каждой ячейки сводной таблицы в зависимости от заголовков строки и столбца в сводной таблице.
т.е.
1й - фильтры для столбца, СТОЛБЦЫ в Сводной
2й - фильтры для строки, СТРОКИ в Сводной
3й - фильтры для ячейки (каждой), ЗНАЧЕНИЯ в Сводной ... имхо
Цитата
Максим Зеленский написал: В DAX вообще всё просто: есть таблицы и есть примененные к ним фильтры, и больше, в общем, ничего там особенного нет.
вобщем да, в отличие от тех же словарей - отбор по сходству членов группы, а не по различию ключей (как в словарях, например, и многих подходах в языках программирования)...и цель PP - из кучи экстрагировать нужное (путём последовательных дроблений общей кучи на выборочное деление -- даже множеством словарей и подсловарей и подподсловарей и т д можно обозвать...но синтаксис DAX будет на порядок проще... имхо (когда есть сложные иерархии)
Изменено: JeyCi - 06.10.2018 11:59:40
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Присвоит трудно, кажется это дело много очен много численный практики
Страницы: 1
Наверх