Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 3 4 5 6 След.
power query развернуть каталог вида: category, id, parentId в отдельные столбцы с подкатегориями, xml файл со списком родительских и вложенных категорий в одном столбце связанных по id/parentid разнести по столбцам по вложенности
 
Посмотрел, что в образце исходника оставил... Ну, в общем понятно, структура столбцов в полном фиде другая. A функция вызывается по индексу столбца,  а не по имени. в общем к другому столбцу привязывался вместо  categoryId.  С самой функцией пока не разбирался, но ошибку уже исправил :). Спасибо!
power query развернуть каталог вида: category, id, parentId в отдельные столбцы с подкатегориями, xml файл со списком родительских и вложенных категорий в одном столбце связанных по id/parentid разнести по столбцам по вложенности
 
Ну, товары то я обрезал в xml,  там больше полумиллиона строк. А у себя на полном запустил, это нужно в xml эти id оставить. Cейчас опят занят, чуть позже попробую оставить в xml с ошибкой. cat id 215. И, по моему один уровень категорий выпал. 4 получалось, а здесь 3. Но, гораздо шустрее  отработало, чем мое собственное творчество. Нужно мне с функцией разобраться, там допилю, надеюсь..  
power query развернуть каталог вида: category, id, parentId в отдельные столбцы с подкатегориями, xml файл со списком родительских и вложенных категорий в одном столбце связанных по id/parentid разнести по столбцам по вложенности
 
Спасибо. Разберусь, как работает, возможно интересно.  А для понимания как PQ обрабатывать так и вовсе отлично, на конкретном примере.
Но, пока результат явно не тот, что ожидался  - веб камера в детские товары попала, а мышь в "спорт и отдых"...
power query развернуть каталог вида: category, id, parentId в отдельные столбцы с подкатегориями, xml файл со списком родительских и вложенных категорий в одном столбце связанных по id/parentid разнести по столбцам по вложенности
 
Разобрался вроде. Трансформация работает как нужно. Это, когда я пытаюсь посмотреть итог,  Table.FromRecords  на основе первой записи обрезает остальные столбцы. А вот как выводить все, что-то пока не понятно..  
power query развернуть каталог вида: category, id, parentId в отдельные столбцы с подкатегориями, xml файл со списком родительских и вложенных категорий в одном столбце связанных по id/parentid разнести по столбцам по вложенности
 
Может и к лучшему, что никто не ответил, времени заниматься не было совершенно, работает и ладно. В фильтрации конечно ошибся, но в данном наборе не принципиально, и без нее работает. Но, как время появилось, решил немного поразбираться с PQ , написал функцию  для разворачивания дерева  по списку записей(таблицу с добавлением индекса  - в записи). функция с рекурсией
Код
    indx = Table.AddIndexColumn(table0, "Indx", 0, 1),
    id_list = List.Buffer( indx[id] ),
    recs = List.Buffer(Table.ToRecords(indx)),    
fn = (rec, spot, i) => 
    [new_spot = List.PositionOf( id_list, recs{spot}[parentId]),
    new_rec = Record.AddField(rec, "Tree"& Text.From(i), (try recs{new_spot} otherwise rec)[Tree]),
    new_i = List.Accumulate({i}, 1, (state, current) => state + current) ,
    result = if new_spot = -1 then new_rec else @fn(new_rec, new_spot, new_i)]
[result],
Однако, может кто-нибудь объяснить, почему в конструкции с добавлением столбца рекурсия прекрасно работает и результат в записях верный, со всеми новыми записями(столбцами) подкатегорий,
Код
recstree = Table.AddColumn( indx, "parentTree", (x) => fn(x, x[Indx], 0 )),
а, если пытаюсь вместо добавления столбца, просто трансформировать список записей, рекурсия не срабатывает и добавляется только одно поле?
Код
 recstree = List.Transform( recs, (x) => fn(x, x[Indx], 0 ))
Изменено: Sergey Stoyanov - 12.07.2024 10:54:00
power query развернуть каталог вида: category, id, parentId в отдельные столбцы с подкатегориями, xml файл со списком родительских и вложенных категорий в одном столбце связанных по id/parentid разнести по столбцам по вложенности
 
