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

Страницы: 1 2 След.
POWER QUERY Как развернуть, нормализовать таблицу образцу
 
Добрый день коллеги, не получается решить казалось бы несложный вопрос.
Не могу привести таблицу к нужному виду.
Постоянно теряю или Номер и Статью, или дату (год месяц)

Прошу подсказать варианты решения, если возможно.
Свой код писать не стал, он бесполезен, не получается.
Изменено: lostandleft - 23.01.2023 11:15:46
Ошибка в расчете при использование СуммЕслиМН, Суммеслимн() считает не правильно
 
Здравствуйте коллеги!
Прикладываю фаил пример некорректного расчета по СуммЕслиМН, прошу прокомментировать данный некорректный расчет, и может быть подсказать как использовать замечательную функцию иначе?
В ВПР, ГПР, ПОИСКПОЗ присутствует дополнительный третий аргумент, который позволяет задать ТОЧНОСТЬ поиска, быть может что-то подобное есть и в СуммЕслиМН ?

Пример некорректного расчета ниже, по идее значение должно быть равно 0, но этого не происходит, выводит ложное значение 15 000 000

Как победить данное чудо?
Изменено: lostandleft - 18.10.2022 10:49:12
Dax Нарастающий итог с обнулением итогов после каждого нового значения
 
Добрый день коллеги!
Всех поздравляю с Новым годом!

Прошу по мере возможностей подсказать пути решения задачки:
Есть определённая таблица значений, выполняющая функцию некоторого условного выключателя, например - таблица окладов у кадровика, или таблица норм выдачи спецодежды у кладовщика.
Этот выключатель, может изменяться во времени. Задача - применять ту норму, которая по нему проходит до того момента пока не принята новая норма.
Например в январе норма была 5 морковок на человека, а в феврале норму хотим утвердить 6 морковок на человека, ну и так далее.
Так вот, хотелось бы получить таблицу с итогами которая бы отражала действие нормы в периоде, т.е. до февраля она бы была 5 а с февраля и дальше уже 6.

В голову приходят только мысли о том. что это можно сделать как-то нарастающим итогом, но ума не приложу как, ведь с каждой новой утвержденной нормой нарастающий итог будет увеличиваться. Т.е. я так понимаю что нужно какое-то обнуление на каждом шаге при установление новой нормы.
Таблица пример во вложении. Итоговый ожидаемый результат - также, помечено желтым цветом то, что хотелось бы видеть дополнительно.
Изменено: lostandleft - 14.01.2022 14:07:15
DAX-Нарастающий итог в вычисляемых столбцах, захватывающий предыдущее вычисление
 
