DAX - 使用另一个表中的日期对事件进行分类

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

我有一个游戏表,每个游戏都有一个发生日期,例如......

-------------------
Game    |   Date   |
-------------------
Game A  | 01/06/16 |
-------------------
Game B  | 01/06/14 |
-------------------
Game C  | 01/06/18 |
-------------------

然后我有一个第二个表定义了开始/结束日期的时间段 - 基本上,季节...

--------------------------------
Season  |   Start   |    End   |
--------------------------------
2014/15 |  15/05/14 | 25/08/15 |
--------------------------------
2015/16 |  12/09/15 | 22/08/16 |
--------------------------------
2016/17 |  10/09/16 | 25/08/17 |
--------------------------------

我想做的是在“事件”表中添加一个列,该表使用Seasons表来计算游戏发生的季节,以便我可以按季节过滤游戏。所以最终的结果是......

-------------------------------
Game    |   Date   |  Season  |
-------------------------------
Game A  | 01/06/16 |  2015/16 |
-------------------------------
Game B  | 01/06/14 |  2014/15 |
-------------------------------
Game C  | 01/06/17 |  2016/17 |
-------------------------------

我设法使用自定义列和嵌套的IF语句以冗长的方式进行,但这看起来很混乱,并且需要在新赛季开始时修改IF语句,这将是一个痛苦。

我对于从这里开始的地方感到有点难过,我可以在几秒钟内将它击败,但DAX对我来说还是比较新的。

powerbi dax
1个回答
1
投票

这将返回最早(或唯一)的匹配季节:

Season First = 
CALCULATE ( 
    FIRSTNONBLANK ( Seasons[Season], 1 ),
    FILTER ( Seasons, Games[Date] >= Seasons[Start]  && Games[Date] <= Seasons[End] )
)

如果您的DID有重叠季节,则此计算列会在列表中返回它们:

Seasons = 
CONCATENATEX ( 
    FILTER ( Seasons, Games[Date] >= Seasons[Start]  && Games[Date] <= Seasons[End] ),
    Seasons[Season], 
    ","
)

工作示例PBIX文件:https://pwrbi.com/so_55649635/

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