Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
[Power Query] Обработка составного текста в ячейке с выводом в две колонны
 
PooHkrd, спасибо за пояснения.

Справочник под рукой, может не так спросил - не была понятна необходимость появления функции.

Всем спасибо!
[Power Query] Обработка составного текста в ячейке с выводом в две колонны
 
Андрей VG, обалдеть, спасибо!

Уже несколько раз замечал такое оформление вызова:
Код
#"Expanded {0}1"
Это ведь просто стиль названия?

И еще вопрос: понял все, кроме:
Код
{"Approve", each let res = toRecord(_) in if res = null then null else Record.RemoveFields(res, "Name")}
Вы заменяете данные в "Approve", но зачем res проверяется на null еще раз (это же есть в самой функции?!)? Делает
Код
Record.RemoveFields(res, "Name")
что-то особенное?
[Power Query] Обработка составного текста в ячейке с выводом в две колонны
 
PooHkrd, понял, спасибо большое! Ненужные проверки тоже обнаружил и убрал поутру.

Я через таблицы делал, так как там появляются столбцы, а как со списком - не представляю.
Если у вас будет свободное время, в целях моего обучения, сможете более "корректный" вариант написать?
[Power Query] Обработка составного текста в ячейке с выводом в две колонны
 
PooHkrd, но разве это не тоже самое - только команды совмещены, из:
Код
Name = Text.Combine(#"Filtered Rows1"[Name],", "),
Email = Text.Combine(#"Filtered Rows1"[Email],"; "),
Table = #table({"Name", "Email"}, {{Name, Email}})
получилось:
Код
Table = #table({"Name", "Email"}, {{Text.Combine(#"Filtered Rows1"[Name],", "), Text.Combine(#"Filtered Rows1"[Email],"; ")}})

После вашего:
Цитата
PooHkrd написал:
Вы же вместо того чтобы работать с данными в ячейке
думал, что можно сделать что-то вроде:
Код
1. Text.Split(data,"///")
2. разбить на разные списки (имя, почта, 0/1)
3. отфильтровать ненужное (убрать из списков "1")
4. создать списки с разделителем имен и почты 
И все без генерации таблицы.

Или оптимизация скорости как раз в этом (совмещение команд) и заключается?
[Power Query] Обработка составного текста в ячейке с выводом в две колонны
 
PooHkrd, огромное спасибо, большой шаг!

код на данный момент:
Код
(data as text) =>

let
    #"Converted to Table" = Table.FromList(Text.Split(data,"///"), Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    #"Inserted Text Before Delimiter" = Table.AddColumn(#"Converted to Table", "Name", each Text.BeforeDelimiter([Column1], "("), type text),
    #"Inserted Text Between Delimiters" = Table.AddColumn(#"Inserted Text Before Delimiter", "Email", each Text.BetweenDelimiters([Column1], "(", ")"), type text),
    #"Inserted Text Between Delimiters1" = Table.AddColumn(#"Inserted Text Between Delimiters", "Text Between Delimiters", each Text.BetweenDelimiters([Column1], "[", "]"), type text),
    #"Filtered Rows1" = Table.SelectRows(#"Inserted Text Between Delimiters1", each ([Text Between Delimiters] = "0")),
    Name = try Text.Combine(#"Filtered Rows1"[Name],", ") otherwise null,
    Email = try Text.Combine(#"Filtered Rows1"[Email],"; ") otherwise null,
    Table = #table({"Name", "Email"}, {{Name, Email}})
in
    Table

Возникла проблема: если ячейка в основном запросе пуста (null), тогда все падает. Решил добавлением проверки при вызове функции:
Код
#"Invoked Custom Function" = Table.AddColumn(#"Changed Type", "rev", each if [Review] = null then null else fnProcess2([Review])),

Вопрос: является ли написанная функция оптимальной в плане скорости?
Изменено: Maximilian - 5 Июн 2019 01:49:18
[Power Query] Обработка составного текста в ячейке с выводом в две колонны
 
PooHkrd, функция обработки:
Код
(data as text) =>

let
    #"Split Column by Delimiter" = Table.ExpandListColumn(Table.TransformColumns(data, {{data, Splitter.SplitTextByDelimiter("///", QuoteStyle.None), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), data),
    #"Changed Type1" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{data, type text}}),
    #"Inserted Text Before Delimiter" = Table.AddColumn(#"Changed Type1", "Name", each Text.BeforeDelimiter(data, "("), type text),
    #"Inserted Text Between Delimiters" = Table.AddColumn(#"Inserted Text Before Delimiter", "Email", each Text.BetweenDelimiters(data, "(", ")"), type text),
    #"Inserted Text Between Delimiters1" = Table.AddColumn(#"Inserted Text Between Delimiters", "Done", each Text.BetweenDelimiters(data, "[", "]"), type text),
    #"Filtered Rows1" = Table.SelectRows(#"Inserted Text Between Delimiters1", each ([Done] = "0")),
    #"Removed Other Columns1" = Table.SelectColumns(#"Filtered Rows1",{"Name", "Email"})
in
    #"Removed Other Columns1"

И сам обработка вводной таблицы с вызовом функции:
Код
let
    Source = Excel.CurrentWorkbook(){[Name="input"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Title", type text}, {"Review", type text}, {"Approve", type text}}),
    #"Invoked Custom Function" = Table.AddColumn(#"Changed Type", "Rev", each fnProcess([Review])),
    #"Invoked Custom Function1" = Table.AddColumn(#"Invoked Custom Function", "App", each fnProcess([Approve]))
in
    #"Invoked Custom Function1"
[Power Query] Обработка составного текста в ячейке с выводом в две колонны
 
Доброго времени суток, Планетяне!

В 2х колоннах имеются составные данные (разделены через "///"), например:
Код
person 1(person1@aaa.com)[1]///person 2(person2@aaa.com)[0]///person 3(person3@aaa.com)[0]

Каждая ячейка колонны разбивается на две части (новые колонны), и в каждой остаются данные при условии, что в квадратных скобках стоит [0]:
NameEmail
person 2, person 3 person2@aaa.com; person3@aaa.com

Написал функцию относительно произвольной ячейки  - все работает (кроме создания списка), а при вызове функции ко всей колонне результат содержит ошибку:
Код
Expression.Error: We cannot convert the value "person 1(person1@aaa..." to type Table.

Помогите, пожалуйста, с исправлением функции.
Заранее спасибо!
Изменено: Maximilian - 4 Июн 2019 23:29:14
[PowerPivot, Pivot table] Срез для Сводной с посчитанными данными в ПоверПивот (план, факт), Созданы 2 дополнительные колонны в ПоверПивот. Не работает Срез в построенной Сводной
 
Vladimir Chebykin,огромное спасибо! То, что и хотел, а "до сегодня" подправлял сам, получилось также. Но не могу понять, почему значения в срезах "затемнены", хотя и работают исправно.

Интереса ради: добавил коэффициенты эффективности в дополнительную колонну:
Код
=RELATED(eff[koef])
Но как избавится от нее, добавив значения/ссылку на другую таблицу в меры plan_eff и fact_eff? И есть ли в этом смысл в плане производительности (в таблице будет около 20 тысяч строк)?
[PowerPivot, Pivot table] Срез для Сводной с посчитанными данными в ПоверПивот (план, факт), Созданы 2 дополнительные колонны в ПоверПивот. Не работает Срез в построенной Сводной
 
Vladimir Chebykin, спасибо, почти оно.

По пунктам:
1. да, именно от не равномерного деления и пытался избавится, но не знал как. Т.е. лучше вернуть Календарь? А что будет тогда с мерой?

2. писал русские план и факт латиницей
[PowerPivot, Pivot table] Срез для Сводной с посчитанными данными в ПоверПивот (план, факт), Созданы 2 дополнительные колонны в ПоверПивот. Не работает Срез в построенной Сводной
 
Спасибо за ваши ответы, полностью переосмыслил необходимость Календаря. Думал через него строить график со значениями для каждого календарного дня, чтобы не было растянутых соединений, если ближайшие точки, например, через неделю. Но скорее всего это добавит лишних хлопот.

Свел в PQ все даты в одну колонку. Но теперь вопрос: как сделать так, чтобы на графике кривая ФАКТ шла до сегодняшнего дня (нарастающая/кумулятивная), а ПЛАН до последней даты? При этом нулевые значения для обоих кривых не показывались.

(возможно стоит поменять тему (описание убрать) на: [PowerPivot, Pivot table] График по сводной: план до текущего числа, факт до конца)
[PowerPivot, Pivot table] Срез для Сводной с посчитанными данными в ПоверПивот (план, факт), Созданы 2 дополнительные колонны в ПоверПивот. Не работает Срез в построенной Сводной
 
Доброго времени суток!

Создал в ПоверПивот таблицу дат "Календарь (Calendar)". Там сделал 2 колонны, в которых идет подсчет количества дат из основной таблицы "Table1" (обработанной в Power Query) меньших, чем дата в колонне Календаря:

Код
plan=if('Calendar'[Date]>max(Table1[plan]);BLANK();CALCULATE(count(Table1[plan]);FILTER(Table1;Table1[plan]<='Calendar'[Date])))
fakt=if('Calendar'[Date]>TODAY();BLANK();CALCULATE(count(Table1[fakt]);FILTER(Table1;Table1[fakt]<='Calendar'[Date])))

Результат в колоннах считается верно, как и в построенной Сводной тоже. Однако Сводная не реагирует на Срез по заголовкам Table1.
Думаю, проблема в формуле, и, может, есть смысл создать меры в основной таблице, но тут я бессилен.

Таблицы (Calendar и Table1) связать не получится, т.к. в Table1 имеются 2 колонны с числами (plan, fakt), да и объединять их тоже нельзя из-за последующей обработки.

Заранее спасибо!
Страницы: 1
Наверх