Страницы: 1
RSS
Перекрестное соединение двух таблиц (Power Pivot,Query,DAX), Реализуем декартово произведение множеств в Power Pivot и Query
 
День добрый, форумчане.

Столкнулся со следующей задачей:

Нужно объединить 2 таблицы (Дата и Валюта), чтобы получить декартово произведение (перекрестное соединение) этих двух множеств. В PQ это решается достаточно просто:

1. При объединении 2 запросов выбрать "Полное внешнее соединение",
2. В запросе с множеством валют создать столбец по типу {Дата_1_в_числовом_формате..Дата_2_в_числовом_формате} и раскрыть получившейся список.

Однако, в книге Роба Колли "Формулы DAX для Power Pivot" говорится о том Как НЕ надо использовать Power Query:
Скрытый текст
Из вышесказанного следует, что на большом массиве данных следует использовать DAX, а не возможности языка М. Так вот, как же реализовать задачу с помощью формул DAX в PP?

Мной была предпринята попытка использовать формулу CROSSJOIN, но выдаётся какая-то ошибка, которая всё портит. Также интересуют другие, более быстрые на больших массивах данных, способы решение поставленной задачи в Excel.

 
 
Доброе время суток
Цитата
Якубович написал:
CROSSJOIN
Можно использовать для создания таблиц в Power BI. В Power Pivot - только для виртуальных таблиц. В Power Query
Код
Table.Join(Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content], {}, Excel.CurrentWorkbook(){[Name="Таблица2"]}[Content], {})

P. S. Не все рекомендации - универсальны. Очень многое зависит от контекста. Хотя конечно, в общем и целом высказываемые рекомендации правильные - не поспоришь особо.
Изменено: Андрей VG - 08.04.2020 23:29:35
 
Цитата
Андрей VG написал:
Можно использовать для создания таблиц в Power BI
Спасибо за совет! К сожалению, PBI не поставить на работе, приходится обходиться только PP и PQ.
Цитата
Андрей VG написал:
Power Pivot - только для виртуальных таблиц
Что Вы имеете ввиду?
 
Цитата
Якубович написал:
Что Вы имеете ввиду?
Андрей имел ввиду, что в power bi Вы можете лицезреть созданную формулами таблицу в модели данных. В power pivot не так: формулами/функциями то же можно создавать таблицы, только они хранятся в оперативной памяти. Физически Вы их не увидите, но можете использовать для дальнейших вычислений.
 
Vladimir Chebykin, спасибо за уточнение.

Можно попросить на примере показать, как это работает? Вот этот самый пресловутый Crossjoin.
Код
=CROSSJOIN(Cur[Валюта];'Date'[Дата])

В приложенном файле формируется ошибка:
Цитата
Невозможно определить одно значение для столбца "Дата" в таблице "Date". Это может происходить, если для получения одного результата формула меры ссылается на столбец, содержащий множество значений, без указания агрегата, например MIN, MAX, COUNT или SUM.

Если я правильно Вас понял, то crossjoin отработал, только PP хочет, чтобы мы с его помощью что-то посчитали, верно? Тогда как обращаться к столбцам виртуальной таблицы, как и к обычным или есть какие-то особенности?
Изменено: Якубович - 09.04.2020 12:25:15
 
Якубович, не, неверно. аргументами функции CROSSJOIN должны быть таблицы, а не столбцы. Если вы хотите получить картезианское произведение из значений двух столбцов, отобразите их в виде таблиц, например, при помощи VALUES, ALL, DISTINCT и т.п. функций
Код
=CROSSJOIN(VALUES(Cur[Валюта]);VALUES('Date'[Дата]))

Но такую таблицу вы сможете использовать только в других функциях, где аргументом может быть табличное выражение. Например, как первый аргумент SUMX
F1 творит чудеса
 
На всякий случай. Создание таблиц из пересечений строк: DAX функции GENERATE, GENERATEALL и CROSSJOIN в Power BI и Power Pivot
Вот горшок пустой, он предмет простой...
 
PooHkrd, я вот от этого и шел и не мог понять, почему и не работает.
Цитата
Максим Зеленский написал:
должны быть таблицы, а не столбцы
Совсем забыл, что здесь столбец и таблица разные вещи, привык работать со списками и не перестроился на другую логику.

Вопрос решили.
Страницы: 1
Наверх