首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用DAX计算factTable上涉及日期的度量

用DAX计算factTable上涉及日期的度量
EN

Stack Overflow用户
提问于 2019-04-09 15:44:24
回答 1查看 64关注 0票数 0

我有一个问题:给定一个包含仓库事务列表的“移动”factTable。

我想知道到达了多少件物品,有多少件(这是微不足道的),但同时也想知道在特定的时间有多少件物品是“有序的”

因此,每一行都可以是收据(它有正数"qIn“值),也可以是货件(正qOut)。

例如,一个非常简单的记录列表可以是:

代码语言:javascript
复制
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的数量是“有序的”,因为实际到达的时间是209-02-20。

因此,在行的末尾,Excel枢轴表应该显示类似的情况:

代码语言:javascript
复制
    Year    2019
    Month   January         February        March
            IN | Ord        IN | Ord        IN | Ord
Item
A           5      3         3    20        20   0

qIn的简单度量是:

代码语言:javascript
复制
qIN := SUM(Transactions[qtaIn])

我现在已经完成了订购量的测量(这没有用!):

代码语言:javascript
复制
orderedQty :=
CALCULATE (
    SUMX ( Transactions; Transactions[qIn] );
    DATESBETWEEN (
        Transactions[TransactionDate];
        MINX ( Transactions; Transactions[OrderDate] );
        MAXX ( Transactions; Transactions[TransactionDate] )
    )
)

编辑

" InOrder“度量应该是”加性的“,因为它不仅应该考虑到本月发生了什么,而且还应该考虑到过去几个月的InOrder中有多少尚未收到。

带着一张照片(但那应该是.)至少从逻辑的角度来看,整件事会更清楚。然而,也有一幅图,我看不出如何从这个逻辑中提取“直接措施”。

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

代码语言:javascript
复制
InOrderFromOtherMonths :=  Sum (qIn) where Order Month <> Current Month

(即从过去几个月收到的订单中收到的当月到达的数量)

代码语言:javascript
复制
InOrder := Total sum of (ORDER measure)  -  InOrderFromOtherMonths

PS。我用一个更有趣的例子创建了Excel文件。

在该文件中,使用“直接度量图”,一月份的InOrder将是:ID 2 + ID 5 + ID 6 (订单在1月底尚未打开)。值= 3+9+17=29

采用“间接”措施将是:

代码语言:javascript
复制
Total sum of ORDER = 15+23+12=50
InOrderFromOtherMonths = 6+15=21
InOrder = Total sum of ORDER - InOrderFromOtherMonths = 50 - 21 = **29**
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-12 10:12:57

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

Calendar[Date]Transactions[TransactionDate]之间创建一个积极的关系

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

现在,创建您的措施:

测度IN:

代码语言:javascript
复制
IN:=SUM ( Transactions[qIn] )

度量顺序:

代码语言:javascript
复制
ORDERS:=
CALCULATE ( 
    SUM ( Transactions[qIn] ),
    USERELATIONSHIP ( 'Calendar'[Date], Transactions[OrderDate] )
)

测度顺序:

代码语言:javascript
复制
ORDER:=
IF ( 
    HASONEVALUE ( 'Calendar'[YYYY-MM] ),
    CALCULATE ( 
        [ORDERS], 
        FORMAT ( Transactions[TransactionDate], "YYYY-MM" ) <>  VALUES ( 'Calendar'[YYYY-MM] )
    )
)

和枢轴以适应:

编辑

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

测度:有序

代码语言:javascript
复制
Ordered:=
CALCULATE ( 
    SUM ( Movements[qIn] ),
    USERELATIONSHIP ( 'Calendar'[Date], Movements[OrdDate] )
)

测量:接收到

代码语言:javascript
复制
Received:= SUM ( Movements[qIn] )

衡量标准:杰出

代码语言:javascript
复制
Outstanding:= 
VAR EOMaxDate = 
    EOMONTH ( LASTDATE ( 'Calendar'[Date] ), 0 )
RETURN
    IF ( 
        ISBLANK ( [Ordered] ) && ISBLANK ( [Received] ),
        BLANK(),
        CALCULATE ( 
            [Ordered] - [Received],
            FILTER ( 
                ALL ( 'Calendar'), 
                'Calendar'[Date] <= EOMaxDate
            )
        )   
    )

现在,在您的枢轴中使用这三种度量:

或者更清楚地说:

参见55596609-2,例如XLSX文件。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55596609

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档