我有一个游戏表,每个游戏都有一个发生日期,例如......
-------------------
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对我来说还是比较新的。
这将返回最早(或唯一)的匹配季节:
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/