当DAX不存在时,DAX也会计算前一个值

问题描述 投票:1回答:1

我有收集仓库“快照”的数据。它有三列:SnapshotDate,Item,OnHand

(真实数据每个SnapshotDate有近100,000条记录,这里我发布一个例子)

enter image description here

我想测量相对于前一个日期的Delta On Hand(无论它是什么)。

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

PreviousDate

=
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(青色单元格)。

enter image description here

怎么能实现这一目标?

Link to the test Excel file

dax calculated-columns powerpivot
1个回答
1
投票

这里的问题是日期/项目的组合(15/04/2019,项目C)在您的事实表中根本不存在。因此,您创建的衡量标准没有任何区别,它永远不会被计算出来。

一种方法是为Date和Item创建单独的维度表,加载到数据模型,并与事实表建立关系。

查询日期维度:

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"

enter image description here

现在,您可以创建所需的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]

现在使用数据透视表中Dimension表中的维度,使用Delta度量:

enter image description here

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

© www.soinside.com 2019 - 2024. All rights reserved.