Доброго дня,
Возникла задача пересобрать получаемые из интернета данные в виде XML в читаемую таблицу.  В xml 2 таблицы - в одной дерево каталога в виде названия,id, и родительского id, во второй товары  c id категории.  В итоге хочется получить таблицу с товарами и столбцами всех подкатегорий. Т.е нужно развернуть список категорий c id/parent id в отдельные столбцы и добавить к товару.  Возникла мысль о Power Query. Но, так как я с PQ практически не сталкиваюсь и особо его не знаю, решать пришлось в лоб, через объединение. А потом еще сдвигать короткие цепочки. Да и число подкатегорий экспериментально только получил.  Решение как бы есть, но мне не особо нравиться.  Может что-нибудь более изящное кто предложит? А то самому знаний/опыта не хватает. Заодно и поучиться. Подобных задач что-то не нашел, может формулирую не правильно.
Мое решение ниже и в приложенном файле. Пример xml обрезал по товарам до приемлемого и сохранил в текстовом, В оригинале в источнике ссылка api
Код
let
    Источник = Xml.Tables(File.Contents("C:\...\sampleFeed.txt")){0}[shop],
    category = Источник{0}[categories]{0}[category],
    headrename = Table.RenameColumns(category,{{"Element:Text", "Tree"}, {"Attribute:id", "id"}, {"Attribute:parentId", "parentId"}}),
    listforfilter = List.Buffer(headrename[parentId]),
    tree_last = Table.SelectRows(headrename, each ([id] <> listforfilter)),
    joinL1 = Table.NestedJoin(tree_last,{"parentId"},headrename,{"id"},"t1",JoinKind.LeftOuter),
    #"treelast-1" = Table.ExpandTableColumn(joinL1, "t1", {"Tree", "parentId"}, {"t1.Tree", "t1.parentId"}),
    joinL2 = Table.NestedJoin(#"treelast-1",{"t1.parentId"},headrename,{"id"},"t1",JoinKind.LeftOuter),
    #"treelast-2" = Table.ExpandTableColumn(joinL2, "t1", {"Tree", "parentId"}, {"t1.Tree.1", "t1.parentId.1"}),
    joinL3 = Table.NestedJoin(#"treelast-2",{"t1.parentId.1"},headrename,{"id"},"t1",JoinKind.LeftOuter),
    #"treelast-3" = Table.ExpandTableColumn(joinL3, "t1", {"Tree"}, {"t1.Tree.2"}),
    recs_temp = Table.ToRecords(Table.ReorderColumns(#"treelast-3",{"t1.Tree.2", "t1.Tree.1", "t1.Tree", "Tree", "id", "parentId", "t1.parentId", "t1.parentId.1"})),
    recs_tree = List.Transform(recs_temp, each 
        if _[t1.Tree]=null then _&[t1.Tree.2=_[Tree], Tree = null] 
        else 
            if _[t1.Tree.1]=null then _&[t1.Tree.2=_[t1.Tree], t1.Tree.1=_[Tree], t1.Tree=null, Tree = null] 
            else 
                if _[t1.Tree.2]=null then _&[t1.Tree.2=_[t1.Tree.1], t1.Tree.1=_[t1.Tree], t1.Tree=_[Tree], Tree = null] 
                else _),
    table_tree = Table.FromRecords(recs_tree),
    offer = Источник{0}[offers]{0}[offer],
    join_offer_tree = Table.NestedJoin(offer,{"categoryId"},table_tree,{"id"},"temp",JoinKind.LeftOuter),
    result = Table.ExpandTableColumn(join_offer_tree, "temp", {"t1.Tree.2", "t1.Tree.1", "t1.Tree", "Tree"}, {"temp.t1.Tree.2", "temp.t1.Tree.1", "temp.t1.Tree", "temp.Tree"})
in
    result
Изменено: Sergey Stoyanov - 21.06.2024 16:34:00
Как рассчитать процент отклонения положительного от отрицательного значения
 
Под вечер с трудом  воспринимаю. А если табличку с условиями для начала сделать? Потом условия то формулами не проблема прописать. Например так, только в корректности не уверен, чет голова плохо варит.
план   положительный, факт положительный ф/п
план   положительный, факт отрицательный -ф/п-100%-ф/п-1
план   отрицательный, факт положительный(ф-п)/-п1-ф/п
план   отрицательный, факт отрицательный, но >= 2 планов ф/п
план   отрицательный, факт отрицательный, меньше 2 планов (ф-2п)/-п-100%1-ф/п
Объединенные ячейки в формуле с массивом
 
Использование ПРОСМОТР интересное, взял на заметку, не приходило в голову. Но, для меня, например,  там нюанс не в делении на 0, это почти стандартное использование просмотра.  А вот массив для поиска, в сочетании с делением,.дающий заполнение пустых... В конкретном случае - от 1 до 6 ти  находит 1, дальше 7, потому как ищет в массиве   1, игнор(ошибка), игнор...., 7, игнор, игнор и т.д. . . Если раньше Просмотр с делением на 0 не использовали, F9, по моему,  не сильно поможет разобраться.  
Извлечение числа из текста с определенным словом
 
Тему я как то так вижу здесь: Извлечение числа из текста в ячейке с фиксированной длинной текста.  
Извлечение числа из текста с определенным словом
 
Если в конце всегда кубометры и кг, то бишь 2 и 3 символа после пробела, я бы как то так сделал.
=ЕСЛИ((ЛЕВБ(A2;5)="Объем")+ (ЛЕВБ(A2;5)="Масса");--ЗАМЕНИТЬ(ЛЕВСИМВ(A2;ДЛСТР(A2)-3);1;6;);"")
Изменено: Sergey Stoyanov - 13.02.2024 10:30:44
Как вывести n-ое количество символа по формуле?
 
https://support.microsoft.com/ru-ru/office/%D0%BF%D0%BE%D0%B2%D1%82%D0%BE%D1%80-%D1%84%D1%83%D0%BD%D...
Найти значение в диапазоне, Найти значение в диапазоне
 
Вроде так работает
=ЕСЛИ(ИНДЕКС(Таблица1[До];ПОИСКПОЗ(Таблица2[[#Эта строка];[Номер]];Таблица1[От]))<Таблица2[[#Эта строка];[Номер]];"Нет такого";ИНДЕКС(Таблица1[Номерклатура];ПОИСКПОЗ(Таблица2[[#Эта строка];[Номер]];Таблица1[От])))
я бы кусочек формулы поименовал =ПОИСКПОЗ(Таблица2[[#Эта строка];[Номер]];Таблица1[От]) . В файле сделал пример.
Соединить данные 2 столбцов
 
Я вот этим пользуюсь, с этого же форума. Выделяете ваши телефоны и запускаете это макрос.  Лишние переводы строки дадут пустые  строки, нужно бы добавить удаление. Или проверку  - пропускать разделители идущие подряд. Но пишу я крайне медленно, а потому не буду заморачиваться:).  В принципе, можно и без макроса,  с помощью фильтра потом пустые удалить.
Код
Sub TextOnRowsInRange()
  'Автор: webley
'Редактор: JayBhagavan
'Сайт: http://planetaexcel.ru/forum/index.php?PAGE_NAME=read&amp;FID=1&amp;TID=64813&amp;TITLE_...
  
Dim cl As Range, rng As Range, rngTmp As Range
Dim strDelim$, strTmp$
Dim arr() As String
Dim i&, n&, j&, k&

   Application.ScreenUpdating = False 
    'strDelim = InputBox("Введите символ-разделитель")
    'If strDelim = "перенос" Then strDelim = Chr(10)
    ' If strDelim = "" Then End
    strDelim = Chr(10)
    ' strDelim = " "
       
    If TypeName(Selection) = "Range" Then
        Set rng = Selection
        n = rng.Rows.Count
        For i = n To 1 Step -1
            With rng(i, 1)
                strTmp = .Value & strDelim
                arr = Split(strTmp, strDelim)
                j = UBound(arr, 1) - 1
                If j > 0 Then
                    .EntireRow.Copy
                    .Offset(1).Resize(j).EntireRow.Insert shift:=xlDown ', CopyOrigin:=xlFormatFromLeftOrAbove

                    Set rngTmp = .Resize(j + 1)
                    For k = 0 To j
                        rngTmp(k + 1, 1).Value = arr(k)
                    Next k
                End If
            End With
        Next i
    End If
   Application.ScreenUpdating = True
End Sub

Формула, заменяющая сводную
 
tbl - это имя умной таблицы. По примеру AlienSx преобразовал вашу исходную.  Это не принципиально, просто нагляднее где условие проверяется. Можно вместо tbl[***] задать соответствующие диапазоны из нужных столбцов.
Ложь - потому, что в этом году по выбранной статье присутствуют все 3 бизнеса. У вас условие обратное. Оно выполняется только в  2015-м для   последней статьи- там стоит "Истина". Если хотите наоборот, вместо =0, напишите >0. Если нужно что -то другое писать,  - ну тогда подобная конструкция = если(счетеслимн* счетеслимн*счетеслимн; "текст если 3 бизнеса";"текст если меньше 3-х")
Формула, заменяющая сводную
 
Ну, наверное, условие наличия статьи в году  по каждому из бизнесов нужно перемножить. Если какого то не будет, результат получится 0...
как то так
=СЧЁТЕСЛИМН(tbl[Статья];$J14;tbl[Год]; K$13;tbl[Бизнес];"m")*СЧЁТЕСЛИМН(tbl[Статья];$J14;tbl[Год]; K$13;tbl[Бизнес];"f")*СЧЁТЕСЛИМН(tbl[Статья];$J14;tbl[Год]; K$13;tbl[Бизнес];"r")=0
ЕСЛИМН выдает ошибку, ЕСЛИМН выдает ошибку
 
Так заверните вашу формулу в обработчик ошибок. Поиск не находит чего нужно и выдает ошибку. У меня эксель старый, еслимн нет. Но, по сути, если саму формулу не менять  
=ЕСЛИОШИБКА(ваша формула; "ЛОЖЬ")
Формула для заполнения ячейки с поиском следующей, Формула для заполнения ячейки с поиском следующей
 
очень странно тема названа, но рискну предположить, что вам нужно что-то типа =индекс(2:2;;поискпоз("замена"; 9:9;0)) .  
Нарастающий итог, Нарастающий итог - проблема для первой ячейки
 
В исходном файле в формуле циклическая ссылка в столбце H, у вас даты из второго столбца просто в этот диапазон не попали. Ну и ячейки с множителями там не закреплены - не понятно от чего считать хотите, когда даты в указанный диапазон попадают. Наверняка проще можно. Делить на 12 логично дней в году,   365+(ОСТАТ(B6;4)>0)  на случай високосного.  но еще логичней просто брать количество дней в месяце ДЕНЬ(КОНМЕСЯЦА(B6;0)). А собственно нарастающий выше прописали варианты..я бы выбрал +E6*(СТОЛБЕЦ()>5) или то же самое +ЕСЛИ(СТОЛБЕЦ()>5;E6)
Пересечения интервалов времени, Необходимо определить вхождение фиксированного интервала времени в расчетный.
 
Ну, я б предложил проверять пересечение каждой из границ интервала отдыха. и вычесть условие когда пересекаются обе - чтобы задвоения не было. Что то типа
=СУММПРОИЗВ((G14<$C$3:$C$12)*((G14+F15)>$C$3:$C$12)+(G14<$B$3:$B$12)*((G14+F15)>$B$3:$B$12)-(G14<$B$3:$B$12)*((G14+F15)>$C$3:$C$12);$C$3:$C$12-$B$3:$B$12)+G14+F15

Но, при смене суток, нужно что-то дополнительно придумывать. Можно, например, перерывы +1 день записать и формат ячеек сменить
VBA. Цикл по определенным значениям
 
что значит ясно мыслящий программист. я б при такой нужде костыли изобретал типа
Step 2
If i = 9 Then i = i + 1
If i > 10 Then i = i + 3
Растянуть формулу с заданным шагом, формула для Excel 2003
 
Пример писал не глядя файл, не очень, со временем было. Не правильно задачу понял. Вам в каждой строке формулы, нужно диапазон на 10 смещать. Ну собственно немного изменить нужно было... В приложении..  
Растянуть формулу с заданным шагом, формула для Excel 2003
 
насколько понял, вам диапазон суммирования/условия нужно смещать с шагом, а не формулу. =смещение() справиться, что -нибудь типа 10*ЦЕЛОЕ(СТРОКА()/10). Не люблю я летучие формулы, но сейчас изобретать, чего то  из индекса некогда. Хотя... там не сложно просто громоздко.
Скажем в имена ТекущийДиапазон = Индекс(весьдиапазон;10*ЦЕЛОЕ(СТРОКА()/10)+1): Индекс(весьдиапазон;10*ЦЕЛОЕ(СТРОКА()/10)+10)
Подтянуть значение по критерию НЕ равно частичному вхождению условия, Подтянуть название и дату РК, минуя незначимую РК
 
замените ваше условие на такое
*ЕСЛИОШИБКА(НЕ(ПОИСК("исх";Таблица1[Рекламная кампания]));1)
формула массива
Изменено: Sergey Stoyanov - 26.10.2023 16:43:54
Сравнение и выборка отличающихся данных.
 
можно еще так, наверное
=--(СУММПРОИЗВ(Ч($B2&F2=$B$2:$B$29&F$2:F$29))=1)
Слияние текстовых данных, сборка уникальных строк и подсчет их
 
А, сводная, в классическом виде, не то, что нужно делает? Изменение настроек сводной, если руками лень, наверное, можно макрорекордером тоже в макрос :).
Выгрузка через PQ из папки с несколькими архивами zip, файла с одинаковым названием и формированием файла с единой шапкой
 
Не туда написал
Изменено: Sergey Stoyanov - 24.10.2023 10:25:56
Плавающий диапазон суммирования, Как в формуле указать ссылку на ячейку
 
без двойных ссылок можно
=СУММ(W8:ИНДЕКС(W:W; G26))
поиск частичного совпадения данных в excel, ПОИСК СОВПАДЕНИЯ ЗНАЧЕНИЙ В EXCEL
 
Прошу прощения, давно не пользовался подстановкой формулой , попутал когда писал. Исправил в сообщении  формулу как нужно - поиск вхождения из массива $E$2:$E$22 в А11
Изменено: Sergey Stoyanov - 18.10.2023 17:05:38
поиск частичного совпадения данных в excel, ПОИСК СОВПАДЕНИЯ ЗНАЧЕНИЙ В EXCEL
 
=ПРОСМОТР(;-ПОИСК($E$2:$E$22;$A11);$F$2:$F$22) , для 11-ой строки

Но, формула по справочнику в 20к строк просто подвиснет, имхо
Для вашей задачи Power Query хорошо подойдет. Вот я себе этот код приспосабливал. Источник справочника поправить. Ну и разобраться. На лету оно конечно подставлять не будет, это нужно жать  "обновить".
Код
let
    Источник = Excel.CurrentWorkbook(){[Name="Данные"]}[Content],
    #"Строки с примененным фильтром" = Table.SelectRows(Источник, each ([Дата] <> null)),
    #"Измененный тип" = Table.TransformColumnTypes(#"Строки с примененным фильтром",{{"Дата", type date}}),
    categories_rec = [ src  = Excel.Workbook(File.Contents("C:\Справочник.xlsx"), null, true){[Item="Вендор",Kind="Table"]}[Data],
    sort = Table.Sort ( src, ( s, c ) => Value.Compare ( Text.Length ( s[Сравнение] ), Text.Length ( c[Сравнение] ) ) ),
    recs = List.Buffer ( Table.ToRecords ( sort ) ) ][recs],
    Подстановка =  Table.AddColumn (#"Измененный тип", "Вендор0", each    
      List.Last ( List.Select ( categories_rec, ( x ) => Text.Contains ( [Товар], x[Сравнение], Comparer.OrdinalIgnoreCase ) ) )[Вендоры]? )
in
    Подстановка
Изменено: Sergey Stoyanov - 18.10.2023 17:02:01
Условное форматирование по группам
 
Понять бы зачем такая расцветка в миксе?  Если хотите видеть градацию при фильтрации группы- можно же сделать условное форматирование только для видимых - для цветовой шкалы выбрать формулу и вписать туда промежуточные итоги с номерами 105 -мин, 101 - среднее и 104 макс.  
Изменено: Sergey Stoyanov - 17.10.2023 16:29:20
Страницы: 1 2 3 4 5 6 След.
Loading...