SSAS Как «заполнить» факты моментального снимка, повторив последнее непустое значение - PullRequest
1 голос
/ 09 сентября 2010

У меня есть куб с типичной структурой снимков и ежедневной гранулярностью (например, количество запасов). Я хотел бы иметь возможность удалить некоторые детализированные данные из этого куба, потому что у нас есть что-то вроде 270 000 000 строк исходных данных, обработка куба идет медленно, и нет существенной разницы от одной точки данных к другой, в дневной уровень.

Тем не менее, пользователи хотят получить уровень детализации - ежедневные данные за недавнее прошлое, а затем ежемесячные или ежеквартальные за более старые периоды. Это помогло бы ситуации НО - они также хотят, чтобы диаграммы, которые «отображались», отображали данные для каждой точки данных и не имели «дыр» между одной точкой данных и следующей.

Итак, вот вопрос: если у меня есть куб с таблицей фактов моментального снимка, и в таблице есть ежедневные значения за последние 30 дней, то месячные значения за 6 месяцев, а затем квартальные значения за два года до этого, есть ли Разумный способ заставить вывод из куба «подделать» пробелы, повторяя последнее значение снимка для каждого «пустого» дня? Другими словами, если я поставлю диаграмму за весь период времени, я хочу, чтобы на ней были плато, повторяющие последнее непустое значение для каждого пробела в данных, но без потери хранилища за сохранение всех этих значений.

Ответы [ 2 ]

0 голосов
/ 14 сентября 2010

Я близок к этому.Придумали следующий тип рекурсивного выражения, которое, похоже, работает (в основном).Попытка замены в функции ClosingPeriod (), чтобы привести его в порядок, но этот бит не работает:

/* Works! */
with member Measures.lastEstatementsCount as 
iif( 
    isleaf( [Date].[Calendar].currentmember ),

    iif(
        isempty([Measures].[_Add E Statements Count]),
        ( [Date].[Calendar].prevmember, Measures.[lastEstatementsCount] ),
        Measures.[_Add E Statements Count]
    ),

    ( 
        ( tail( descendants( [Date].[Calendar].currentmember ) ) ).item(0), 
            Measures.[lastEstatementsCount] 
    )
)
select 
    Measures.lastEstatementsCount on columns,
    [Date].[Calendar].[Month Name] on rows
from [EngagedMember];


/* Substituting ClosingPeriod() in the recursion doesn't for some reason */
with member Measures.lastEstatementsCount as 
iif( 
    isleaf( [Date].[Calendar].currentmember ),

    iif(
        isempty([Measures].[_Add E Statements Count]),
        ( [Date].[Calendar].prevmember, Measures.[lastEstatementsCount] ),
        Measures.[_Add E Statements Count]
    ),

    ( 
        ClosingPeriod( [Date].[Calendar].[Date], [Date].[Calendar].currentmember ), 
            Measures.[lastEstatementsCount] 
    )
)
select 
    Measures.lastEstatementsCount on columns,
    [Date].[Calendar].[Month Name] on rows
from [EngagedMember];
0 голосов
/ 09 сентября 2010

В кубе можно использовать рассчитанную меру MDX для уровня дня, которая ищет последнюю доступную точку данных.

Не уверен, что эта идея поможет, но я бы начал искать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...