2012-06-14 1 views
1

Я пытаюсь создать вычисляемый элемент в SSAS с использованием функции latiff, но, похоже, не может заставить его работать вообще.SQL Server SSAS Calculated Measure with DateDiff

Требование заключается в следующем,
DateDiff (день, XDate где Type = 2 и состояния IN (1,2,3), XDate где Type = 3)

Я не уверен, о том, как перевести это в соответствующий MDX для рассчитанной меры в SSAS.

Любая помощь очень ценится.

+0

Что-то здесь не так. Вы должны добавить, что 'lateiff' в вашем представлении источника данных, а затем использовать его по мере – Lamak

+0

@Lamak Я не совсем уверен, как бы я это сделал. Скажем, это мой DSV, выберите Key1, Key2, Key3, TypeKey, TypeValue from Fact_view – Concept

+0

Я думаю, что я неправильно понял ваш вопрос. Вы хотите вычислить 'DATEDIFF' между строками из того же столбца ?. Если это так, оно не может быть на DSV, и вам понадобится какой-то сложный MDX, который поможет вам с этим – Lamak

ответ

0

Вот пример запроса, показывающего рассчитанную меру, называемую DateDiff. Я предпочитаю разбивать сложные вычисления на более мелкие части для более легкого устранения неполадок. Вы можете комбинировать, если хотите. Я придумал некоторые измерения и меры здесь, но надеюсь, вы можете увидеть, как это работает и адаптироваться соответственно. В принципе, я получаю набор, который объединяет запись с конкретными кодами состояния (или типами кодов) и получает все связанные даты, но только те, у которых есть строка таблицы фактов для меры, называемой статусом (произвольная - любая мера на самом деле таблица сделаю). Затем я выбираю последний из них - при условии, что все в порядке даты, которое должно быть, если ваш размерный вид правильный, и выберите дату с извлечением - а затем, потому что это набор - уменьшите его до элемента с Item (0) .Item (0). Затем введите его имя для использования в функции DateDiff. Я включил некоторую логику, чтобы убедиться, что текущая запись не является членом «Все», и что первая дата не пуста.

with 
    member [Measures].[First Date] as 
     iif(Record.Record.CurrentMember Is [Record].[Record].[All], 
     null, 
Extract(
Tail(
NonEmpty(
    (Record.Record.CurrentMember, 
    {[Status Code].[Status].&[1],[Status Code].[Status].&[2],[Status Code].[Status].&[2]}, 
    [Date].[Date].[Date].Members), 
    [Measures].[Status Count]), 1), [Date].[Date]) 
).Item(0).Item(0).Name 

member measures.[Second Date] as 

iif(Record.Record.CurrentMember Is [Record].[Record].[All], 
null, 

Extract(
Tail(
NonEmpty(
    (Record.Record.CurrentMember, 
    [Type].[Type].&[3], 
    [Date].[Date].[Date].Members), 
    [Measures].[Status Count]), 1), [Date].[Date]) 
).Item(0).Item(0).Name 

member measures.[DateDiff] as 

iif(IsEmpty([Measures].[First Date]), null, 
datediff("d", [Measures].[First Date], [Measures].[Second Date])) 

select 
{[Measures].[Status Count], 
[Measures].[First Date], 
[Measures].[Second Date], 
[Measures].[DateDiff]} 
on columns, 
[Record].members on rows 
from [status] 
+0

Хорошо, если я создаю новый вычисляемый элемент из этого, тогда я бы просто использовал все до выбора select? Спасибо – Concept

+0

Я бы предложил создать 3 рассчитанных меры. Конечно, вы можете переименовать, но здесь у меня есть первая дата, вторая дата и дата. При создании каждого из них используйте код между AS и следующим MEMBER (или SELECT в последнем случае для DateDiff). – Stacia

+0

Stacia, что именно представляет «Record.Record.CurrentMember»? – Concept

 Смежные вопросы

  • Нет связанных вопросов^_^