Здравствуйте.
Прошу рассмотреть фаил вложения.
Задача: Реализовать в модели данных, через дакс полный вариант таблицы, посредством AddColumn. Чтобы таблица в модели данных была идентичной.
На вводе даны только 3 столбца данных, выделенных желтым цветом. На выходе необходимо построить таблицу аналогичную тому, что представлена в вычислении.
На формулах все выглядит достаточно просто, но вот как реализовать в дакс понять не могу. как оттолкнуться от вычисляемого значения предшествующего индекса.
Задача еще немного усложняется тем, что в реальных данных формируется виртуальная таблица, с аналогичными полями, желтые поля - это подгруженные значения в виртуальную таблицу из других источников через механизм ниже:
Код
ADDCOLUMNS(
    DISTINCT(
       SELECTCOLUMNS(INDEX, "Индексы", [Index]
   ), НоваяЖелткаяКолонка,
Sum(Приход[Количество])
Изменено: lostandleft - 04.10.2021 19:03:37
PowerQuery Подгрузка рейтинга с Кинопоиска
 
Здравствуйте господа!
Задался вопросом, можно ли подгрузить с кинопоиска рейтинг кино, или же мультиков.
Я часто пользуюсь рутором, для загрузки пиратских фильмо, думаю как и многие.
Но меня дико раздражает что в топ подборках отсутствует рейтинг фильмов от кинопоиска.
Возможно ли как-то приджоинить к таблицам рейтинг фильмов, чтобы понять, что посмотреть вечерком после трудовой недели?
Кто-нибудь что-нибудь подобное реализовывал?
Я нагуглил что у кинопоиска есть API, но что-то ума не приложу как это дело использовать в частном случае.
Может быть кто-то для себя что-нибудь подобное делал?
Изменено: lostandleft - 26.06.2021 12:47:21
Не работает Гиперссылка при ссылке на другой лист
 
Здравствуйте, что-то я немного в ступоре, хотел создать в книге лист с оглавлением и быстрым переходом по разделам, но функция гиперссылка не работает.
Стандартный вариант создания, через правую кнопку мышки, не функцией отрабатывает нормально.
Фаил во вложении, подскажите пожалуйста что я делаю не правильно.
Изменено: vikttur - 12.06.2021 12:04:43
Нумерация строк с помощью PowerQuery
 
Добрый день. Подскажите пожалуйста как сделать нумерацию строк внутри группы определенного столбца.
Пример во вложении.
Решение требуется через PQ.
Изменено: lostandleft - 19.05.2021 08:58:49
DAX модель данных, созданная связь не функционирует.
 
Добрый день!
Столкнулся со странным поведением модели данных.
дано 2 таблицы, Договоры, и Контрагенты, таблицы выгружены из сервера 1с через коннектор ATK
Создана модель данных, образована связь между договором и контрагентом.
Предполагается, в сводной таблице выбирать первую колонку из таблицы контрагент, и вторую колонку из таблицы договоры.
При попытке это сделать эксель зависает не на долго, почле чего становится понятно, что связь не образована.
Ручная выгрузка таблиц и проверка через ВПР проходит нормально. В таблице контрагент значения столбца уникальны.
Пожалуйста помогите разобраться с вопросом.
У Дакс в экселе какие-то ограничения на работу с данными?
DAX Как добавить дополнительные характеристики к сводной таблице НЕ СОЗДАВАЯ отдельный справочник характеристик
 
Здравствуйте!
Подскажите пожалуйста существует ли способ вывести дополнительные реквизиты из подчиненной таблицы, из связанной таблицы.
По структуре связей типа Снежинка.

Задача примерно такая, сформирована модель данных из десятка различных файлов от различных отделов.
Во всех файлах есть некоторые ключевые поля - например статьи затрат, которым присвоены коды.
Все файлы заполняют люди. По этим ключевым полям были подгружены справочники, далее были настроены связи между справочниками, и таблицами данных.
Все работает все отлично, написано с десяток различных мер. Все работает шустро.
Но возникла проблема, по ряду статей затрат нужна детализация из исходных файлов. Нужны дополнительные характеристики, описания пользователей, комментрии какие-то, и так далее.
Естественно на эти данные не было подгружено никаких справочников, это невозможно.
Сейчас стою перед выбором, что можно со всем этим сделать, как сделать так, чтобы все работало.
На ум приходит создать с помощью PQ отдельные справочники характеристик, и подгрузить их в отельный справочник, но по моему это какая-то глупая идея.
Придется обновлять одномоментно 2 запроса, на подгрузку данных в модель данных и потом еще обновлять запрос на создание справочника характеристик из тех же файлов.
Если бы был BI а не эксель, я бы создал виртуальные таблицы и объединил бы их через UNION и так далее....но Экселевский Дакс этого делать не умеет, не умеет создавать связи между виртуальными и реальными таблицами.
Пожалуйста подскажите, есть ли какой-то выход.
Переделывать модель данных, создавать отдельный Combine из всех таблиц в единую простыню, после этого заново переписывть все меры и настраивать все связи тоже не хотелось бы.
Прошу подсказать как выйти из ситуации с минимальными кровавыми потерями.
Многокритериевый отбор (фильтр по нескольким условиям вхождения), POWER_QUERY
 
Добрый день.
Прошу подсказать как сделать многоуровневую фильтрацию в PowerQuery
Не получается, и так и эдак пишу AND не получается, постоянно убирает все.
В конкретном примере, нужно оставить всю свеклу, потому что свеклы очень мало и она дефицит.
И оставить только Качественную морковь из магазина, плохую морковь из магазина нужно выкинуть (отфильтровать)
Плохую морковь и свеклу с дачи нужно оставить, чтобы разобраться так ли это на самом деле.
Итоговый результат который должен получиться - Зеленая заливка.
Изменено: lostandleft - 22.02.2021 17:21:40
Сумма итогов по мере с использованием ALL в отдельной строке, через DAX
 
Добрый день. Подскажите пожалуйста как побороть меру использующую ALL в отдельной строке.
Дано:
Справочник разделов,
Несколько различных таблиц данных, связанных через справочник разделов по ключевым полям. В реальной модели таких справочников с десяток (модель снежинка)
Нужно просчитать итоги по общей вычисляемой мере, и прописать эти итоги в строке таблицы, в заготовленном специально для этого в справочнике месте.
На примере это РАЗДЕЛ 4.
Фаил пример прилагаю.
PowerQuery не подходит, нужно реализовать на DAX
Обработка ошибок VBA. Не получается выполнить ошибочный код повторно и обработать ошибки
 
Здравствуйте!
Подскажите пожалуйста, столкнулся со сложностью отработать в цикле ошибочный запрос, который делается в поверквери.

Смысл логики:
1 - Запускаем средствами VBA запрос PowerQuery
2 - В случае выполнения кода нормально идем дальше.
3 - В случае если запрос не выполнился через кнопку Да/Нет запрашиваем повторную возможность выполнить запрос PowerQuery
4 - Если кнопку нажали Да - делаем повторный запрос PowerQuery ловим ошибку - Если кнопку нашали НЕТ очищаемся и выходим из бесконечного цикла.

Суть проблемы:
Первый раз ошибка обрабатывается нормально, мы переходим в обработчик ошибки, если нажимаем повторно ДА, то ошибочный запрос PQ не проходит повторно через обработчик ошибок и вываливается в Дебагер.

К чему все это мне нужно.
Мне надо запустить запрос PQ и выгрузить данные на сервер, в PQ запускается обработка которая выгружает данные подготовленные макросом через форму ввода на сервер.
Я точно знаю что сервер 100% времени доступен и надежен, однако могут быть иногда срывы коннекта по вине сети, и это единовременные короткие глюки. Сеть перезагружается автоматически если это происходит, но в течении минуты коннекта с сервером не будет и мне нужно не прерывая цикл и код сделать просто еще одну, может быть 2 или три попытки загрузки данных на сервер, даже если сеть недоступна сейчас через минуту все наладится.
Код приведен ниже, не получается решить проблему, пожалуйста подмогните.
Пробовал бесконечный For, теже яйца, только в профиль.
Первый ErrorHandl работает нормально, далее при повторной попытке дебагер также ругается на ошибку возникающую в запросе PQ
Код
' обработка запроса PQ
StartRefresh:
         On Error GoTo ErrorHandler3
         ' Insert code that might generate an error here
'В модуле запускаем обновление запросов PQ
Module1: Refresh

         ' Exit Sub
ErrorHandler3:
         ' Insert code to handle the error here

                                If Err.Number Then
                                    'Повторный запрос
                                    Dim answer1 As Integer
                                    answer1 = MsgBox("Повторная попытка?", vbQuestion + vbYesNo + vbDefaultButton2, "Повторная попытка?")
                                    If answer1 = vbYes Then
                                        GoTo StartRefresh
                                    Else
                                        GoTo Finish
                                    End If
                                End If
           Resume Next

Finish:
На всякий случай код, по которому происходит обновление запросов powerQuery
Код
Public Sub Refresh()

SnyatZaschituOdinParol

    For Each objConnection In ThisWorkbook.Connections
        'Get current background-refresh value
        bBackground = objConnection.OLEDBConnection.BackgroundQuery
        'Temporarily disable background-refresh
        objConnection.OLEDBConnection.BackgroundQuery = False
        'Refresh this connection
        objConnection.Refresh
        'Set background-refresh value back to original value
        objConnection.OLEDBConnection.BackgroundQuery = bBackground
    Next

    'MsgBox "Finished refreshing all data connections"

PostavitZaschituOdinParol
'UserForm1.Show vbModel

End Sub
DAX, РешениеЧерезМеру, Отфильтровать результат вычислений по параметрам заданным в таблице.
 
Здравствуйте, помогите пожалуйста отфильтровать меру "нарастающий итог", не получается что-то.
В моих мерах используется ALL(ТаблицаДат) что бы я не писал в фильтрах после этого, какиебы даты не ставил ничего не получается.
ALL все съедает.
Нужно отфильтровать результаты, показать только те даты, которые я задаю в параметрах, все остальное показывать не нужно.
PowerBi тип данных, единицы измерения в таблицах по типу типа данных ячейки Экселя
 
Здравствуйте Господа,
Подскажите пожалуйста возможно ли в Pbi задать тип данных подобно тому, как мы это привыкли делать в экселе.
Чтобы подобно тому, как в каждой ячейке в экселе, так и в Pbi для каждой меры, был свой тип данных, заданный пользователем.
Метры, литры, тонны, штуки, килограммы на дециметры, мегаватты на часы и так далее.
Изменено: lostandleft - 22.07.2020 09:45:10
Программное отключение/включение надсроек в Excel
 
Добрый день. Подскажите пожалуйста, может быть у кого-нибудь есть пример макроса по включению отключению определенных надстроек в эксель.
Суть проблемы. Скачал надстройку Оракл, MySQL for EXCEL надстройка огонь, все работает отлично, с БД коннект идет, данные и загружаются и выгружаются все супер. С ее помощью очень просто решить вопрос взаимодействия excell и Pbi, да и вообще совместной работы с разных рабочих мест над одними данными.
Одна только проблема, перестала работать кнопка "Обновить все запросы" во всех книгах, при активированной надстройке от Оракл.
Если надстройку отключать, то проблем нет, кнопка "ОбновитьВсе" активна, если надстройку включать, кнопка обновить все становится не активной снова.

В голову пришла мысль, возможно ли программно как-то включать и выключать надстройку. Может быть у кого-то есть опыт похожий? Может быть можете поделиться макросом, или что-то порекомендовать на этот счет.
Изменено: lostandleft - 16.07.2020 13:00:55
Power BI - получение данных из модели данных книги эксель, систематическое обновление данных в PBi из модели данных Экселя
 
Добрый день!
Сделал в BI красивый отчет на основе данных книги эксель.
Базовая Книга эксель - разветвленный очень загруженный объект, книга очень сильно параметризирована, в книге более 20 запросов PQ к 5 различным совершенно не связанным файлам, и более чем к 20 так или иначе связанным между собой.

Для иморта данных в PBi был использован механизм иморта через меню (File->Import->PQ,PP,PV), я надеялся получить доступ напрямую к подготовленной сформированной модели данных, чтобы  в дальнейшем по ней строить красивые отчеты в PBi.
предполагалось, что я и дальше буду вести эту книгу эксель, так как в ней уже все подготовлено и более менее понятно для меня.

В результате получилось, что в PBi я сделал первые свои даш борды, потратил много времени на это дело, в принципе мне понравилось что получилось, но потребовалось обновить модель данных в эксель, я сделал это, и к своему удивлению обнаружил, что новые таблицы, которые появились в Dax в модели Экселя, внутри файла, не перекочевали в PBi.

Хотел уточнить, нет ли какого-нибудь способа вести одновременно и Pbi и Excel не дублируя вообще все данных в 2х файлах.

По-моему это как-то слегка неразумно писать одинаковые меры, формировать одинаковые модели данных, перекидывать все запросы написанные на PQ в Pbi, повторюсь их более 20, и все это дело перенести без сбоев задача мягко говоря непростая, к тому-же куча параметрированных таблиц, в которых работают и подстановки в запросах PQ, и замена значений на те данные, которые есть в отдельных таблицах, есть таблицы с пересчетными коэффициентами подменяющими количества в исходных данных загружаемых из 1c и так далее...

Все это перенести в PBi из экселя равносильно тому, чтобы все это сделать заного. Но, даже если сделать это, как работать в дальнейшем? Неужели постоянно нужно дублировать все запросы, все меры, и в Pbi и в эксель?
Нет ли какого-нибудь способа загрузить в Pbi данные только из итоговой, готовой модели данных экселя, и какого-нибудь пусти дальнейшей синхронизации, если в моем экселевском файле что-то изменится, чтобы это тоже появилось в модели данных которая формирована в Pbi
Изменено: lostandleft - 26.06.2020 07:13:08
PowerBI Slicer Дат - Отображение только того периода, который существует в связанной таблице
 
Добрый день.
Решил попробовать что такое Pbi и чем от отличается от экселя.
Нашел интересную функцию импорта данных из экселевских книг.
Возникла проблема, который ранее в экселе я не встречал.
В существующей модели данных есть таблица дат, таблица справочник, и таблица данных.
Таблицы связаны между собой.
Я создал слайсер, в который поместил Иерархию из таблицы дат. Иерархия подразумевает год и месяц.
В силу того, что таблица дат используется для самых разных таблиц в модели данных. Она очень сильно "Раздута"
Период в ней начинается с 2016 года и заканчивается в 2032.
Таблица значений представлена датами и значениями по этим датам за 2019 и 2020 год.

Очень странно то, что в срезе, отображаются вообще все даты за весь период, вне зависимости от того, присутствуют ли данные в таблице значений, или нет.
Можно ли каким-то образом в срезе данные отфильтровать, желательно автоматически таким образом, чтобы они соответствовали только тем датам, которые представлены в связанной таблице, созданной на активном рабочем экране.
При этом сам фильтр в слайсере работает корректно, т.е. когда выбираешь те даты, которые есть в таблице значений все отрабатывает нормально.
Я понимаю конечно, что это все на словах, не до конца понятно, и так далее.
Но может быть кто-то сталкивался с подобным поведением.

Есть ли иное решение, кроме как чтобы создавать новую таблицу дат, с новой иерархией под каждую таблицу данных. Ведь это как-то неправильно.
DAX - Задвоенные строки (столбцы) в результате работы Меры в сводной таблице
 
Здравствуйте.
Не до конца понимаю как работает фильтрация в мере.
Создал 2 меры, 2019 и 2020 год. По идеи эти меры должны считать сумму значений по столбцам за выделенные приоды.
Однако столкнулся с какой-то глупостью, таблица в результатах задваивает строки значениями, из несоответсвующего года.
Фаил пример во вложении.
PQ ListGenerate есть ли возможность прервать цикл, или создать лист определенных значений из сгенерированного списка
 
Добрый день.
Изучаю List.Generate
Вчера возникла необходимость подсчитать нарастающий итог, вернее даже не так, нужно было просто получить сумму ряда.
Решил создать ряд, а также нарастающие итоги по ряду с помощью ListGenerate.
Вот кусочек кода, сам фаил выкладывать смысла особого не вижу, он более 60 мегабайт.
Код
ComTotal = Table.AddColumn(Table.Buffer(#"Развернутый элемент Выбытие"), "ComTot", (OT)=>(
List.Generate(
()=>
[i=Number.From(List.Min(OT[Join][Value])  ) , total=OT[Join][Сумма]{0} , j=0, ost = total / OT[Выбытие][Сумма]{0} , OstTotal=total/OT[Выбытие][Сумма]{0}, maxT =0]   , 
each [i]<=Number.From(List.Max(OT[Join][Value]) ),
each [ 
i=[i]+1 , 
j = [j]+1, 
total=List.Sum({Number.From(OT[Join][Сумма]{j}) , Number.From([total])}) ,
ost = total/OT[Выбытие] ,
OstTotal=List.Sum({[OstTotal],[ost]}),
maxT =  if i=Number.From (List.Max(OT[Join][Value])) then (OstTotal) else 0],

each [ 
//ostT=[OstTotal],
//ost = [ost],
//maxT =  [
maxT//],
//i=Date.From([i]) ,
//Классификатор=OT[Классификатор] 
]


Весь этот код тормозит очень сильно, вернее даже не так, тормоза и зависание, и даже переполнение стека, начинается после того, как пробуем работать с результатом выданным list.generate.
По сути мне нужно было получить одно единственное значение Последний элемент ряда в переменной сгенерированной через ЛистГенерейт.
Вопрос, возможно ли как-то получить последний член ряда внутри самой функции?
Не с помощью обертки List.Last( List.Generate()) а именно, непосредственно внутри самой функции как получить последний элемент и оставить его записав в переменную не создавая записи на предыдущем шаге.
Код
List.Generate(
()=>
[i=0],
each [i]<=10,
each i
)

По сути как получить только значение 10 в сгенерированном списке, выкинув все остальное. Это возможно? List.Generate  позволяет хоть как-то контролировать результат? Можно ли прервать счетчик, либо получить значение только 5го-8го члена ряда, или последнего?
Изменено: lostandleft - 09.06.2020 07:08:10
DAX-POWER_PIVOT - Мера как вычисление других мер. Группировки строк в выводе результата меры, с визуально понятной логикой.
 
Здравствуйте.
Пожалуйста помогите составить хитрую меру, на основе модели данных.
Задача банальная, посчитать валовой доход от реализации товаров.
Есть оборот по реализации, есть расходы по реализации.
Необходимо посчитать мерой валовой доход, и вывести в красивой форме в таблице.
Созданы справочники, есть справочник групп, есть справочник подгрупп.

Задача в том, чтобы вывести данные по группе доходов в свернутом виде, без детализации по подгруппам, по сути их в итоговой таблице вообще нет!!! А заводить очень не хочется, у меня запрос PQ работает очень долго.

А детализацию по расходам нужно вывести напротив, детально.

Детализацию по валовому доходу вообще не нужна. Нужно просто указать что валовой доход составил Nную сумму за каждый месяц.
Пример, приближенный к моим реальным данным во вложении.

Проблема усугубляется тем, что похожих таблиц у меня очень много. И все их проводить запросом в PQ для формирования единой таблицы невозможно.
Т.е. отдельно просчитать валовой доход в PQ невозможно. Там тысячи строк. Все будет тормозить в геометрической прогрессии.

Более понятное изображение абсурдности Машинной логики на фотографии ниже.
Изменено: lostandleft - 28.05.2020 20:14:01
PowerQuery Расчет вариант расчета ввоза товара на склад по выполнению условия остатка, Получить промежуточный результат внутри вычисляемого столбца с учетом вычислений более ранних строк этого же столбца
 
Здравствуйте.
Помогите пожалуйста рассчитать 2 колонки в PowerQuery, и если, возможно, помогите оптимизировать код, который был написан ранее.
Вцелом все колонки кроме последних 2х рассчитал.
Не получается посчитать именно ввоз и остаток, не получается сделать выключатель ввоза, аналогично тому, как это реализовано на формулах.
Также, пожалуйста, если возможно, подскажите как оптимизировать алгоритм расчета накопительных итогов, при больших объемах данных все очень сильно тормозит, и это ОЧЕНЬ мягко говоря.

Если перефразировать, то проблема у меня в том, чтобы ссылаться на вычисление своего собственного столбца на шаг ранее, как это реализовано на формулах в стандартном виде рассчета.
Не пойму как это реализовать, упираюсь в циклическую ссылку. Не пойму как взять сумму вычисляемого столбца, на строчку выше, в конкретном случае, если добавить столбец ввоз, то на сам же столбец, на все строки кроме последней.
Изменено: lostandleft - 25.05.2020 19:48:53
Dax - Текстовое сообщение, как результат вычисления меры
 
Здравствуйте,
Пожалуйста подскажите, есть ли возможность через меру организовать текстовый вывод сообщения.
Задача, есть ячейки в глобальной огромной таблице. В отчете, который нужно передать по инстанциям, в графах результат, помимо вычислений имеются и текстовые поля. С Вычислениями худо-бедно разобрался, все считает, с Вашей помощью, но необходимо дополнитель таблицу комментариями. например существует поле Дата, или поле Название Отдела. По стандарту отчета они должны быть в том же столбце что и показатель.
В таблице есть ключевое Поле определенного содержания, и дополнительный столбец содержащий текст, необходимый к выводу
Необходимо чтобы мера выводила определенное сообщение из нужного столбца.
Пример прилагается, выше все описано несколько сумбурно, но в примере, думаю, что найдете ясность.
Изменено: lostandleft - 21.05.2020 11:21:27 (обновил фаил)
POWER QUERY производительность NestedJoin, убыстрение
 
Здравствуйте господа.
Учусь, и стараюсь постичь Дзен, на форуме часто видел мысли о том, что производительность Join - слабая, есть более быстрые варианты в некторых случаях, и определенных вариантах кода, какие-то варианты могут работать быстрее чем NestedJoin или Join.
Например был ткнут носом тут:

В связи с вышеизложенными тезисами, использовав фаил из темы САМЫЙ_БЫСТРЫЙ_ВПР

Наваял несколько вариантов кода, и примерно замерил производительность.
Это, пока что весь мой багаж знаний, быть может Мастера смогут добавить еще варианты:
Итак, по результатам Чемпион - стандартный NestedJoin, при этом я не заметил существенной разницы, да и вообще никакой не заметил, в сравнении с обычным Join. Быть может какие-то миллисекунды, которые я измерить не в состоянии. Поэтому для себя решил что там где удобнее Nested буду использовать его, где подойдет и обычный чтобы код короче был, будет он.
Код
let
    tabl1=Table.Buffer(Таблица1),
    tabl2=Table.Buffer(Таблица2),
    Источник = Table.NestedJoin(tabl1, {"Груз"}, tabl2, {"Груз"}, "tabl2", JoinKind.LeftOuter),
    #"Развернутый элемент Таблица2" = Table.ExpandTableColumn(Источник, "tabl2", {"Цена"}, {"Цена"})
in
    #"Развернутый элемент Таблица2"

Ну что же думаю, давайте ка я попробую багаж знаний, который слегла поднакопил за время, например хитрое использование Records
Код
let
    Источник = Table.Buffer(Таблица1),
    Таблица2Bf = Table.Buffer(Таблица2),
    #"Добавлен пользовательский объект" = Table.AddColumn(Источник, "NewTable", (OT)=>

( Table.NestedJoin(Table.FromRecords({OT}), {"Груз"}, 
  Таблица2Bf, {"Груз"}, "TMP", JoinKind.LeftOuter)[TMP]{0} ) [Цена]{0}

)
in
    #"Добавлен пользовательский объект"
Прогрузив все это дело я ужаснулся, на сколько это медленнее работает.
Ок думаю, я же знаю еще один вариант, научился делать выборку через функцию, давай -ка попробую вот так:
Код
let
    tabl1=Table.Buffer(Таблица1),
    tabl2=Table.Buffer(Таблица2),
    Источник = Table.AddColumn(tabl1, "Цена",  (OT)=>
Table.SelectRows(tabl2, (IT)=>IT[Груз]=OT[Груз]){0}[Цена]
)
in
    Источник
Ок, это работает быстрее, однако ни в какие меры не идет с обычным первым вариантом.

Ну думаю, ладно, работать с таблицами долго, и муторно, видимо требуется больше вычислительных мощностей, давайте попробуем сделать объединение через лист. Найдем позицию в списке в одном столбце, и передадим номер строки этой позиции для выборки из другого столбца. Почему-бы и нет. Выглядит круто, работать должно быстро...наверное
Код
let
    Источник = Table.Buffer(Таблица1),
    Таблица2Bf = Table.Buffer(Таблица2),
    #"Добавлен пользовательский объект" = Table.AddColumn(Table.Buffer(Источник), "NewTable", (OT)=>
List.Buffer(Таблица2Bf[Цена]){
List.PositionOf(Таблица2Bf[Груз], OT[Груз])
}
)
in
    #"Добавлен пользовательский объект"
Однако, оценив всю пеструшку, оказалось что как минимум необходимо, для оптимизации, обязательно добавить еще один Буффер в лист (не смотря на то, что таблица и так была помещена в буфер на шаг ранее!!!), без этого о производительности вообще можно только заикаться, без дополнительного буффера - это один из самых медленных вариантов.

Сижу думаю, блин, ну ведь это нереально, что за ерунда. Давай-ка я проверю  то, на сколько быстро будет работать просто поиск позиции в списке. Быть не можтет же быть что обычный поиск на соответствие позиции в List будет медленнее чем Join.
Код
let
    Источник = Table.Buffer(Таблица1),
    Таблица2Bf = Table.Buffer(Таблица2),
    #"Добавлен пользовательский объект" = Table.AddColumn(Table.Buffer(Источник), "NewTable", (OT)=>
List.Contains( List.Buffer(Таблица2Bf[Груз]), OT[Груз])
)
in
    #"Добавлен пользовательский объект"
Ну ... что из этого выйдет...эм....в общем гадать не будем. И тут Join процентов на 20 оказался быстрее!

Оказывается, быстрее заджойнить всю таблицу и развернуть нужное поле например со статусом СООТВЕТСТВУЕТ, вместо того, чтобы делать проверку через List.Contains.

Господа.
Прошу поделиться своим опытом, есть ли у кого-то способности, опыт, знания, для того. чтобы еще дополнительно убыстрить NestedJoin?
Например на буржуинском https://seddryck.wordpress.com/2018/03/22/improving-then-performance-when-merging-tables-with-the-power-query-m-language/
и вот тутhttps://blog.crossjoin.co.uk/2018/03/16/improving-the-performance-of-aggregation-after-a-merge-in-power-bi-and-excel-power-query-gettransform/
люди, если я правильно понял общий посыл как-то убыстряются в десятки раз.
Но к сожалению, у меня недостаточно знаний чтобы понять что именно там предлагается для оптимизации.
Может ли кто-нибудь из метров, из гуру, сделать такой код, который на нашем огромном примере покажет более высокую производительность чем стандартное решение "из коробки" ?
Изменено: lostandleft - 16.05.2020 16:17:11
Dax - Календарь дат, расчет в интервалах из таблицы дат, связь между таблицами данных и дат
 
Добрый день.
Не понимаю, опять Dax капризничает, делаю элементарные вещи, не понимаю почему без специфических мер, имея таблицу дат, сумма не считается по периодам.
Пожалуйста поясните если возможно.
ОТкрыл другую книгу,  совершенно другую, в ней точто также есть таблица дат, и таблица значений.
Таблица дат в шапке, таблица значений в значениях, все считается без специфических мер.
В этой таблице почему-то не считается, выводит общие остатки в колонках.
Почему, в чем причина?
Кто-то может пояснить?
Связь между таблицами ведь есть. Что я делают не так?
POWER QUERY - Создать функцию которая создает и удаляет столбцы по условию, Создать функцию создающую и удаляющую столбец по условию
 
Добрый день.
Тема навеяна ответами и вопросами из этой темы: Форум
Пожалуйста помогите создать функцию которая создает временный столбец, набирает в него значения построчно по условию, после чего удаляет исходные столбцы и переименовывает временный столбец в исходный.

Честно и усиленно пытался постичь исскуство дзен сам, но не получается.
Для меня масса нелогичных условий. Например почему я не могу передать в написанную функцию результат, а передаю исключительно саму функцию когда в 3м параметре записываю условия выборки для столбца.
Если же я передаю функцию внутрь другой функции для меня не понятно как получить результат и как его использовать внутри другой функции.

Также, более чем непонятно, почему я немогу использовать навзвание переменной (столбца) внутри функции и должен извращаться с
Код
Record.Field(_, "КакаяТоКолонка")
Этот вариант я нагуглил, но я его откровенно непонимаю, почему я немогу передать просто столбец. Буду признателен если кто-то это пояснит почему именно так строится синтаксис.
Целиком код функции ниже, а также запрос вызова еще ниже, если кому-то лень скачивать фаил примера.
Код
(TABLE as table, OLDCOLUMN as text, NEWCOLUMN as text, CONDITION as function)=>

let
    RESULT = 
Table.RenameColumns(
   Table.RemoveColumns(
         Table.AddColumn(TABLE, "TEMPColumn", each (if CONDITION=true then Record.Field(_, NEWCOLUMN) else Record.Field(_, OLDCOLUMN ))  ),
   {OLDCOLUMN, NEWCOLUMN}
   ),
{"TEMPColumn", OLDCOLUMN })
 
 
in
    RESULT

Тут код вызова:
Код
= ReplaceColumn(ИзмененТип,"Старый", "Новый", each([Новый]-[Старый] = 1))
Изменено: lostandleft - 23.03.2020 12:29:58
Оптимизация запроса PQ. Новый столбец и удаление старого, или построчная замена по условию?
 
Здравствуйте.
Каковы общие рекомендации по оптимизации кода PQ, что в общих случаях будет быстрее
какой код более оптимизирован, из имеющихся, тот который создает столбец, или тот который делает построчную замену?

Что на Ваш взгляд будет быстрее из следующих вариантов:

этот, Вариант с созданием колонки и записью в нее данных по условию,
Код
= Table.RenameColumns(
   Table.RemoveColumns(
      Table.AddColumn(
         Table.AddColumn(ISTO4NIK, "NewColumn", each "NewValue"),
      "TEMPColumn", each (if [NewColumn]<>null then [NewColumn] else [OldColumn])
      )
   {"OldColumn","NewColumn"}
   ),
{{"TEMPColumn", "OldColumn"}}) 

или, Вариант с построчной заменой по условию
Код
= Table.RemoveColumns(
   Table.ReplaceValue(
         Table.AddColumn(ISTO4NIK, "NewColumn", each "NewValue"),
   each [OldColumn], each (if [NewColumn]<>null then [NewColumn] else [OldColumn]), 
   Replacer.ReplaceValue,   {"OldColumn"}),
{"NewColumn"}
)
Изменено: lostandleft - 20.03.2020 16:54:57
DAX-POWER_PIVOT - Распределение значений в столбцах или строках сводной таблицы, в зависимости от результата вычислений других столбцов или строк
 
Здравствуйте!
Возник вопрос. Возможно ли с помощью Дах распределять расходы, и заполнять столбцы, строки, в зависимости от результата смежных вычислений:
Например:
Дана общая стоимость производства продукции в кондитерском баре. Количество произведенной продукции по маркам.
Распределение расходов по группам и по статьям, часть расходов (например на сырье), складывают стоимость выпущенных тортов напрямую, а часть расходов расходы, таких как зарплата персонала, ложатся косвенно, сверху, уже после выпуска продукции, учитывая различные, определенные правила.
Помимо этого есть расходы которые могут частично ложиться на продукцию сразу же, а могут распределяться и позже. Например элетроэнергия.
Предположим что кондитерский магазин использует несколько источников энергии, по ряду из них он платит по счетчикам, и может сразу же распределить киловатты и  суммы на каждый вид произведенного изделия, а также ежемесячно оплачивает абон. плату за использование провода линии электропередач управляющей компании.

Возможно ли все это просчитать в Dax PowerPivot, можно ли распределить расходы между продуктами, используя определенный критерий для каждого из показателей? или все это нужно делтать в первичной выборке в PowerQuery иди еще раньше до нее, в первичном файле загрузки?

Очень бы хотелось увидеть решение того, как можно было бы просчитать все это в Dax, я попробовал поковырять меры, по выделял объем производства, но что-то не особо эффективно. Опять моя мера созданная как попытка просчитать средневзевшенное по статьям, показывает нули.
Фаил, максимально приближенный к рабочим данным, а также пояснения в картинке ниже и в самом файле прилагаются. Надеюсь на помощь.
Реальный фаил состоит из примерно 45тысяч строк, с различными детализациями по статьям, с дополнительными уровнями группировок. Но общий смысл я думаю тут улавливается. И его обработка до момента подготовки к выводу в PowerQuery занимает около 40 минут. Очень не хотелось бы ковыряться с первичной.
Изменено: lostandleft - 16.03.2020 09:42:41
Power Query Как Cохранить и не потерять написанный Код запроса, не нажимая кнопку закрыть и загрузить
 
Подскажите пожалуйста, что-то я не догоню, каким образом можно сохранить изменения в запросе не нажимая кнопку "закрыть и загрузить" из макрорекодера.
Это столько времени сжирает, я хочу обновлять данные только тогда когда мне это реально нужно, часто бывает нужно вернутья быстро в рабочую книгу и внести исправления либо в таблицу, либо посмотреть названия столбцов либо еще что-то и каждый раз при возвращении в фаил даже с небольшими изменениями приходится тратить уйму времени на то, чтобы все прогрузилось, это не удобно.

Есть ли какой-нибудь способ просто вернуться в фаил при этом не потеряв те изменения в коде, которые были сделаны, но без обновления таблиц?
Изменено: lostandleft - 11.03.2020 18:09:04
PQ. Есть ли возможность в Table.Join использовать параметр сравнения как приблизительный?
 
Здравствуйте, пожалуйста дайте комментарии, есть ли возможность в Table.Join использовать параметр сравнения как приблизительный?
Например, чтобы было понятнее. Можно ли написать что-нибудь вроде:
Код
Переменная = 
Table.Join (
   ТаблИсточн1,
         {"Колонка1", "Колонка2", 
                     ("Колонка3" // или, если Колонка3=null, то любое значение (Join опускает параметр и ищет только по 2-ум
           ) },
   ТаблИсточн2, 
   {"Колонка5","Колонка6","Колонка7"})

Суть в чем, есть определенный запрос  с большим числом строк, данные вцелом однородные, и для большой точности объединения запросов мне нужно 3 параметра, однако есть часть строк, в которых третий параметр отсутсвует, при этом 2 предыдущих обязательно отъиграют, и мне этого достаточно чтобы связь была объединена. Но по части строк, нужно обязательно 3 совпадения по таблице Источнику1.
Как выйти из этой ситуации, 2 раза запрос делать не хотелось бы, сначала выбирая только совпадения по 3м столбцам, потом повторным запросом добавляя совпадения по 2м столбцам и применяя какие-то фильтры для отсеивания.
Есть ли другие решения?

Придумать документ сходу не могу, что-то в голову не приходит ничего, но в рабочей книге именно похожая ситуация.
Изменено: lostandleft - 11.03.2020 14:01:03
DAX Удельный вес от значения суммы конкретных строк
 
Добрый день.
Все пытаюсь побороть азы DAX но никак не могу понять логику работы фильтров. И взаимодействия строк с итогами.
Нужно в мере получить значение удельного веса каждой строки от значения конкретной строки, или суммы группы строк.
Представим себе что делаем ремонт. Каждая комната у нас ремонтируется разными подходами. Сначала окна, потом двери, потом покрытия. Общая стоимость комнаты определена в отдельной строчке. Нужно посчитать удельный вес стоимости каждой каждого ТМЦ, от цены комнаты, а также группы расходов от цены комнаты.
Для меня важно понять как поделить значение каждой строчки, на значение суммы выборки из других строк, все что не пробовал приводило либо к расчете 1, либо к 0.
Никак не могу победить фильтрацию, не понимаю  :cry:  
Страницы: 1 2 След.
Наверх