DAX 在不存在时也会计算先前的值
DAX calculate previous value also when it doesn't exist
我有收集 "snapshots" 仓库的数据。
它包含三列:
SnapshotDate、Item、OnHand
(真实数据每个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(青色单元格)。
这是如何实现的?
这里的问题是日期/项目的组合(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/
我有收集 "snapshots" 仓库的数据。 它包含三列: SnapshotDate、Item、OnHand
(真实数据每个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(青色单元格)。
这是如何实现的?
这里的问题是日期/项目的组合(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/