Страницы: 1 2 След.
RSS
DAX Удельный вес от значения суммы конкретных строк
 
Добрый день.
Все пытаюсь побороть азы DAX но никак не могу понять логику работы фильтров. И взаимодействия строк с итогами.
Нужно в мере получить значение удельного веса каждой строки от значения конкретной строки, или суммы группы строк.
Представим себе что делаем ремонт. Каждая комната у нас ремонтируется разными подходами. Сначала окна, потом двери, потом покрытия. Общая стоимость комнаты определена в отдельной строчке. Нужно посчитать удельный вес стоимости каждой каждого ТМЦ, от цены комнаты, а также группы расходов от цены комнаты.
Для меня важно понять как поделить значение каждой строчки, на значение суммы выборки из других строк, все что не пробовал приводило либо к расчете 1, либо к 0.
Никак не могу победить фильтрацию, не понимаю  :cry:  
 
Цитата
lostandleft написал:
пытаюсь побороть азы DAX но никак не могу понять логику работы фильтров
Совет: пробуйте разбить задачу на подзадачи и поэтапно их решайте. На вашем примере привел вариант поэтапного решения задачи, чтобы проще понять как работают функции.
А вообще Вы там перемудрили с мерами, все решается намного проще. Отмечу, что структура таблицы у Вас не совсем правильная, и если комнат будет несколько, доля будет считаться по отношению ко всем комнатам, а не к конкретной.
 
Vladimir Chebykin, Спасибо, вроде бы все просто, я какой-то огород наогородил.
В чем отличие логики Калькулейт, от логики SUMX ?
Ведь моя мера также расчитывает итог по нужным полям, но почему когда я свою меру вставляю в DIVIDE везде получается 1?
 
Vladimir Chebykin, И почему-то не получается добавить даты.
включил столбец дата, чтобы получить информацию по датам, а он от общих итогов считается.
Почему?
 
Цитата
lostandleft написал:
В чем отличие логики Калькулейт, от логики SUMX
это две абсолютно разные функции. Объяснять не буду.. долго...гуглите. Вообще Cаlculate - одна из ключевых функций в DAX, которая позволяет менять фильтры по своему усмотрению. И в этом ее главная особенность.
 
так попробуйте:
Код
=CALCULATE(SUM([Количество]);ALLEXCEPT('Таблица1';'Таблица1'[Дата]);'Таблица1'[Движение]="Выбытие")
 
Vladimir Chebykin, А что это значит по русски?
Рассчитать (Сумма по полю количество); фильтр1(Исключить все кроме значений таблица 1; содержащих дата); фильтр2[Столбец Движение] содержит значение Выбытие)

Можете свою формулу в похожем стиле прочитать, я не понимаю что в ней происходит, зачем мы исключаем дату?
 
ALLEXEPT()-сбросить все фильтры сводной таблицы, кроме указанной внутри функции. Внутри дата, значит функция сбрасывает все фильтры сводной, но с учетом фильтра дат. Фильтры сводной - это наименования полей сводной в строках и столбцах.
Изменено: Vladimir Chebykin - 10.03.2020 09:09:22
 
Vladimir Chebykin, Блин, хоть застрелиться не понимаю.
Почему
Цитата
Vladimir Chebykin написал:
CALCULATE(SUM([Количество]);ALLEXCEPT('Таблица1';'Таблица1'[Дата]);'Таблица1'[Движение]="Выбытие")
Этот вариант работает, но только если я не создаю отдельную таблицу даты. Почему с отдельной таблицей Дата, получается чушь.
Я создал таблицу дат, эту таблицу дат интегрировал в сводную таблицу, в мерах прописал - не работает!!!! Можете пояснить почему? В чем разница  для машины???
Код
Мера 5(ДатаОтдельн):=CALCULATE(SUM([Количество]);ALLEXCEPT('Таблица1';'Calendar'[Date]);'Таблица1'[Движение]="Выбытие")
Изменено: lostandleft - 10.03.2020 10:19:00
 
Пример с календарем приложите.
 
Vladimir Chebykin,Внес изменения в свое же сообщение выще
 
Не работает, потому что в основной таблице у Вас не даты, а текст. Измените тип данных в запросе PQ и будет Вам счастье.
 
Vladimir Chebykin, Не понимаю, но ведь связь же создалась в конструкторе!!! Ошибок ведь не было!!!
 
