使用DAX计算涉及事实表上日期的度量

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

我有这个问题:给出一个“Movements”factTable,它包含仓库交易清单。

我想知道到达了多少物品,运送了多少物品(这是微不足道的),但是在特定时间有多少物品是“有序”(这是困难的部分)

因此,每一行可以是收据(它具有正的“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天内有5个数量的项目A“已订购”。但是,当我在1月底观看时,我应该在“有序”措施中看到0,因为它在1月30日到达。

相反,对于第二个记录,在1月底,我应该看到3个数量是“按顺序”,因为实际到达时间是2019-02-20。

因此,在该行的末尾,Excel数据透视表应显示与此类似的情况:

    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”措施应该是“附加的”,因为它不仅应该考虑当前发生的事情,而且还要考虑过去几个月收到的InOrder的数量。

有了一张图片(但那就是......),至少从逻辑的角度来看,整个事情会更加清晰。然而,也有图片,我无法看到如何从该逻辑中提取“直接测量”。

相反,利用@Olly已经提供的措施,问题可以重新表述为:

InOrderFromOtherMonths :=  Sum (qIn) where Order Month <> Current Month

(即当月有多少是来自过去几个月的订单)

InOrder := Total sum of (ORDER measure)  -  InOrderFromOtherMonths

PS。我用一个更有趣的例子创建了an Excel文件。 enter image description here在该文件中,使用“直接测量图片”1月份的InOrder将是:ID 2 + ID 5 + ID 6(订单尚未在1月底开放)。在值= 3 + 9 + 17 = 29

“间接”措施将是:

Total sum of ORDER = 15+23+12=50
InOrderFromOtherMonths = 6+15=21
InOrder = Total sum of ORDER - InOrderFromOtherMonths = 50 - 21 = **29**
pivot-table dax powerpivot
1个回答
1
投票

创建一个Calendar表,包括YYYY-MM字段。如果您还没有日历表,可以在PowerPivot中自动创建一个:Design > Date Table > New

Calendar[Date]Transactions[TransactionDate]之间创建一个ACTIVE关系

Calendar[Date]Transactions[OrderDate]之间创建一个非活动关系

enter image description here

现在创建您的措施:

测量IN:

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] )
    )
)

并适应:

enter image description here

编辑

在您的问题编辑之后,我发现您的一些标签令人困惑 - 但尝试创建以下措施:

措施:有序

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
            )
        )   
    )

现在在您的支点中使用这三个度量:

enter image description here

或者,更清楚地说:

enter image description here

请参阅https://excel.solutions/so_55596609-2/,例如XLSX文件

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