我有收集仓库“快照”的数据。它有三列:SnapshotDate,Item,OnHand
(真实数据每个SnapshotDate有近100,000条记录,这里我发布一个例子)
我想测量相对于前一个日期的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(青色单元格)。
怎么能实现这一目标?
这里的问题是日期/项目的组合(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"
现在,您可以创建所需的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度量:
更新了XLSX文件:https://excel.solutions/so_55740804/