Страницы: 1
RSS
Выбор наименьшего значения по связи один к многим DAX
 
Добрый день.
В Модели есть 2 таблицы - с оплатами по ТТ и с датой открытия ТТ.
Дата открытия заполняется часто с опозданием, поэтому необходимо добавить столбец с фактической датой открытия, которая считается по логике - если Дата первой оплаты в ТТ меньше, чем Дата открытия из таблицы, то считаем Датой открытия Дату первой оплаты.
Я смогла реализовать таким образом - создана вспомогательная таблица:
Код
ТТ открытие факт = SUMMARIZECOLUMNS ( 
                                    'Оплаты'[Код ТТ];
                                    FILTER (
                                        'Оплаты';
                                        NOT('Оплаты'[Код ТТ]=0)); 
                                    "Дата первого платежа"; 
                                    MIN ( 'Оплаты'[Дата чека] )
                                    )


Далее связываю ее с таблицей с датой открытия ТТ и в таблице Открытие ТТ добавляю вычисляемый столбец
Код
Дата открытия факт = VAR dateFirstPay = RELATED('ТТ открытие факт'[Дата первого платежа])
                     VAR dateOpen =  'Открытие ТТ'[Дата открытия ТТ]
                     RETURN
                            IF(
                                ISBLANK(dateFirstPay);
                                dateOpen;
                                IF(
                                    dateOpen<dateFirstPay;
                                    dateOpen;
                                    dateFirstPay)
                            )

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

Спасибо!
 
Татьяна, добрый день. Если виртуальную таблицу создаете только для вычисления мин.даты в чеке, то удаляйте ее - все решается намного проще. Мера для вычисляемого столбца в таблице "Открытие ТТ":
Код
Date_TRUE = 
var min_date_of_check = CALCULATE(MIN('Оплаты'[Дата чека]),'Оплаты'[Код ТТ]=EARLIER('Открытие ТТ'[Код ТТ]))
return
IF(min_date_of_check<'Открытие ТТ'[Дата открытия ТТ],min_date_of_check,'Открытие ТТ'[Дата открытия ТТ])

П.С. работу меры на ошибки не проверял. Они могут возникнуть, если ТТ в таблице "Открытие ТТ" есть, а в фактических оплатах ее нет.
Изменено: Vladimir Chebykin - 08.07.2021 12:06:30
 
Vladimir Chebykin, Спасибо Вам огромное, все получилось.
Нужно срочно осваивать EARLIER - в моей модели это просто маст хэв))

Если я правильно понимаю, то, "если ТТ в таблице "Открытие ТТ" есть, а в фактических оплатах ее нет", CALCULATE вернет BLANK, поэтому, наверно, достаточно будет прописать еще один IF на этот счет, как я уже делала ранее.
Еще раз спасибо! :)  
 
Цитата
Татьяна написал:
Нужно срочно осваивать EARLIER - в моей модели это просто маст хэв))
Не нужно:) Вот Вам цитата из книги:

"Лучшим способом управления множественными контекстами в рамках одной таблицы является создание вспомогательных переменных. Помните, что переменные были введены в языке только в 2015 году. Так что вы вполне можете столкнуться с примерами на DAX, которые были написаны до введения переменных, но прекрасно справлялись со множественными контекстами строки с использованием функции EARLIER... Единственная польза от изучения функции EARLIER сегодня  состоит в возможности читать чужой код на DAX. Использовать эту функцию  в своих выражениях нет никакого смысла, поскольку переменные прекрасно  справляются с  сохранением значений в том или ином доступном контексте  строки. Использовать переменные для этой цели считается более приемлемым  вариантом: это делает код более легким для восприятия."
 
surkenny, даааааа, мне еще учиться и учиться))))
Спасибо за ссылку на книгу! ;) 👍🏻
Страницы: 1
Наверх