Иногда я формирую таблицу с календарем используя дату окончания TODAY()
Код
CALENDAR( DATE(2020,1,1), TODAY() )
Пытаясь добавить конец квартала функцией ENDOFQUARTER для такого календаря - дата конца квартала возращается со значением "крайней" даты в календаре
С одной стороны логично - "защита от дураков", нет даты нечего возращать. Так например для указанной темы - дата уходила в фильтр, и при подаче в DATESINPERIOD искусствео созданное значение конца квартала все равно возращает пустую таблицу
С другой стороны значение которое вернет функция EOQ может выдавать не те ожидаемые нами даты
Или может иногда понадобиться посчитать сколько дней осталось до конца квартала и тогда нужно будет шаманить с другим вариантом получения даты конца квартала.
Пока у меня решение одно - создавать календарь до конца года
К тому же, такие функции обычно являются syntax sugar для других, более тяжеловесных формул, как, например, приведено в справке по ENDOFQUARTER
Цитата
ENDOFQUARTER filters <Dates> into a 1-row, 1-column table that shows only the latest date, in the entire <Dates> column devoid of all filters, that is in the same year and quarter as the latest visible date in <Dates>.
Поэтому если столбец дат заканчивается сегодня, вы не можете получить дату, которой там нет. Во-вторых, добавляя столбец таким образом, вы всегда получите последнюю имеющуюся дату, для любого квартала, года и т.п. - вы не включаете перенос контекста текущей даты, а аргумент ENDOFQUARTER - это столбец, а не единичное значение даты.
DATESINPERIOD возвращает диапазон дат, это верно, но The result table includes only dates that exist in the dates column. Думаю, раз вы ей скармливаете отсутствующую в календаре дату, она и не хочет ничего считать.
Цитата
DrillPipe написал: может выдавать не те ожидаемые нами даты
Согласитесь, наши ожидания - не наша проблема, хотя я вижу здесь микробагу.
В приведенном примере я и не понимаю, почему вы хотите увидеть 13 августа - Квартал = 1 июля. Потому что это начало квартала? Но вы не просили начало квартала, вы просили вычесть квартал. Поэтому там скорее ожидаешь увидеть 14 мая. Например, если задать ей
то в календаре, закрытом 13 августа, первая дата возвращается 13 мая.
Цитата
DrillPipe написал: нужно будет шаманить с другим вариантом получения даты конца квартала.
в той теме я привел еще несколько вариантов получения даты конца квартала
Цитата
DrillPipe написал: нужно будет шаманить с другим вариантом получения даты конца квартала.
Самое правильное решение. Многие функции Time Intelligence в DAX работают правильно только при наличии полного (без пропусков) календаря, начинающегося в первый день года и заканчивающегося в последний день года. Иногда это описано в документации напрямую, иногда нет, но лучше всего держать это за правило.
Для работы с функциями логики операций со временем выражений анализа данных (DAX) необходимо соблюдать предварительное требование к модели: в модели должна иметься хотя бы одна таблица дат. Таблица дат — это таблица, которая соответствует следующим требованиям:
Она должна иметь столбец типа данных дата (или дата и время), называемый столбцом даты.
Столбец даты должен содержать уникальные значения.
Столбец даты не должен содержать ПУСТЫЕ ЗНАЧЕНИЯ.
В столбце даты не должно быть отсутствующих дат.
Столбец даты должен охватывать полные годы. Год не обязательно должен быть календарным (январь–декабрь).
Некоторые функции Time intelligence могут работать и без полного календаря, но можно внезапно нарваться.
EOMONTH это не совсем функция Time Intelligence. В официальной классификации она относится к функциям Даты и времени, а не к функциям логики операций со временем (time Intelligence). Функции даты и времени очень похожи на функции работы с датами Excel (не удивлюсь, если они были портированы оттуда). По крайней мере, их вводили в DAX вместе с другими "эксельными" функциями для "привычности"