Проблема с функцией DATEADD в DAX

Недавно я начал изучать DAX. Я не могу правильно понять функцию DATEADD. Приведенное ниже выражение дает ошибку.

DATEADD(FIRSTNONBLANK(DATATABLE("TodaysDate",DATETIME,{{"9/24/2016"}}),TRUE()),4,MONTH)

Табличное выражение, содержащее более одного столбца, было указано при вызове функции 'DATEADD'. Это не поддерживается.

Но это работает с EDATE

EDATE(FIRSTNONBLANK(DATATABLE("TodaysDate",DATETIME,{{"9/24/2016"}}),TRUE()),4)

и FIRSTDATE не работает как FIRSTNONBLANK. Есть ли проблема с использованием DATATABLE?

FIRSTDATE(DATATABLE("Today1",DATETIME,{{"9/24/2016"}}))

При вызове функции 'FIRSTDATE' было указано табличное выражение, содержащее более одного столбца. Это не поддерживается.


person Gokul    schedule 24.09.2016    source источник


Ответы (1)


Функция DATEADD принимает столбец, содержащий даты, в качестве первого параметра, вы передаете таблицу, что и вызывает ошибку. Даже если вы передаете таблицу с одним столбцом, она отличается от столбца.

Обратите внимание, что функции FIRSTNONBLANK и FIRSTDATE возвращают таблицу, содержащую один столбец и одну строку с вычисленным первым значением или датой соответственно, поэтому вы передаете таблицу.

Даже если вы передавали один столбец с одной строкой в ​​функцию DATEADD, она не выдаст ошибок, но ничего не вернет, поскольку DATEADD возвращает вычисленную дату, если она присутствует в столбце, поэтому, если у вас есть одно значение, больше нет дат для возврата . Если вам непонятно, рассмотрите этот пример, чтобы понять, как работает DATEADD:

У вас есть эта таблица под названием MyDates

введите описание изображения здесь

Если вы используете DATEADD для создания вычисляемого столбца с именем 4MonthsAfter:

4MonthsAfter = DATEADD(MyDates[Date],4,MONTH)

Он возвращает это:

введите описание изображения здесь

Как вы можете видеть, столбец 4MonthsAfter для значения даты 24/08/2016 пуст, так как столбец не содержит значения 24/12/2016, то же самое происходит и для 24/01/2017, потому что нет значения 24/05/2017. Но через 4 месяца после вычисления 24/09/2016, поскольку в столбце присутствует 24/01/2017.

Способ работы DATEADD сильно отличается от способа EDATE. EDATE принимает дату (не столбец дат в таблице) в формате даты и времени или в текстовом формате и вычисляет заданное количество месяцев до или после даты.

По сути, DATEADD ожидает столбец дат в качестве первого параметра, как и большинство функций Time Intelligence., которые предназначены для работы с датой/календарем. таблицы (размеры даты).

Если у вас есть опыт программирования, вы можете запутаться в том, как DATEADD работает в DAX. Обычно DATEADD требуется только дата, количество интервалов и определенный интервал (МЕСЯЦ, ДЕНЬ, ГОД, КВАРТАЛ) для вычисления даты, в DAX для этого требуется явный столбец дат в качестве первого параметра.

Позвольте мне знать, если это помогает.

ССЫЛКИ:

ДАТАДОБАВИТЬ
ПЕРВЫЙ НЕПУСТОЙ
ПЕРВАЯДАТА
ДАТА< /а>

person alejandro zuleta    schedule 24.09.2016
comment
Большое спасибо, теперь так много ясности в DATEADD, у меня есть знания о хранилищах данных и я могу относиться к DateDimension. Я думаю, что это причина, по которой DATEADD помещается в функции анализа времени, а не в функции даты и времени :) - person Gokul; 25.09.2016
comment
Это причина того, что третье выражение не работает, потому что мы передаем таблицу вместо столбца? Но если это так, FIRSTNOBLANK также не должен работать, не так ли? - person Gokul; 25.09.2016
comment
@Gokul, FIRSTNONBLANK первый параметр может быть ссылкой на столбец, таблицу (то, что вы передаете) или логическое выражение, определяющее таблицу с одним столбцом. Таким образом, FIRSTONBLANK должен работать, однако он возвращает таблицу, которая приводит к ошибке, когда функция DATEADD оценивается, как объяснялось ранее. - person alejandro zuleta; 25.09.2016