Power BI中如何匹配设备名并返回多笔SNOW工单记录
实现多匹配SNOW工单的查询与展示
问题背景
现有两张表:
Defender表:包含Device Name列Defender SNOW表:包含文本类型的Short Description列和工单编号Number列
已实现判断设备是否存在对应工单、返回单个工单编号的计算列,但需要实现当设备匹配多条工单时,返回所有对应工单记录或生成动态匹配表(等效于SQL:SELECT * FROM [Defender SNOW] WHERE [Short Description] LIKE '%[Device Name]%')
解决方案
1. 在Defender表中返回所有匹配的工单编号(计算列)
如果需要在Defender表的每行中显示该设备对应的所有SNOW工单号,用CONCATENATEX函数替换原有的MAXX,将所有匹配的工单号拼接成字符串:
All SNOW Ticket Refs = IF( ISEMPTY( FILTER( 'Defender SNOW', CONTAINSSTRING('Defender SNOW'[Short description], Defender[Device Name]) ) ), BLANK(), CONCATENATEX( FILTER( 'Defender SNOW', CONTAINSSTRING('Defender SNOW'[Short description], Defender[Device Name]) ), 'Defender SNOW'[Number], ", " // 可根据需求自定义分隔符 ) )
2. 创建动态匹配表(DAX表)
如果需要生成一张独立的动态表,展示所有Device Name与Defender SNOW工单的匹配关系,通过以下DAX创建新表:
写法一(直观型)
Device-SNOW Matches = SELECTCOLUMNS( FILTER( CROSSJOIN(Defender, 'Defender SNOW'), CONTAINSSTRING('Defender SNOW'[Short description], Defender[Device Name]) ), "Device Name", Defender[Device Name], "SNOW Ticket Number", 'Defender SNOW'[Number], "Short Description", 'Defender SNOW'[Short description] // 可按需添加Defender SNOW表的其他列 )
写法二(高效型)
避免全表交叉连接后筛选,性能更优:
Device-SNOW Matches = GENERATE( Defender, FILTER( 'Defender SNOW', CONTAINSSTRING('Defender SNOW'[Short description], Defender[Device Name]) ) )
生成的动态表会自动包含所有设备与对应工单的匹配记录,可直接用于报表可视化展示。
内容的提问来源于stack exchange,提问作者Mark Tait
相关产品推荐
相关产品推荐

