Таблицы с отслеживанием периодов актуальности данных (Validate Time State) в DAX 2012
В DAX 2012 появилась возможность отслеживать актуальность данных. Данная опция настраивается свойством ValidateTimeStateFieldType на таблице. Свойство может принимать 3 значения:
— None, отключено отслеживание актуальности данных
— Date, включено отслеживание актуальности данных с помощью дат
— UtcDateTime, включено отслеживание актуальности данных с помощью даты и времени.
После того как данное свойство будет включено на таблице, система автоматически добавит два поля ValidFrom и ValidTo. Данные поля нужно включить в состав индекса со следующими свойствами:
— AllowDuplicates установлено значение No
— AlternateKey установлено значение Yes
— ValidTimeStateKey установлено значение Yes
— ValidTimeStateMode установлено значение Gap.
Выборка данных
Для выборки данных действующих в конкретный период, в теле запроса нужно указать выражение validTimeState. Пример использования выражения:
while select validTimeState(dateFrom, dateTo) from table { ... }
или
while select validTimeState(currentDate) from table { ... }
В первом случае будут выбраны записи, у которых диапазон дат validFrom и validTo пересекаются с диапазоном дат dateFrom и dateTo. Во втором случае будут выбраны записи, для которых дата currentDate будет входить в диапазон дат validFrom и validTo.
Обновление данных
Для обновления данных, перед выполнение запроса, нужно у таблицы вызвать метод ValidTimeStateUpdateMode с указание метода обновления ValidTimeStateUpdate, который может принимать следующие значения:
— Correction, обновление существующей записи
— CreateNewTimePeriod, создание новой записи, для которой дата ValidFrom будет текущей, а ValidTo примет значение ValidTo записи для которой выполнялось обновление.
— EffectiveBased, создание новой записи если текущая дата входит в диапазон дат ValidFrom и ValidTo выбранной записи, в противном случае обновление записи.
Пример обновления записи:
table.ValidTimeStateUpdateMode(ValidTimeStateUpdate::Correction); while select forupdate validTimeState(dateFrom, dateTo) from table { ... }
Здесь все найденные записи будут обновлены.
Выборка в Query
В запросах Query для выбора данных действующих в конкретный период можно использовать следующие методы:
— validTimeStateAsOfDate, на входе нужно указать дату, на которую действуют записи
— validTimeStateAsOfDateTime, на входе нужно указать дату с временем, на которое действуют записи
— validTimeStateDateRange, на входе нужно указать даты начала и конца периода, на который действуют записи
— validTimeStateDateTimeRange, на входе нужно указать даты с временем начала и конца периода, на который действуют записи
Пример использования в Query:
query.validTimeStateAsOfDate(currentDate);
Comments
So empty here ... leave a comment!