Power BI:按日期排序去空白,实现表格用户与日期合并为单行
解决DAX多行数据转单行合并问题
问题场景
现有两张表table1和table2,需要将table2中同一prov下的所有用户及其对应日期整合为单行结果,但使用逐行判断的DAX公式后,生成了多行带空白的表格,无法达到预期效果。
问题原因
之前的DAX公式是对table2的每一行进行判断,仅填充当前行xs匹配的日期列,其他列留空,因此会保留原表的所有行,导致结果出现多行空白。需要通过分组聚合的方式,将同一prov下的所有用户和日期提取到单行中。
解决方案
方案1:按xs固定匹配生成单行表
如果user和xs的对应关系固定(如user2对应x、user3对应xx等),可以直接使用LOOKUPVALUE结合SUMMARIZE生成目标表:
目标表 = SUMMARIZE( table2, table2[prov], "user1", LOOKUPVALUE(table2[user], table2[xs], "x"), "date1", LOOKUPVALUE(table2[date], table2[xs], "x"), "user2", LOOKUPVALUE(table2[user], table2[xs], "xx"), "date2", LOOKUPVALUE(table2[date], table2[xs], "xx"), "user3", LOOKUPVALUE(table2[user], table2[xs], "xxx"), "date3", LOOKUPVALUE(table2[date], table2[xs], "xxx"), "user4", LOOKUPVALUE(table2[user], table2[xs], "xxxx"), "date4", LOOKUPVALUE(table2[date], table2[xs], "xxxx") )
SUMMARIZE按prov分组,每个prov生成一行结果LOOKUPVALUE根据xs的固定值精准匹配对应的user和date,直接填充到对应列中,无空白行
方案2:按日期排序生成单行表
如果需要按日期从早到晚排列user1到user4,先给table2添加计算列生成排序序号:
日期排序序号 = RANKX(FILTER(table2, table2[prov] = EARLIER(table2[prov])), table2[date],, ASC, Dense)
再使用该序号生成目标表:
目标表(按日期排序) = SUMMARIZE( table2, table2[prov], "user1", LOOKUPVALUE(table2[user], table2[日期排序序号], 1), "date1", LOOKUPVALUE(table2[date], table2[日期排序序号], 1), "user2", LOOKUPVALUE(table2[user], table2[日期排序序号], 2), "date2", LOOKUPVALUE(table2[date], table2[日期排序序号], 2), "user3", LOOKUPVALUE(table2[user], table2[日期排序序号], 3), "date3", LOOKUPVALUE(table2[date], table2[日期排序序号], 3), "user4", LOOKUPVALUE(table2[user], table2[日期排序序号], 4), "date4", LOOKUPVALUE(table2[date], table2[日期排序序号], 4) )
RANKX为每个prov下的行按日期升序生成1-4的连续序号- 后续通过序号匹配
user和date,实现按日期排序的单行结果
效果验证
两种方案均可生成预期的单行表格,无空白行,所有用户和日期信息整合在同一行中。
内容的提问来源于stack exchange,提问作者KLM
相关产品推荐
相关产品推荐

