В 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);
Все комментарии
Чтобы оставить комментарий, необходимо войти или зарегистрироваться.
Пока нет комментариев. Будьте первым!