А почему она НЕ должна создаться? Вы спокойно можете прицепить календарь к любому полю и связь будет активной. Другое дело, что совпадений по ней не будет. Вам бы теорию хорошо по изучать для начала. Все Ваши вопросы и проблемы от незнания базовых вещей. Похоже, что Вы сразу бросились в практику, не изучив как следует теорию.
 
Цитата
Vladimir Chebykin написал:
Вы сразу бросились в практику, не изучив как следует теорию
Совершенно верно, теорию изучать времени нет, нужны результаты, да и нет ее теории в рунете. Вернее уж очень скудная она. И малоинфомративная. Если бы был на ютуде ролик с базовыми азами и понятиями я бы его уже с десяток раз посмотрел. А то то тут кусочек выспросишь, то на ютубе подсмотришь...тяжело дается. :(
С PowerQuery более менее разобрался благодаря форумчанам, базовые вещи хоть как-то освоил. По крайней мере более менее понимаю как оно работате...но вот с этими мерами, ну никак...ну очень тяжело.
Логика совершенно другая, базовые принципы - это фильтры. Совершенно отличается от привычного экселя.
Изменено: lostandleft - 10.03.2020 11:06:18
 
На русскоязычном пространстве например можете здесь статьи почитать. Неплохо и здесь рассказывается про функции. На самом деле сейчас уже много полезной и подробной информации по DAX. 3 года назад все было намного печальнее.
 
Vladimir Chebykin, Да, эти 2 ресурса знаю, но Вы ведь видели мои предыдущие задачи, они близко там не обсуждаются.
Спасибо за помощь в любом случае.
В оригинальной сводной таблице, все равно даты не цепляются, видимо есть еще какой-то секрет. Хотя типы полей железобетонно одинаковые.
пока обойдусь костылем, возьму месяца из оригинальной таблицы.
 
Цитата
lostandleft написал:
В оригинальной сводной таблице, все равно даты не цепляются,
Возможно, дело в формате дат: если стоит формат посекундной даты "20.02.2020 0:00:00" попробуйте преобразовать в формат просто даты - "20.02.2020" и в таблице данных, и в календаре.
 
Vladimir Chebykin, Нет, я понял что дело в иерархии дат. С Иерархией дат все работает не так как надо.
Если вытащить из иерархии дат конкретно Месяц, или Дату - то все работает (при соответсвующем корректировании формулы).
Но если в шапку бросить иерархию дат целиком, то получается каша.
Видимо нужно формулу писать на даты, и какой-то дополнительный SUM ставить или SUMX.
Код
Мера 5(ДатаОтдельн):=CALCULATE(SUM([Количество]);ALLEXCEPT('Таблица1';'Calendar'[Date]);'Таблица1'[Движение]="Выбытие")

// Или

Мера 5(ДатаОтдельн):=CALCULATE(SUM([Количество]);ALLEXCEPT('Таблица1';'Calendar'[Month]);'Таблица1'[Движение]="Выбытие")
Изменено: lostandleft - 10.03.2020 12:00:06
 
Подгрузил пример. Если будет время посмотрите пожалуйста.
 
Я честно говоря уже запутался, что Вы хотите. Вы хотите понимать долю материалов (движение "выбытие") по отношению к стоимости комнаты (Поступление)? Или тупо распределение доли материалов внутри группы?
Какой из двух способов?
 
Vladimir Chebykin, Смотрите, мне нужен удельный вес расходов к стоимости поступления. В Идеале Поступление всегда равно выбытию, потому, что мы выполняем работы и получаем готовый обьект. Однако внутри дат такое невсегда возможно. Например вы делаете ремонт в квартире, в один день Вам постелили кафель, в другой день побелили стены, в третий день поставили окна. После этого, вы были в отпуске и вернулись через дня 4, прошло еще время Вы приняли комнату целиком. В итоге операция растянется на длительное время. Однако внутри определенного периода, так или иначе стоимость работ будет совпадать со стоимостью принятой Вами работы.
Т.е. Внутри дней выбытие не обязательно будет равно поступлению, однако за месяц вцелом, поступление обязательно совпадет с выбытием.

Таблица 2, в примере выше, показывает корректное движение по месяцам. Таблица 3 также показывает корректное движение по месяцам.
Таблица 1 показывает корректное движение по датам.
Таблица 3 - собрана из Иерархии дат, в шапке висит иерархия, если развернуть месяц по датам, то значения не совпадают с таблицей 1, хотя должны.

В моем рабочем документе, если свернуть ГОД целиком, то цифра становится космической, среднего значения не получается, если же развенуть по датам, то получается ерунда.

В данном случае для меня не принципиально как будет считаться формула, от общего итога поступления, или выбытия, но для точности со своими данными я бы хотел чтобы именно значение бралось от того, что пришло из производства - т.е. стоимость принятого объекта.
Надеюсь что понятно пояснил.
Изменено: lostandleft - 10.03.2020 12:54:34
 
Нужна ли при этом связь материалов (выбытие) к конкретному объекту (поступление)? Или тупо объем расходов разделить на объем поступлений за указанный период?
Если первый вариант - вся переписка до этого бессмысленна, потому что в Вашей таблице нет связи между материалами и объектами, на которые они расходуются.
Если второй вариант - то как должна рассчитываться доля по тем дням, когда расходы есть, а поступлений нет?.\
В примере набросайте от руки образец таблицы, какой результат должен получиться на выходе. Значения в примере проставьте в ручную.
 
Нужна связь, связь нужна обязательно к группе. В принципе ведь все работает так как надо, неувязки с иерархией дат. Больше ни с чем.
Фильтры в Калькулейт работают корректно. За исключением иерархии дат.
Изменено: lostandleft - 10.03.2020 13:10:06
 
Если правильно понял: просто добавьте поле "Количество" в область значений сводной. Затем: ПКМ/дополнительные вычисления/% от родительской суммы/базовое поле=движение.
Всю предыдущую переписку в помойку.
 
Цитата
Vladimir Chebykin написал:
Фильтры в Калькулейт работают корректно. За исключением иерархии дат
Потому и не работает, что нет связи между расходами и поступлениями. А в предыдущих примерах работало, потому что примеры так составлены были. В рамках одного дня работает, в рамках одного месяца работает. Выделите две даты из Вашего последнего примера: 05 и 06 марта, как система должна сработать в таком случае?
 
Цитата
Vladimir Chebykin написал:
Всю предыдущую переписку в помойку.
Почему в помойку???? все ведь работает!!! Только иерархия дат некорректная, в моем последнем файле посмотрите!!!
нажмите развернуть Март например, сразу увидите проблемный момент.
Зачем в помойку все???? Меня все устраивает, я хоть что-то понял в этом!!!

а что такое ПКМ?
 
Vladimir Chebykin,
 
Пока не
Цитата
Vladimir Chebykin написал:
набросайте от руки образец таблицы, какой результат должен получиться на выходе. Значения в примере проставьте в ручную.
больше не помогаю.
Есть у меня большое подозрение, что Вы сами не понимаете как правильно должно считаться, когда выбытие и поступление приходится на разные дни.
Попробуйте посчитать от руки результат по этим дням, которые "НЕ РАБОТАЕТ" (желательно с обычной формулой эксель, чтобы видеть на какие значения ссылается)
ПКМ - правая клавиша мыши
 
Цитата
Vladimir Chebykin написал:
05 и 06 марта, как система должна сработать в таком случае?
Система должна всегда считать отношение расхода материалов к принятой работе За любой период, выбираем День - значит считает за день, если выбираем месяц в иерархии, должно считаться за месяц, выбираем год - за год, выбираем неделю - за неделю.
Т.е если раскрываю таблицу по дням, должно все выглядеть так, как в примере 1, выбираю таблицу по месяцам - должно выглядеть так как все выглядит в таблице 2.
Выберу по неделям, соответсвенно должно все пересчитаться на недели...за квартал, за год и так далее.

Все всегда должно считаться с учетом базового Периода, будь то день, будь то неделя, или год. В формуле за этот параметр с Вашей подачи отвечает фильтр
Код
ALLEXCEPT('Таблица1';'Calendar'[Date]);

Однако, не смотря на то, что это работает для конкретного периода, это лишает гибкости в применении иерархии дат. Так как Иерархия содержит, как Месяц, так и дату, так и год.
Т.е. Нужно либо ставить переключатели, или же что-то более изящное, так как кучу переключаталей на все виды дат (день, неделя, месяц, квартал, год) ставить ИМХО неправильно.
Код
ALLEXCEPT('Таблица1';'Calendar'[Year]);
ALLEXCEPT('Таблица1';'Calendar'[Month]);
ALLEXCEPT('Таблица1';'Calendar'[Date]);
Изменено: lostandleft - 10.03.2020 13:53:36
Страницы: 1 2 След.
Наверх