《超级有难度的查询》的解题
原题 https://pbihub.cn/qa/306
根据我的理解,提问者的题意是:
查找条件:
以2018第1组B对I这行为例,要查未来三组(第2组,第3组,第4组)中B跟谁相对(O对B,B对C,G对B),然后查询2018第1组之前已经发生的O对B,B对C,G对B的最近对照结果,
将结果放到B对I这行的后面,其他行的查询规则也是这样。
换个说法:
如2018年第1组中,B对I 这行,首先看后三组,
即1:2018年第2组中O对B,
2:第3组中B对C,
3:第4组中G对B。
然后查找1:O对B在2018年第1组之前的最近对比,即2017年第37组中的O对B,
查找2:B对C同样在2018年第1组之前的最近对比,即2017年第25组C对B,
查找3:G对B同样在2018年第1组之前的最近对比,即2017年第24组G对B,
将查找后的三组结果返回到2018年第1组B对I的后面。
这个题 其实就是个反复筛选的过程, 根据不同条件分好步骤, 再不断将筛选函数加以组合。
第1步, 根据当前行的名称1 去筛选比当前行的年份和分组 大的前3行;
第2步, 对第1步取得的每一行, 根据其 名称1-名称2 的组合 去取得比当前行的年份和分组 小, 且 相同名称组合 的最后一行;
第3步, 将第2步取得的每一行 与当前行合并。
这里我用DAX写了代码。因为只是诠释以上解题思路, 没进一步深化去满足他对布局和格式的要求。
所以, 只要厘清条件和筛选的思绪, 又对DAX公式熟悉(M也如此), 本题不难。
代码:
结果(部分):
由于源数据较大,尚未全面验证本代码的正确性,请大家批评指正。
自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)