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

时间:2019-04-12 10:30:13

标签: powerbi dax

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

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

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

-------------------------------
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语句进行修改,这会很痛苦。

对于从哪里开始我有些困惑,我可以在几秒钟内用SQL将它淘汰掉,但是DAX对我来说还是很新的。

1 个答案:

答案 0 :(得分: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/