2016-09-01 2 views
1

Я пытаюсь создать вычисляемый столбец, который зависит от результатов из предыдущей строки, и я столкнулся с проблемой циклической зависимости.Рекурсивная логика в DAX

У меня есть индекс и значение в исходной таблице, и я создаю расчет следующим образом:

TestValue = [Value] + 
    CALCULATE(sum([Value]), 
     filter(all(Table), [Index] < earlier([Index]))) + 
         // running total of previous Value's 
    CALCULATE(sum([TestResult]), 
     filter(all(Table), [Index] < earlier([Index]))) 
         // running total of previous TestResult's 

и

TestResult = if([TestValue] > 10000, [Value]) 

Я думаю, что проблема в том, что даже если я отфильтрованный на index < earlier (index), он по-прежнему оценивает TestResult для индексов, превышающих текущий.

Что мне делать, чтобы заставить это работать?

Here - это ссылка, которая успешно реализовала рекурсию, но только в сценариях, где вы умножаете более ранний результат на процент.

Edit:

Там, кажется, некоторая путаница по поводу того, что результат должен быть, поэтому я попытаюсь проиллюстрировать желаемый результат:

Оригинал Таблица

| Index | Value | 
----------------- 
| 1  | 500 | 
| 2  | 12000 | 
| 3  | 24000 | 

Ожидаемый результат

| Index | Value | TestResult | TestValue 
---------------------------------------- 
| 1  | 500 | NULL  | NULL 
| 2  | 12000 | 12000  | 500 
| 3  | 15000 | 15000  | 500 + 12000 + 12000 = 24500 

Ряд три подсчитывается по общей сумме «Значение» с индексами 1 и 2 плюс текущее количество «TestResult».

ответ

0

Единственный вариант - разбить ваши запросы так, чтобы не было круговой зависимости.

Это должно возвращать результат вы после:

TempValue = [value] + 
    CALCULATE(sum([value]), 
    filter(all('Table'), 
    [index] < earlier([index]))) 

TestResult = if([TempValue] > 10000, [Value],0) 

TestValue = [TempValue] + 
    CALCULATE(sum([TestResult]), 
    filter(all('Table'), 
    [Index] < earlier([Index]))) 
+0

Но TestResult нужно смотреть как TempValue и TestValue в вашем примере выше. Я не думаю, что вы предоставили мне то, что мне нужно. – confusedKid

+0

До этого условия '[TestValue]> 10000' истинно,' TestValue' будет равно 'TempValue', поэтому это не должно иметь никакого значения. – user5226582

+0

Но даже после [TestValue]> 10000, я хочу продолжать вычислять ... Я не остановлюсь, как только я выполню это условие. – confusedKid