Страницы: 1
RSS
Сломалась обработка Power Query
 
Имеется макрос в excel которые вытягивает инфу из БД и потом все объединяет и рассчитывает. так вот по некоторым позициям пустые строки null вместо информации, хотя из БД вся информация подтягивается, но в конечном результате они в таблицу не попадают. Картинка
И сама таблица где берутся данные  Картинка
Сам код
Код
let     
    Источник = Table.NestedJoin(Remains_Sector, {"Dimensions_NumDT", "Dimensions_GoodyNum", "Dimensions_Identifier"}, income_SectorCostCalc, {"Номер ДТ", "№ товара спецификации", "Артикул"}, "income", JoinKind.LeftOuter),
    ExpandIncomeColumn = Table.ExpandTableColumn(Источник, "income", {"Отправитель", "Номер ДТ", "№ товара спецификации", "Код ТНВЭД", "Артикул", "Наименование товара", "Код ед.изм. кол-ва", "Марка товара", "Производитель", "Страна происхождения", "Дата декларации", "Вес брутто шт", "Вес нетто шт", "Фактурная стоимость в валюте шт","Валюта"}, {"Отправитель", "Номер ДТ", "№ товара спецификации", "Код ТНВЭД", "Артикул", "Наименование товара", "Код ед.изм. кол-ва", "Марка товара", "Производитель", "Страна происхождения", "Дата декларации", "Вес брутто шт", "Вес нетто шт", "Фактурная стоимость в валюте шт","Валюта"}),
    DeleteOtherColumn = Table.SelectColumns(ExpandIncomeColumn,{"Resources_Quantity", "Отправитель", "Номер ДТ", "№ товара спецификации", "Код ТНВЭД", "Артикул", "Наименование товара", "Код ед.изм. кол-ва", "Марка товара", "Производитель", "Страна происхождения", "Дата декларации", "Вес брутто шт", "Вес нетто шт", "Фактурная стоимость в валюте шт", "Валюта"}),
    RenameRemainsColumn = Table.RenameColumns(DeleteOtherColumn,{{"Resources_Quantity", "Остаток шт"}}),
    Remains = Table.TransformColumnTypes(RenameRemainsColumn,{{"Остаток шт", Int64.Type}}),

    OrderJoinRemains= Table.NestedJoin(Order, {"Товар", "ГТД"}, Remains , {"Артикул", "Номер ДТ"}, "remains", JoinKind.LeftOuter),
    ExpandRemains = Table.ExpandTableColumn(OrderJoinRemains, "remains", {"№ товара спецификации"}, {"№ товара спецификации"}),
    CountSpecification = Table.Group(ExpandRemains, {"Товар", "ГТД", "Количество", "Полных коробок", "Сгруппированные строки", "certificate.Код МНР", "certificate.Код#(lf)документа", "certificate.Номер документа", "certificate.Дата документа#(lf) (Для отказного письма)", "certificate.Дата нач. действия#(lf)(для Сертификата)", "certificate.Дата оконч. действия#(lf)(для Сертификата)"}, {{"КоличествоСпецификаций", each Table.RowCount(_), Int64.Type}}),
    JoinRemains2= Table.NestedJoin(CountSpecification, {"Товар", "ГТД"}, Remains, {"Артикул", "Номер ДТ"}, "remains", JoinKind.LeftOuter),
    MultySpecRowsFilter = Table.SelectRows(JoinRemains2, each ([КоличествоСпецификаций] <>1)),
    MultySpecRowGetQTY = Table.AddColumn(MultySpecRowsFilter, "GetQty", each GetQty([remains], [Количество], [Полных коробок])),
    MultySpecRowDeleteTempCol = Table.RemoveColumns(MultySpecRowGetQTY,{"remains", "Полных коробок"}),
    MultySpecRowExpand = Table.ExpandTableColumn(MultySpecRowDeleteTempCol, "GetQty", {"Отправитель", "Номер ДТ", "№ товара спецификации", "Код ТНВЭД", "Артикул", "Наименование товара", "Код ед.изм. кол-ва", "Марка товара", "Производитель", "Страна происхождения", "Вес брутто шт", "Вес нетто шт", "Фактурная стоимость в валюте шт","Валюта", "qty", "Полных коробок"}, {"Отправитель", "Номер ДТ", "№ товара спецификации", "Код ТНВЭД", "Артикул", "Наименование товара", "Код ед.изм. кол-ва", "Марка товара", "Производитель", "Страна происхождения", "Вес брутто шт", "Вес нетто шт", "Фактурная стоимость в валюте шт","Валюта", "qty", "Полных коробок"}),
    SingleSpecRowFilter = Table.SelectRows(JoinRemains2, each ([КоличествоСпецификаций] = 1)),
    SingleSpecRowExpand = Table.ExpandTableColumn(SingleSpecRowFilter, "remains", {"Остаток шт", "Отправитель", "Номер ДТ", "№ товара спецификации", "Код ТНВЭД", "Артикул", "Наименование товара", "Код ед.изм. кол-ва", "Марка товара", "Производитель", "Страна происхождения", "Вес брутто шт", "Вес нетто шт", "Фактурная стоимость в валюте шт", "Валюта"}, {"Остаток шт", "Отправитель", "Номер ДТ", "№ товара спецификации", "Код ТНВЭД", "Артикул", "Наименование товара", "Код ед.изм. кол-ва", "Марка товара", "Производитель", "Страна происхождения", "Вес брутто шт", "Вес нетто шт", "Фактурная стоимость в валюте шт", "Валюта"}),
    NullToZero = Table.ReplaceValue(SingleSpecRowExpand,null,0,Replacer.ReplaceValue,{"Товар", "Остаток шт", "Вес брутто шт", "Вес нетто шт", "Фактурная стоимость в валюте шт"}),
    SingleSpecRowGetQTY = Table.AddColumn(NullToZero, "qty", each if [#"Остаток шт"] < [Количество]
then [#"Остаток шт"] 
else [Количество]),
    CombineSingleAndMulty = Table.Combine({SingleSpecRowGetQTY , MultySpecRowExpand }),
    CalculateHalfBox = Table.AddColumn(CombineSingleAndMulty, "Частично занятых коробок", each if [Полных коробок] = 0 then 1 else 0),
    JoinAntidemping_list= Table.NestedJoin(CalculateHalfBox , {"Код ТНВЭД"}, antidemping_list, {"ТНВЭД"}, "antidemping_list", JoinKind.LeftOuter), 
    ExpandAntidemping_list = Table.ExpandTableColumn(JoinAntidemping_list, "antidemping_list", {"Код МНР"}, {"antidemping_list.Код МНР"}), 
    CalculateMNR = Table.AddColumn(ExpandAntidemping_list, "Код МНР в Астана-1", each if  
[antidemping_list.Код МНР] <> null 
and [certificate.Код МНР]<>null  
then [certificate.Код МНР]&";"& [antidemping_list.Код МНР] 
else if 
    [certificate.Код МНР]<>null 
and [antidemping_list.Код МНР] = null 
then [certificate.Код МНР] 
else if 
    [certificate.Код МНР]=null 
and [antidemping_list.Код МНР] <> null 
then [antidemping_list.Код МНР] 
else null),
    CalculateBrutto = Table.AddColumn(CalculateMNR, "Вес брутто", each Number.Round([qty]*[Вес брутто шт],2)),
    CalculateNetto = Table.AddColumn(CalculateBrutto, "Вес нетто", each Number.Round([qty]*[Вес нетто шт],2)),
    CalculateCost = Table.AddColumn(CalculateNetto, "Фактурная стоимость в валюте", each Number.Round([qty]*[Фактурная стоимость в валюте шт],2)),
    DeleteTempColumn = Table.RemoveColumns(CalculateCost,{"certificate.Код МНР", "antidemping_list.Код МНР", "Количество", "КоличествоСпецификаций", "Остаток шт", "Вес брутто шт", "Вес нетто шт", "Фактурная стоимость в валюте шт", "Артикул", "Номер ДТ"}), 
    DuplicateMass = Table.DuplicateColumn(DeleteTempColumn, "Вес нетто", "Копия Вес нетто"), 
    AddPackTypeCollum = Table.AddColumn(DuplicateMass, "Вид упаковки", each "ct"), 
    #"Add№Doc1" = Table.AddColumn(AddPackTypeCollum, "Номер документа 1", each null), 
    addCodeDoc1 = Table.AddColumn(#"Add№Doc1", "Код документа 1", each "04131"), 
    AddCurrentDate = Table.AddColumn(addCodeDoc1, "Дата документа 1", each DateTime.LocalNow()), 
    ChangeType = Table.TransformColumnTypes(AddCurrentDate,{{"Дата документа 1", type date}, {"Вес брутто", type number}, {"Копия Вес нетто", type number}, {"Фактурная стоимость в валюте", type number}, {"Вес нетто", type number}, {"Код ТНВЭД", type text}, {"№ товара спецификации", Int64.Type}, {"Код документа 1", type text}, {"Вид упаковки", type text}, {"Код МНР в Астана-1", type text}, {"Полных коробок", Int64.Type}, {"Частично занятых коробок", Int64.Type}, {"Товар", type text}, {"qty", Int64.Type}, {"ГТД", type text}, {"Валюта", type text}}), 
    ReplaceColumn = Table.ReorderColumns(ChangeType,{"Отправитель", "Наименование товара", "Код ТНВЭД", "Страна происхождения", "Валюта", "Фактурная стоимость в валюте", "Код МНР в Астана-1", "qty", "Код ед.изм. кол-ва", "Вес нетто", "Вес брутто", "Полных коробок", "Частично занятых коробок", "Вид упаковки", "Товар", "Производитель", "Марка товара", "№ товара спецификации", "ГТД", "Копия Вес нетто", "Код документа 1", "Номер документа 1", "Дата документа 1", "certificate.Код#(lf)документа", "certificate.Номер документа", "certificate.Дата документа#(lf) (Для отказного письма)", "certificate.Дата нач. действия#(lf)(для Сертификата)", "certificate.Дата оконч. действия#(lf)(для Сертификата)","Сгруппированные строки"}), 
    RenameColumn = Table.RenameColumns(ReplaceColumn,{{"Фактурная стоимость в валюте", "Фактурная стоимость"}, {"qty", "Количество товара"}, {"Код ед.изм. кол-ва", "Единица измерения количества товара"}, {"Вес нетто", "Вес нетто"}, {"Вес брутто", "Вес брутто"}, {"Полных коробок", "Количество мест"}, {"Частично занятых коробок", "Количество частично занятых мест"}, {"№ товара спецификации", "гр.40 (№ товара)"}, {"ГТД", "гр.40 (№ ДТ)"}, {"Копия Вес нетто", "гр.40 (масса нетто для списания)"}, {"certificate.Код#(lf)документа", "Код документа 2"}, {"certificate.Номер документа", "Номер документа 2"}, {"certificate.Дата документа#(lf) (Для отказного письма)", "Дата документа 2"}, {"certificate.Дата нач. действия#(lf)(для Сертификата)", "Дата нач. действия 2"}, {"certificate.Дата оконч. действия#(lf)(для Сертификата)", "Дата оконч. действия 2"}, {"Страна происхождения", "Страна происхождения товара"}, {"Товар", "Артикул"}}),
    #"Сортированные строки" = Table.Sort(RenameColumn,{{"Отправитель", Order.Ascending}, {"гр.40 (№ ДТ)", Order.Ascending}, {"гр.40 (№ товара)", Order.Ascending}}),
    #"Сгруппированные строки" = Table.Group(#"Сортированные строки", {"Артикул", "гр.40 (№ ДТ)"}, {{"Группа ГТД/АРТ", each _, type table [Отправитель=text, Наименование товара=text, Код ТНВЭД=nullable text, Страна происхождения товара=text, Валюта=nullable text, Фактурная стоимость=nullable number, #"Код МНР в Астана-1"=nullable text, Количество товара=nullable number, Единица измерения количества товара=number, Вес нетто=nullable number, Вес брутто=nullable number, Количество мест=nullable number, Количество частично занятых мест=nullable number, Вид упаковки=nullable text, Артикул=nullable text, Производитель=text, Марка товара=text, #"гр.40 (№ товара)"=nullable number, #"гр.40 (№ ДТ)"=nullable text, #"гр.40 (масса нетто для списания)"=nullable number, Код документа 1=nullable text, Номер документа 1=any, Дата документа 1=nullable date, Код документа 2=nullable text, Номер документа 2=nullable text, Дата документа 2=nullable date, Дата нач. действия 2=nullable date, Дата оконч. действия 2=nullable date, Сгруппированные строки=table]}}),
    addIndex = Table.AddIndexColumn(#"Сгруппированные строки", "Индекс", 1, 7, Int64.Type),
    addDateTime = Table.AddColumn(addIndex, "Дата обновления", each DateTime.ToText(DateTime.LocalNow(), [Format="yyMMddHHmm"])),
    addStringID = Table.AddColumn(addDateTime, "ID строки", each Number.ToText(10000+[Индекс],"00000") & [Дата обновления]),
    #"Измененный тип" = Table.TransformColumnTypes(addStringID,{{"ID строки", type text}}),
    #"Другие удаленные столбцы" = Table.SelectColumns(#"Измененный тип",{"Группа ГТД/АРТ", "ID строки"}),
    #"Развернутый элемент Группа ГТД/АРТ" = Table.ExpandTableColumn(#"Другие удаленные столбцы", "Группа ГТД/АРТ", {"Отправитель", "Наименование товара", "Код ТНВЭД", "Страна происхождения товара", "Валюта", "Фактурная стоимость", "Код МНР в Астана-1", "Количество товара", "Единица измерения количества товара", "Вес нетто", "Вес брутто", "Количество мест", "Количество частично занятых мест", "Вид упаковки", "Артикул", "Производитель", "Марка товара", "гр.40 (№ товара)", "гр.40 (№ ДТ)", "гр.40 (масса нетто для списания)", "Код документа 1", "Номер документа 1", "Дата документа 1", "Код документа 2", "Номер документа 2", "Дата документа 2", "Дата нач. действия 2", "Дата оконч. действия 2", "Сгруппированные строки"}, {"Отправитель", "Наименование товара", "Код ТНВЭД", "Страна происхождения товара", "Валюта", "Фактурная стоимость", "Код МНР в Астана-1", "Количество товара", "Единица измерения количества товара", "Вес нетто", "Вес брутто", "Количество мест", "Количество частично занятых мест", "Вид упаковки", "Артикул", "Производитель", "Марка товара", "гр.40 (№ товара)", "гр.40 (№ ДТ)", "гр.40 (масса нетто для списания)", "Код документа 1", "Номер документа 1", "Дата документа 1", "Код документа 2", "Номер документа 2", "Дата документа 2", "Дата нач. действия 2", "Дата оконч. действия 2", "Сгруппированные строки"}),
    #"Развернутый элемент Сгруппированные строки" = Table.ExpandTableColumn(#"Развернутый элемент Группа ГТД/АРТ", "Сгруппированные строки", {"Количество", "Номер SSCC"}, {"Количество", "Номер SSCC"}),
    #"Переименованные столбцы" = Table.RenameColumns(#"Развернутый элемент Сгруппированные строки",{{"Количество", "Количество в коробке"}}) 
in 
    #"Переименованные столбцы"
 
Цитата
kiritogae написал:
Имеется макрос в excel
Думаю лучше написать "запрос Power Query"
Думаю без исходных данных вряд ли кто-то будет разбираться
Изменено: Msi2102 - 13.03.2025 11:51:04
 
В каждом поле (столбце) ожидаются данные одного типа, например, текстовые. Данные других типов в этом же поле (например, числовые) воспринимаются как null. Возможно, это тот случай - проверьте и приведите к одному типу
 
- При расчетах в Power Query, если одно из значений в формуле является null, весь результат становится null, это логично
- И в вашем макросе есть несколько операций объединения таблиц (Table.NestedJoin) и расчетов, где могут возникать null-значения, из чего следует проблема, как я понял.
- Пустые строки (null) из БД корректно подтягиваются, но теряются при дальнейшей обработке?

Если так, то попробуйте в Power Query Editor заменить null-значения через вкладку Transform/Home ----> в поле "Value to find" введите null, а в "Replace with" введите подходящее значение (например, 0 для числовых полей).

Есть ещё варианты с введением оператора коалесценции + проверка, что включённые в код условные выражения правильно обрабатывают null, но замена значений через редактор по идее должна оказаться проще.
One tap - one kill
 
Может не совсем по теме, но не знаю где задать этот вопрос.

Добрый  день. Есть у меня такая проблема, каждый день импортирую файлы через  Power Querry с сайта cmegroup.com, а именно вот с этой страницы - https://www.cmegroup.com/tools-i....teaser1
Данные  по первым шести опционным контрактам на основные валюты, таблицу с  импортом прикрепил к сообщению. Все хорошо, но при попытке обновить  данные в таблице на следующий день получаю ошибку с названием столбца. Что  ни делал - никак, прошу помочь. Спасибо.
Изменено: strangerr92 - 14.03.2025 10:22:50
Страницы: 1
Читают тему
Наверх