DAX 在不存在时也会计算先前的值

DAX calculate previous value also when it doesn't exist

我有收集 "snapshots" 仓库的数据。 它包含三列: SnapshotDateItemOnHand

(真实数据每个SnapshotDate有近100.000条记录,这里我post举例)

我想测量 Delta OnHand 相对于之前的日期(无论它是什么)。

所以我设置了三个计算列:

上一个日期

=
var currentDate = Inventory[SnapshotDate]
return CALCULATE( MAX( Inventory[SnapshotDate]); 
FILTER( ALL(Inventory); Inventory[SnapshotDate] < currentDate)
)

PreviousOnHand

= LOOKUPVALUE(Inventory[OnHand]; Inventory[SnapshotDate]; Inventory[PreviousDate]; Inventory[Item]; Inventory[Item])+0

OnHandDelta

=Inventory[OnHand]-Inventory[PreviuosOnHand]

增量测量:

Delta:=SUM(Inventory[OnHandDelta])

当我旋转这些数据时,我希望在数据不存在时看到 0(红色边框单元格),更重要的是我应该看到 Delta 值 -10(青色单元格)。

这是如何实现的?

Link to the test Excel file

这里的问题是日期/项目的组合(15/04/2019,项目 C)在您的事实中根本不存在 table。所以无论你创建什么度量都没有关系,它永远不会被计算。

一种方法是为日期和项目创建单独的维度 table,加载到数据模型,与您的事实 table。

查询日期维度:

let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    Grouped = Table.Sort(Table.Group(Source, {"SnapshotDate"}, {}), "SnapshotDate"),
    #"Changed Type" = Table.TransformColumnTypes(#"Grouped",{{"SnapshotDate", type date}})
in
    #"Changed Type"

查询项目维度

let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    Grouped = Table.Sort(Table.Group(Source, {"Item"}, {}), "Item"),
    #"Changed Type" = Table.TransformColumnTypes(#"Grouped",{{"Item", type text}})
in
    #"Changed Type"

现在您可以创建您想要的作为 MEASURES,而无需计算列:

测量现有电流

On Hand Current:= 
    SUM ( Inventory[OnHand] ) + 0

测量手头上一个:

On Hand Previous:=
VAR DateCurrent = 
    IF ( 
        HASONEVALUE ( 'Date Dimension'[SnapshotDate] ),
        VALUES ( 'Date Dimension'[SnapshotDate] ),
        BLANK()
    )
VAR DatePrevious = 
    CALCULATE ( 
        MAX ( 'Date Dimension'[SnapshotDate] ),
        FILTER ( 
            ALL ( 'Date Dimension' ),
            'Date Dimension'[SnapshotDate] < DateCurrent
        )
    )
RETURN
    CALCULATE ( 
        [On Hand Current], 
        FILTER ( 
            ALL ( 'Date Dimension'[SnapshotDate] ),
            'Date Dimension'[SnapshotDate] = DatePrevious
        )
    ) + 0

测量 Delta

Delta:=
    [On Hand Current] - [On Hand Previous]

现在使用数据透视中维度 table 中的维度,使用增量度量:

更新的 XLSX 文件:https://excel.solutions/so_55740804/