使用 DAX 计算涉及事实表上日期的度量
Calculate measure involving dates on a factTable with DAX
我有这个问题:
给定一个包含仓库交易列表的 "Movements" factTable。
我想知道有多少物品到达,有多少物品被运送(这很微不足道),还有 在特定时间 "In Order" 有多少物品(并且这是困难的部分)
因此,每一行都可以是收据(它具有正值 "qIn")或装运(正 qOut)
例如,一个非常简单的记录列表可以是:
ID Item TransactionDate OrderDate qIn qOut
1 A 2019-01-30 2019-01-10 5 0
2 A 2019-02-20 2019-01-15 3 0
3 A 2019-03-12 2019-01-20 0 6
4 A 2019-03-30 2019-02-20 20 0
这意味着:
在 TransactionDate 2019-01-30 项目 A 已到达数量 5。
此订单是在 2019-01-10 上创建的:因此在那 20 天内,商品 A 的数量为 5 "ordered"。
但是,当我在 1 月底观看时,我应该在 "ordered" 度量值中看到此交易为 0,因为它是在 1 月 30 日到达的。
相反,对于第二条记录,在 1 月底我应该看到数量 3 是 "in order",因为实际到货时间是 2019-02-20。
因此,在该行的末尾,Excel 主元 table 应该显示类似这样的情况:
Year 2019
Month January February March
IN | Ord IN | Ord IN | Ord
Item
A 5 3 3 20 20 0
qIn 的简单度量是:
qIN := SUM(Transactions[qtaIn])
我目前已经阐明的订购数量的度量(没有任何作用!):
orderedQty :=
CALCULATE (
SUMX ( Transactions; Transactions[qIn] );
DATESBETWEEN (
Transactions[TransactionDate];
MINX ( Transactions; Transactions[OrderDate] );
MAXX ( Transactions; Transactions[TransactionDate] )
)
)
编辑
"InOrder" 度量应该是 "additive",因为它不仅应该考虑当月发生的事情,而且 InOrder 的多少尚未收到过去几个月的 。
有了图片(但那样做...)整个事情会更清楚,至少从逻辑的角度来看是这样。但是,还有一张图片,我看不出如何从该逻辑中提取 "direct measures"。
相反,利用@Olly 已经提供的措施,问题可以重新表述为:
InOrderFromOtherMonths := Sum (qIn) where Order Month <> Current Month
(即过去几个月收到的订单在当月到达的数量)
InOrder := Total sum of (ORDER measure) - InOrderFromOtherMonths
PS。
我用一个更有趣的例子创建了 an Excel 文件。
在该文件中,使用 "direct measure picture" 一月的 InOrder
将是:
ID 2 + ID 5 + ID 6
(1 月底尚未 开放 订单)。
在值 = 3+9+17=29
"indirect" 度量为:
Total sum of ORDER = 15+23+12=50
InOrderFromOtherMonths = 6+15=21
InOrder = Total sum of ORDER - InOrderFromOtherMonths = 50 - 21 = **29**
创建一个日历 table,包括一个 YYYY-MM
字段。如果您还没有日历 table,您可以在 PowerPivot 中自动创建一个:Design > Date Table > New
在 Calendar[Date]
和 Transactions[TransactionDate]
之间建立活跃关系
在 Calendar[Date]
和 Transactions[OrderDate]
之间创建 INACTIVE 关系
现在创建您的措施:
测量输入:
IN:=SUM ( Transactions[qIn] )
测量订单:
ORDERS:=
CALCULATE (
SUM ( Transactions[qIn] ),
USERELATIONSHIP ( 'Calendar'[Date], Transactions[OrderDate] )
)
测量顺序:
ORDER:=
IF (
HASONEVALUE ( 'Calendar'[YYYY-MM] ),
CALCULATE (
[ORDERS],
FORMAT ( Transactions[TransactionDate], "YYYY-MM" ) <> VALUES ( 'Calendar'[YYYY-MM] )
)
)
并转向适合:
编辑
在你的问题编辑后,我发现你的一些标签令人困惑 - 但尝试创建以下度量:
测量:已订购
Ordered:=
CALCULATE (
SUM ( Movements[qIn] ),
USERELATIONSHIP ( 'Calendar'[Date], Movements[OrdDate] )
)
测量:收到
Received:= SUM ( Movements[qIn] )
评价:优秀
Outstanding:=
VAR EOMaxDate =
EOMONTH ( LASTDATE ( 'Calendar'[Date] ), 0 )
RETURN
IF (
ISBLANK ( [Ordered] ) && ISBLANK ( [Received] ),
BLANK(),
CALCULATE (
[Ordered] - [Received],
FILTER (
ALL ( 'Calendar'),
'Calendar'[Date] <= EOMaxDate
)
)
)
现在在你的数据透视表中使用这三个指标:
或者更明确地说:
参见 https://excel.solutions/so_55596609-2/ 例如 XLSX 文件
我有这个问题: 给定一个包含仓库交易列表的 "Movements" factTable。
我想知道有多少物品到达,有多少物品被运送(这很微不足道),还有 在特定时间 "In Order" 有多少物品(并且这是困难的部分)
因此,每一行都可以是收据(它具有正值 "qIn")或装运(正 qOut)
例如,一个非常简单的记录列表可以是:
ID Item TransactionDate OrderDate qIn qOut
1 A 2019-01-30 2019-01-10 5 0
2 A 2019-02-20 2019-01-15 3 0
3 A 2019-03-12 2019-01-20 0 6
4 A 2019-03-30 2019-02-20 20 0
这意味着:
在 TransactionDate 2019-01-30 项目 A 已到达数量 5。
此订单是在 2019-01-10 上创建的:因此在那 20 天内,商品 A 的数量为 5 "ordered"。
但是,当我在 1 月底观看时,我应该在 "ordered" 度量值中看到此交易为 0,因为它是在 1 月 30 日到达的。
相反,对于第二条记录,在 1 月底我应该看到数量 3 是 "in order",因为实际到货时间是 2019-02-20。
因此,在该行的末尾,Excel 主元 table 应该显示类似这样的情况:
Year 2019
Month January February March
IN | Ord IN | Ord IN | Ord
Item
A 5 3 3 20 20 0
qIn 的简单度量是:
qIN := SUM(Transactions[qtaIn])
我目前已经阐明的订购数量的度量(没有任何作用!):
orderedQty :=
CALCULATE (
SUMX ( Transactions; Transactions[qIn] );
DATESBETWEEN (
Transactions[TransactionDate];
MINX ( Transactions; Transactions[OrderDate] );
MAXX ( Transactions; Transactions[TransactionDate] )
)
)
编辑
"InOrder" 度量应该是 "additive",因为它不仅应该考虑当月发生的事情,而且 InOrder 的多少尚未收到过去几个月的 。
有了图片(但那样做...)整个事情会更清楚,至少从逻辑的角度来看是这样。但是,还有一张图片,我看不出如何从该逻辑中提取 "direct measures"。
相反,利用@Olly 已经提供的措施,问题可以重新表述为:
InOrderFromOtherMonths := Sum (qIn) where Order Month <> Current Month
(即过去几个月收到的订单在当月到达的数量)
InOrder := Total sum of (ORDER measure) - InOrderFromOtherMonths
PS。
我用一个更有趣的例子创建了 an Excel 文件。
InOrder
将是:
ID 2 + ID 5 + ID 6
(1 月底尚未 开放 订单)。
在值 = 3+9+17=29
"indirect" 度量为:
Total sum of ORDER = 15+23+12=50
InOrderFromOtherMonths = 6+15=21
InOrder = Total sum of ORDER - InOrderFromOtherMonths = 50 - 21 = **29**
创建一个日历 table,包括一个 YYYY-MM
字段。如果您还没有日历 table,您可以在 PowerPivot 中自动创建一个:Design > Date Table > New
在 Calendar[Date]
和 Transactions[TransactionDate]
在 Calendar[Date]
和 Transactions[OrderDate]
现在创建您的措施:
测量输入:
IN:=SUM ( Transactions[qIn] )
测量订单:
ORDERS:=
CALCULATE (
SUM ( Transactions[qIn] ),
USERELATIONSHIP ( 'Calendar'[Date], Transactions[OrderDate] )
)
测量顺序:
ORDER:=
IF (
HASONEVALUE ( 'Calendar'[YYYY-MM] ),
CALCULATE (
[ORDERS],
FORMAT ( Transactions[TransactionDate], "YYYY-MM" ) <> VALUES ( 'Calendar'[YYYY-MM] )
)
)
并转向适合:
编辑
在你的问题编辑后,我发现你的一些标签令人困惑 - 但尝试创建以下度量:
测量:已订购
Ordered:=
CALCULATE (
SUM ( Movements[qIn] ),
USERELATIONSHIP ( 'Calendar'[Date], Movements[OrdDate] )
)
测量:收到
Received:= SUM ( Movements[qIn] )
评价:优秀
Outstanding:=
VAR EOMaxDate =
EOMONTH ( LASTDATE ( 'Calendar'[Date] ), 0 )
RETURN
IF (
ISBLANK ( [Ordered] ) && ISBLANK ( [Received] ),
BLANK(),
CALCULATE (
[Ordered] - [Received],
FILTER (
ALL ( 'Calendar'),
'Calendar'[Date] <= EOMaxDate
)
)
)
现在在你的数据透视表中使用这三个指标:
或者更明确地说:
参见 https://excel.solutions/so_55596609-2/ 例如 XLSX 文件