Аналогично вопросу, заданному здесь,
Учитывая эту таблицу, я хочу сохранить только записи, в которых электронное письмо появляется первым.
<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>[email protected]</td>
<td>Scott</td>
<td>Johnson</td>
<td>A</td>
<td>Z</td>
<td>1111</td>
</tr>
<tr>
<td>[email protected]</td>
<td>Bill</td>
<td>Johnson</td>
<td>B</td>
<td>Y</td>
<td>2222</td>
</tr>
<tr>
<td>[email protected]</td>
<td>Ted</td>
<td>Smith</td>
<td>C</td>
<td>X</td>
<td>3333</td>
</tr>
<tr>
<td>[email protected]</td>
<td>Steve</td>
<td>Williams</td>
<td>D</td>
<td>W</td>
<td>4444</td>
</tr>
<tr>
<td>[email protected]</td>
<td>Sam</td>
<td>Samford</td>
<td>E</td>
<td>U</td>
<td>5555</td>
</tr>
<tr>
<td>[email protected]</td>
<td>David</td>
<td>Beals</td>
<td>F</td>
<td>V</td>
<td>6666</td>
</tr>
<tr>
<td>[email protected]</td>
<td>Stephen</td>
<td>Jackson</td>
<td>G</td>
<td>T</td>
<td>7777</td>
</tr>
<tr>
<td>[email protected]</td>
<td>Seven</td>
<td>Alberts</td>
<td>H</td>
<td>S</td>
<td>8888</td>
</tr>
</tbody>
</table>
Ожидаемая выходная таблица:
<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>[email protected]</td>
<td>Scott</td>
<td>Johnson</td>
<td>A</td>
<td>Z</td>
<td>1111</td>
</tr>
<tr>
<td>[email protected]</td>
<td>Steve</td>
<td>Williams</td>
<td>D</td>
<td>W</td>
<td>4444</td>
</tr>
<tr>
<td>[email protected]</td>
<td>Sam</td>
<td>Samford</td>
<td>E</td>
<td>U</td>
<td>5555</td>
</tr>
<tr>
<td>[email protected]</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
, содержащую индексы, которые нужно выбрать, а затем применить эту таблицу Indexes
в качестве фильтра с помощью TREATAS.
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] ) )