#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] ) )
что даст вам это
Если у вас есть такая таблица поиска
Комментарии:
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 звучит неплохо!