我有一个游戏桌,每个游戏都有发生日期,例如...
-------------------
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对我来说还是很新的。
答案 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/