(为了方便度量命名,列名略有不同;根据您的喜好进行更改。)
创建第一个度量:
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的初始行,则不计算前值)。一旦知道了当前和前一个差异,我们只需将它们除以即可。