PowerBI — DAX — назначьте значение в новом столбце, если строка содержит

#powerbi #dax #powerbi-desktop

Вопрос:

то, что я пытаюсь сделать, — это получить значение в вычисляемом столбце из строки. в столбце 1 есть яблоко;апельсин;груша;банан теперь, если столбец 1 содержит все эти значения, то значение в вычисляемом столбце должно быть 8, если столбец 1 содержит только 2 из этих значений, то значение должно быть 4, если столбец 1 содержит только 3 значения, то должно быть 6, и если столбец 1 содержит только 1 значение, то значение столбца должно быть 2.

легко, правда? это то, что я думал, но, как я не могу понять.Я попробовал с if(или(содержит строку, но она назначит значение 8 для всех из них. я пробовал также со строгим if =»строка», но если будет строка с apple, ей не будет присвоено значение.

надеюсь, я был достаточно ясен.

колонка1 вычисляемый столбец
яблоко;апельсин;груша;банан 8 очки / конкретное значение — 2
Apple 2 яблоко;апельсин;груша;банан — правильные значения
яблоко;апельсин 4 клубника — неверное значение — 0
апельсин;банан 4
груша;банан;яблоко 6
клубника 0
клубника 0

Комментарии:

1. Я думаю, вам нужно опубликовать небольшой репрезентативный набор данных вместе с ожидаемыми результатами.

2. @Joswolley , конечно, вы имеете в виду обычный текст?

3. Что ж, несколько примеров в таблице из 2 столбцов были бы полезны, входные данные плюс ожидаемый результат.

4. @JosWoolley готово!

5. Откуда возьмутся «разыскиваемые» ценности? Это жестко закодированный список? Есть ли еще одна таблица, содержащая значения, которые стоят очков?

Ответ №1:

Для вычисляемого столбца можно использовать следующее

 Column =  VAR _1 =  ADDCOLUMNS ( 'Table', "new", SUBSTITUTE ( 'Table'[col1], ";", "|" ) ) VAR _2 =  GENERATE (  _1,  ADDCOLUMNS (  GENERATESERIES ( 1, PATHLENGTH ( [new] ) ),  "_txt", TRIM ( PATHITEM ( [new], [Value], TEXT ) )  )  ) VAR _3 =  ADDCOLUMNS (  _2,  "score1", MAXX ( FILTER ( Lookup, EARLIER ( [_txt] ) = Lookup[Column1] ), Lookup[score] )  ) RETURN  CALCULATE (  MAXX (  ADDCOLUMNS (  'Table',  "score", SUMX ( FILTER ( _3, EARLIER ( 'Table'[col1] ) = [col1] ), [score1] )  ),  [score]  )  )  

что даст вам это

S1

Если у вас есть такая таблица поиска

S2

Комментарии:

1. я думаю, что я к чему-то пришел, но у меня следующая ошибка : —функция добавления столбцов не может добавить столбец [оценка], так как он уже существует—. Что я сделал,я скопировал таблицу поиска, но в ней говорится :функция «ADDCOLUMNS» не может добавить столбец [оценка], так как он уже существует — я попытался удалить его, тогда он его не увидит. — main-это таблица, в которую добавляются значения, а поиск-это таблица поиска :

2. У вас уже есть столбец под названием оценка в таблице. Вычисляемый столбец должен быть выполнен в таблице, а не в поиске

3. да , безусловно, я пишу новый вычисляемый столбец,называемый Столбцом, в основной таблице, а не в поисковой

4. я только что перезапустил свою power bi, и теперь она работает. классно! Большое спасибо!

5. последний вопрос, однако, будет ли это сравнивать всю строку, когда она выполняет «подсчет очков», или только ее части, если они совпадают? — как будто у меня в таблице поиска есть значение applebees;apple,я думаю, считает его дважды, так как оценка 10 вместо 8.

Ответ №2:

Это позволяет присваивать баллы каждому элементу из другого запроса (именованные баллы) и вычислять общее количество баллов для каждой строки из столбца этого запроса1

введите описание изображения здесь

 let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content], #"Added Index" = Table.AddIndexColumn(Source, "Index", 0, 1), #"Split Column by Delimiter" = Table.ExpandListColumn(Table.TransformColumns(#"Added Index", {{"Column1", Splitter.SplitTextByDelimiter(";", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "Column1"), #"Merged Queries" = Table.NestedJoin(#"Split Column by Delimiter",{"Column1"},points,{"Column1"},"zzz",JoinKind.LeftOuter), #"Expanded Table6" = Table.ExpandTableColumn(#"Merged Queries", "zzz", {"Column2"}, {"Column2"}), #"Grouped Rows" = Table.Group(#"Expanded Table6", {"Index"}, {  {"Column1", each Text.Combine(List.Transform([Column1], Text.From), ";"), type text},  {"Points", each List.Sum([Column2]), type number} }), #"Removed Columns" = Table.RemoveColumns(#"Grouped Rows",{"Index"}) in #"Removed Columns"  

Комментарии:

1. спасибо за ответ, есть ли способ присвоить значение определенной строке? в случае ,если пользователь выберет клубнику, ему будет присвоено 2 балла. — позднее редактирование,страница только что перезагрузилась , как это будет переведено в dax?

2. Я ввел образец присвоения баллов каждому значению. Отсюда, если это не сработает, тогда лучше объясните запрос

3. Спасибо! есть ли способ перевести это в DAX?

4. Возможно решение DAX

5. @smpa01 звучит неплохо!