Страницы: 1
RSS
Связь между несколькими Таблицами через модель данных, построение сводной таблицы из нескольких исходных с учётом связи между ними
 
Коллеги, добрый день.
Имеется несколько таблиц (в приложенном примере - три) из которых строится сводная. На текущий момент для построения используется вспомогательный запрос на PQ, но так как реальных данных много он редкостно "тупит". Возник вопрос - возможно ли напрямую прописать связь между таблицами через модель данных? Свою попытку прилагаю. Если глупость спросил - прошу сильно не пинать.  :)
Соблюдение правил форума не освобождает от модераторского произвола
 
Доброе время суток.
Вариант
Код
Сумма по Ж := SUMX(CALCULATETABLE('Ингредиенты'; 'Рецепты'); 'Ингредиенты'[Ж])
 
Андрей VG, спасибо огромное! Вижу что работает, но даже прочитав справку по функции не догоняю - как? Как в данном случае работает фильтр ингредиентов по рецептам, аналогично запросу?
Соблюдение правил форума не освобождает от модераторского произвола
 
Цитата
buchlotnik написал:
Вижу что работает,
Не совсем верно по итогам работает (там же сумма Ж должна быть). Вариант от Power Pivot 2106
Код
Сумма по Ж2 := Var joined = CALCULATETABLE(NATURALLEFTOUTERJOIN('Ингредиенты'; 'Рецепты'); 'Рецепты')
Return SUMX(joined; 'Ингредиенты'[Ж])

Цитата
CALCULATETABLE('Ингредиенты'; 'Рецепты')
По этому поводу Matt Allington пишет - чёрная магия :)  Фактически идёт фильтрация в верх. Но работает именно в таком виде с полной таблицей (FILTER возможен).
Так уже работать не будет CALCULATETABLE('Ингредиенты'; VALUES('Рецепты'[ИндексИ]))
Максим Зеленский как-то упомянул, что может объяснить... но видимо я где-то мимо этих объяснений проскочил.
P. S. Если 2013, 2010, то тогда кроме как CROSSJOIN с последующей фильтрацией по 'Рецепты'[ИндексИ] = 'Ингредиенты'[Индекс] варианта предложить не могу.
Изменено: Андрей VG - 20.06.2019 12:56:08
 
Андрей VG, второй вариант понятнее. Первый я тоже не догнал.
Спасибо большое. Я в таких ситуациях по другому изгалялся - через SUMX(ADDCOLUMN;...)
Вот горшок пустой, он предмет простой...
 
Цитата
PooHkrd написал:
через SUMX(ADDCOLUMN;...)
Почему бы и нет? Может так более быстрый и эффективный вариант будет?
Код
=Var joined = ADDCOLUMNS('Рецепты'; "Связанный ингредиент Ж"; RELATED('Ингредиенты'[Ж]))
Return SUMX(joined; [Связанный ингредиент Ж])

P. S. Уже года полтора DAX не использую, забывать начинаю :(
Изменено: Андрей VG - 20.06.2019 13:16:54
 
Вот так:
Код
Сумма по Ж3:=Var joined = ADDCOLUMNS('Рецепты';"ЖЖЖ";RELATED('Ингредиенты'[Ж]) )
Return SUMX(joined; [ЖЖЖ])

Апередил! Коварный!  :D
Цитата
Андрей VG написал:
Может так более быстрый и эффективный вариант будет?
Ну, если вспомнить Максима, то это, как его... о, best practice Где-то у итальянцев я такую фишку почерпнул. Чуть сложнее так с несколькими таблицами фактов через один справочник работать, но тоже ничего невозможного.
Изменено: PooHkrd - 20.06.2019 13:24:28
Вот горшок пустой, он предмет простой...
 
Цитата
PooHkrd написал:
Может так более быстрый и эффективный вариант будет?
во всяком случае для меня наиболее понятный  :D . Андрей VG, PooHkrd, ещё раз - спасибо огромное!
Изменено: buchlotnik - 20.06.2019 13:40:40
Соблюдение правил форума не освобождает от модераторского произвола
Страницы: 1
Наверх