Таблицы с отслеживанием периодов актуальности данных (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!

Добавить комментарий

Sidebar