使用DAX

时间:2019-04-09 15:44:24

标签: pivot-table dax powerpivot

我有这个问题: 给定一个“运动” 事实表,其中包含仓库交易的列表。

我想知道有多少物品到达了,有多少运了(这是微不足道的),而且还想知道在特定时间有多少“处于订单状态” (这是困难的部分)

因此,每行可以是收据(其“ 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月底观看时,由于“交易”已于1月30日到达,因此应该以“有序”量度看到该交易为0。

相反,对于第二个记录,在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] )
    )
)

EDIT

“ 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 在该文件中,使用“直接测量图”,一月份的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**

1 个答案:

答案 0 :(得分:1)

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

Calendar[Date]Transactions[TransactionDate]之间创建活动关系

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

有关XLSX文件的信息,请参见https://excel.solutions/so_55596609-2/