答案 0 :(得分:4)
我使用下表为解决方案建立了原型:
表名称:“数据”
(列名略有不同,以使度量的命名更加容易;请根据需要更改它们)。
创建第一个度量:
Total Amount = SUM(Data[Amount])
创建第二个度量:
Accumulated Difference =
VAR Current_Index = MAX ( Data[Index] )
VAR Initial_Amount =
CALCULATE (
MAX ( Data[Amount] ),
FILTER ( ALL ( Data ), Data[Index] = 1 ) )
VAR Accumulated_Reductions =
CALCULATE (
[Total Amount],
FILTER ( ALL ( Data ), Data[Index] > 1 && Data[Index] <= Current_Index ) )
RETURN
Initial_Amount - Accumulated_Reductions
创建第三个度量:
% Previous =
VAR Current_Index = MAX ( Data[Index] )
VAR Current_Difference =
CALCULATE (
[Accumulated Difference],
FILTER ( ALL ( Data ), Data[Index] = Current_Index ) )
VAR Previous_Difference =
IF (Current_Index > 1,
CALCULATE (
[Accumulated Difference],
FILTER ( ALL ( Data ), Data[Index] = Current_Index - 1 ) ) )
RETURN
DIVIDE ( Current_Difference, Previous_Difference )
结果:
说明:
第一个度量只是为了方便起见,以避免多次编写相同的求和运算。
第二个措施: 首先,我们发现索引在当前行中可见,并将其保存在变量中。 然后,我们找到初始金额(索引= 1的金额),因为我们需要它作为起点。 ALL是必需的,以忽略应用于行的过滤器。 然后,使用类似的模式,我们计算当前行与初始行之间的累积减少量(例如,对于步骤D,我们需要对索引(4、3、2)的总和进行求和 最后,所需结果只是初始数量-累计减少量。
第三项措施: 使用非常相似的技术,我们首先为当前行找到累积差异,然后为上一行找到累积差异。唯一的区别是测试起始条件的前一行(如果它是索引为1的初始行,则不计算先前的值)。一旦知道当前和以前的差异,我们就将它们分开。