如何解决后续 Dax 删除重复项
类似于提出的问题here,
鉴于此表,我只想保留电子邮件最先出现的记录。
电子邮件 | 名字 | 姓氏 | 地址 | 城市 | 邮编 |
---|---|---|---|---|---|
ABC@XYZ.com | 斯科特 | 约翰逊 | A | Z | 1111 |
ABC@XYZ.com | 账单 | 约翰逊 | B | 是 | 2222 |
ABC@XYZ.com | 泰德 | 史密斯 | C | X | 3333 |
DEF@QRP.com | 史蒂夫 | 威廉姆斯 | D | W | 4444 |
XYZ@LMN.com | 山姆 | 桑福德 | E | U | 5555 |
XYZ@LMN.com | 大卫 | 比尔 | F | V | 6666 |
DEF@QRP.com | 斯蒂芬 | 杰克逊 | G | T | 7777 |
TUV@DEF.com | 七个 | 阿尔伯特 | H | S | 8888 |
<table border="1" class="dataframe">
<thead>
<tr style="text-align: right;">
<th>email</th>
<th>firstname</th>
<th>Lastname</th>
<th>Address</th>
<th>City</th>
<th>Zip</th>
</tr>
</thead>
<tbody>
<tr>
<td>ABC@XYZ.com</td>
<td>Scott</td>
<td>Johnson</td>
<td>A</td>
<td>Z</td>
<td>1111</td>
</tr>
<tr>
<td>ABC@XYZ.com</td>
<td>Bill</td>
<td>Johnson</td>
<td>B</td>
<td>Y</td>
<td>2222</td>
</tr>
<tr>
<td>ABC@XYZ.com</td>
<td>Ted</td>
<td>Smith</td>
<td>C</td>
<td>X</td>
<td>3333</td>
</tr>
<tr>
<td>DEF@QRP.com</td>
<td>Steve</td>
<td>Williams</td>
<td>D</td>
<td>W</td>
<td>4444</td>
</tr>
<tr>
<td>XYZ@LMN.com</td>
<td>Sam</td>
<td>Samford</td>
<td>E</td>
<td>U</td>
<td>5555</td>
</tr>
<tr>
<td>XYZ@LMN.com</td>
<td>David</td>
<td>Beals</td>
<td>F</td>
<td>V</td>
<td>6666</td>
</tr>
<tr>
<td>DEF@QRP.com</td>
<td>Stephen</td>
<td>Jackson</td>
<td>G</td>
<td>T</td>
<td>7777</td>
</tr>
<tr>
<td>TUV@DEF.com</td>
<td>Seven</td>
<td>Alberts</td>
<td>H</td>
<td>S</td>
<td>8888</td>
</tr>
</tbody>
</table>
预期输出表:
电子邮件 | 名字 | 姓氏 | 地址 | 城市 | 邮编 |
---|---|---|---|---|---|
ABC@XYZ.com | 斯科特 | 约翰逊 | A | Z | 1111 |
DEF@QRP.com | 史蒂夫 | 威廉姆斯 | D | W | 4444 |
XYZ@LMN.com | 山姆 | 桑福德 | E | U | 5555 |
TUV@DEF.com | 七个 | 阿尔伯特 | H | S | 8888 |
<table border="1" class="dataframe">
<thead>
<tr style="text-align: right;">
<th>email</th>
<th>firstname</th>
<th>Lastname</th>
<th>Address</th>
<th>City</th>
<th>Zip</th>
</tr>
</thead>
<tbody>
<tr>
<td>ABC@XYZ.com</td>
<td>Scott</td>
<td>Johnson</td>
<td>A</td>
<td>Z</td>
<td>1111</td>
</tr>
<tr>
<td>DEF@QRP.com</td>
<td>Steve</td>
<td>Williams</td>
<td>D</td>
<td>W</td>
<td>4444</td>
</tr>
<tr>
<td>XYZ@LMN.com</td>
<td>Sam</td>
<td>Samford</td>
<td>E</td>
<td>U</td>
<td>5555</td>
</tr>
<tr>
<td>TUV@DEF.com</td>
<td>Seven</td>
<td>Alberts</td>
<td>H</td>
<td>S</td>
<td>8888</td>
</tr>
</tbody>
</table>
解决方法
DAX 中没有表的固有排序,因此为了获取第一行,您需要添加索引列或以某种方式在表上定义排序。
对于这个答案,我假设您以某种方式添加了索引列(在查询编辑器中或使用 DAX 计算列)。
您可以按如下方式创建过滤表:
FilteredTable1 =
FILTER (
Table1,Table1[Index]
= CALCULATE ( MIN ( Table1[Index] ),ALLEXCEPT ( Table1,Table1[email] ) )
)
对于 Table1
中的每一行,这会检查具有相同电子邮件的所有行的索引是否最小。
假设我们添加了一个具有非重复值的 Index
列,通过准备一个包含要选择的索引的 Indexes
表,可以将上下文转换的数量减少到每个电子邮件只有一个,并且然后使用 TREATAS 将此 Indexes
表用作过滤器。
T Index Unique =
VAR Indexes =
SELECTCOLUMNS(
ALL( 'T Index'[Email] ),"MinIndex",CALCULATE( MIN( 'T Index'[Index] ) )
)
RETURN
CALCULATETABLE( 'T Index',TREATAS( Indexes,'T Index'[Index] ) )
如果我们在不同的电子邮件中有非唯一的列,但每个电子邮件都是唯一的,例如时间戳,我们可以准备一个包含电子邮件和时间戳的过滤表
例如具有如下所示的 T Date
表
计算表变成
T Date Unique =
VAR EmailDate =
ADDCOLUMNS(
ALL( 'T Date'[Email] ),"MinDate",CALCULATE( MIN( 'T Date'[Date] ) )
)
RETURN
CALCULATETABLE( 'T Date',TREATAS( EmailDate,'T Date'[Email],'T Date'[Date] ) )
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。