Страницы: Пред. 1 2 3 4 5 6 7 8 9 10 11 12 След.
RSS
PowerPivot, PowerQuery, PowerBI
 
Цитата
alpopo написал:
густой лес
ну, скорее "лесопарковая зона", как говаривал Язов (министр обороны СССР), посетив один из показательных ракетных дивизионов с комплексами С300 в Подмосковье году этак в 1989.
а за неделю до этого был действительно густой лес :)
OfficeProPlus 365x64
Win64forWorkstation
 
Всех с наступившим Новым годом!
Информация с паблика в ВК Финансовый анализ в Excel и Power BI

Смотрите, что я нашел на сайте Microsoft:
краткая инструкция... да нет - КНИГА ПО POWER BI НА РУССКОМ ЯЗЫКЕ

Приятного чтения.
 
В языке М PQ есть оператор each и each _
Интересует синтаксис и примеры использования, и внятное описание этого синтаксиса
 
alpopo, открывайте спецификацию языка и ознакомьтесь с разделом 9.7 Если останутся вопросы - задавайте.
Вот еще могу поделиться пояснениями с примерами, которые мне как-то давал местный корифей Андрей VG, думаю он будет не против:

Цитата
Всё это в принципе хорошо описано в спецификации языка, в отличии от того, какие параметры должны быть у пользовательских функций, которые можно передавать как параметр функциям Power Query. Рассмотрим упрощённый пример.

Код
let
    // определим список
    myList = {1..10},
    /* То очём вы пишите each _ это аналог VBA For Each _ In, где внутри некоторая функция, которая 
        делает нечто с _
        Большое количество функций в Power Query - это по существу функции итераторы. Но, самое главное,
        по описанию, например, List.Transfrom, у которой второй аргумент transform as function,
        это использование той внутренней функции цикла For Each
        Рассмотрим определение функции
    */
    add1 = (x) => x + 1,
    // Рассмотрим то применение, которое указываете вы. Вызов функции с передачей значения шага итерации
    test1 = List.Transform(myList, each add1(_)),
    // Но, ведь в определении List.Transform сказано о функции, а не об её испльзовании, применим
    test2 = List.Transform(myList, add1),
    /* То есть как вы понимаете, в данном случае достаточно передать List.Transform имя функции,
       а вызов её для вычисления и передачу параметра итерации Power Query сделает за вас. Думаю, вы понимаете, 
       что add1 = [I]чего то там[/I], это просто присвоение имени тому, что что находится справа от знака равенства.
       Но тогда вопрос - а зачем вообще использовать именованную функцию? Что мешает её использовать анонимно,
       передав как во втором тесте только правую часть. Именно это и делается в тех решениях.
    */
    test3 = List.Transform(myList, (x) => x + 1)
in
    test2

Это объяснение у меня породило неплохое понимание что и как, а главное зачем! Надеюсь вам поможет.

И чтоб два раза не вставать хочу увековечить пост от Alexey_Spb с подробным объяснением как обращаться к элементам списков, записей и таблиц в сокращенной форме. Очень популярно расписано, такое нельзя потерять.
Надо бы сюда еще некоторые чудесные посты Андрея VG и Максима Зеленского наковырять и попросить модераторов закрепить первым сообщением в теме (если такое возможно). Типа FAQ для начинающих.
Изменено: PooHkrd - 25.01.2019 14:43:59
Вот горшок пустой, он предмет простой...
 
PooHkrd, Спасибо, изучаю. Немного поправил спецификация языка
В свете приведенного выше кода попытался перевести п9.7 спецификации:

9.7 Упрощенные выражения

Выражение each - синтаксическая стенография для объявления неименованных функций, берущих единственный формальный параметр, названный _ (подчеркивание).

each-expression: each each-expression-body

each-expression-body: тело функции

Упрощенные выражения наиболее часто используются, чтобы улучшить удобочитаемость вызова неименованной функции.

Например, следующие пары объявлений семантически эквивалентны:

each _ + 1

(_) => _ + 1

each [A]

(_) => _[A]

Таблица.SelectRows (aTable, each [Weight] > 12)

Таблица.SelectRows (aTable, (_) => _[Weight] > 12)

Weight - Вес

Из таблицы aTable выделить строки, в которых значение в столбце [Weight] > 12

[Weight] > 12 – неименованная функция.

Изменено: alpopo - 27.01.2019 17:52:40
 
О, отличная тема.. только почему она в курилке, а не прикреплена в вопросах по экселю? Чем она хуже темы формулистов?
Цитата

alpopo написал:
Выражение each - синтаксическая стенография для объявления неименованных функций, берущих единственный формальный параметр, названный _ (подчеркивание).
Хочу подчеркнуть одно отличие each от классческого определения функции, о котором писал ранее.

each, в случае, если аргументом является запись (record) дополнительно позволяет внутри тела функции обращаться к элементам этой записи без указания самой записи. Это очень наглядно видно в each, которым добавляют значения нового столбца.
Код
Table.AddColumn(Source, "NewColumn", each [Столбец1] + [Столбец2])
Table.AddColumn в каждом вызове функции-аргумента, передает ей запись-строку (в таблице строки являются записями), из которой оператором [Столбец] получаются значения полей этой записи, фактически, содержимое ячеек. Эта запись идентична:
Код
Table.AddColumn(Source, "NewColumn", each [Столбец1] + [Столбец2])

В случае (_ as any) такое "сокращение" тоже прокатывает, а вот в случае (AnyName as any)  уже нет. Хотя функция делает то же самое и так же работает) - это уже особенность интерпретатора М:
Код
Table.AddColumn(Source, "NewColumn", each [Столбец1] + [Столбец2]) // Работает
Table.AddColumn(Source, "NewColumn", (_ as any) => [Столбец1] + [Столбец2]) // Работает
Table.AddColumn(Source, "NewColumn", (Row as any) => Row[Столбец1] + Row[Столбец2]) // Работает
Table.AddColumn(Source, "NewColumn", (Row as any) => [Столбец1] + [Столбец2]) // An error occurred in the ‘’ query. 
Вот такие пироги :-)

Кстати, комбинация each и классики может быть полезна во вложенных запросах для избежания "перезаписи" аргумента. Пример дурной, но хорошо иллюстрирует суть явления:
Код
Table.AddColumn(Source, "NewColumn", each List.Select(List, each _ = [Столбец])) // Текущий элемент из внешнего each (строка таблицы) уже не видна
Table.AddColumn(Source, "NewColumn", (Row) => List.Select(SomeList, each _ = Row[Столбец])) // Норм работает
Table.AddColumn(Source, "NewColumn", each Tmp = [Столбец] in List.Select(SomeList, each _ = Tmp)) // Ну или так.
Изменено: Alexey_Spb - 30.01.2019 13:44:26
 
Цитата
Alexey_Spb написал:
Эта запись идентична:
Table.AddColumn(Source, "NewColumn", each [Столбец1] + [Столбец2])
Подозреваю что здесь вы хотели другую формулу написать. А вообще спасибо за лик.без. вы за последний месяц накидали много очень полезной инфы. Правда, когда вы начинаете её подавать товарищам еще толком не научившимся лепить запросы кнопками, я себе очень живо представляю их мутный взгляд.  8-0  :D
Вот горшок пустой, он предмет простой...
 
Alexey_Spb,
Цитата
Alexey_Spb написал:
О, отличная тема.. только почему она в курилке, а не прикреплена в вопросах по экселю? Чем она хуже темы формулистов?
Вам однажды ответили: (2.6. Один вопрос - одна тема. Не следует в открываемой теме обозначать и задавать сразу несколько вопросов)
А если вопросов нет, а только одни сомнения?
На форуме, насколько я понял, задается вопрос и ожидается получение решения проблемы (на прилагаемом файле).
А поговорить? Обсудить (не получить решение) различные аспекты нескольких вопросов одной темы?
Вначале было СЛОВО.
Иногда надо не решение, а совет или взгляд (опыт) другого (учителя) гуру на ту или другую проблему.
Нужен толчек (слово) блуждающему в потемках, чтобы уж самому выбраться к свету.
А тут мы "курим" (оффтопим), не решаем проблемы, а обмениваемся опытом, что тоже приводит к нежданным, на первый взгляд, результатам.
Помогаем друг другу выбраться из грязи на ровную дорогу.
Изменено: alpopo - 01.02.2019 11:36:50
 
Вот думаю небольшую презентацию на работе провести для коллег и руководителей по поводу тройки PowerPivot, PowerQuery, PowerBI, но не могу набрать списка преимуществ, о которых рассказывать. Пока определил только парочку:

1. ВПР-рить большие данные через PQ и собирать данные из выгрузок, где суммарно более 1 млн строк - это для сотрудников.
2. Создать единый центр отчетности на основе BI - разрозненные файлики с отчетами по разным направлениям привести сначала к нормальному виду, а затем в одну систему на дашборды одного проекта BI - это для руководителей. Правда придется проделать кучу работы.

По поводу всего остального типа сбора данных из разных файлов и составления отформатированных отчетов можно не рассказывать, людям избалованными частными макросами, где вся работа делается за них, а тут еще и на кнопочки нажимать много надо)))
Прямые подлючения к базам, чтобы миновать файлы Excel и всякие репорт-генераторы тоже речи нет, софт слишком экзотический, не поддерживается PQ

Может кто еще подскажет, какие преимущества у тройки PowerPivot, PowerQuery, PowerBI?
 
Цитата
alpopo написал:
А тут мы "курим" (оффтопим), не решаем проблемы, а обмениваемся опытом, что тоже приводит к нежданным, на первый взгляд, результатам.
Из опыта работы в большой компании могу сказать что до трети вопросов решается в курилке, а не на совещаниях.
Так что аналогия, вполне уместная.
И чтоб 2 раза не вставать, Максим Зеленский вывалил в группе FB PowerBIForever чудесную новость: Услышан глас народа по теме Power Query - cache shared nodes что означает что в Excel 365 и Excel 2019 запросы PQ при многократном обращении к одному и тому же источнику не будут каждый раз считывать его по-новой. Дело за малым, переехать на эти релизы Экселя.
Вот горшок пустой, он предмет простой...
 
Djinn,
Цитата
Djinn написал:
Может кто еще подскажет, какие преимущества у тройки PowerPivot, PowerQuery, PowerBI?
Посмотрите здесь Гиперссылки не по тексту, а на ресурсы иНЕТ
Изменено: alpopo - 01.02.2019 15:03:05
 
Еще раз про each _
Код
 let
   функц01 = each _+ 5+4+10,
   функц011 = each 5+4+10,
   Результ = функц01(7),
   Результ11 = функц011(7),
   Результ1 = функц01(7),
   функц02 = (a1,a2,a3,a4) => a1+a2+a3+a4,
   функц03 = (a1,a2,a3,a4) => 1+2+3+4,
   Результ2 = функц02(5,5,10,10),  // примет аргументы 5+5+10+10 (a1+a2+a3+a4)
   Результ3 = функц03(10,10,10,10) // примет аргументы 1+2+3+4, а не (10,10,10,10)
in
//   Результ // =26, поскольку первый аргумент = 7 (_)
   Результ11 //сложила все (4+5+10)=19, без заданного (_) (7) первого параметра
// т.е. если хочу добавить потом в свою функцию один параметр использую в ее определении (_)

Код
let    Источник = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
   функц01=(a1)=> a1[Столбец1] + a1[Столбец2],
   ПользСт1 = Table.AddColumn(Источник, "Ст1", each [Столбец1]+[Столбец2]+[Столбец3]+[Столбец4]),
   ПользСт2 = Table.AddColumn(ПользСт1, "Ст2", (_) => [Столбец3]+[Столбец4]),
   ПользСт3 = Table.AddColumn(ПользСт2, "Ст3", (_) => _[Столбец3]+_[Столбец4]),
   ПользСт4 = Table.AddColumn(ПользСт3, "Ст4", (b1,b2,b3) => b1[Столбец1]+b1[Столбец3]),
   ПользСт5 = Table.AddColumn(ПользСт4, "Ст5", (b1,b2,b3) => b2[Столбец1]+b2[Столбец3]), //Error
   ПользСт6 = Table.AddColumn(ПользСт5, "Ст6", (a1,a2,a3,a4,a5) => 5 + 6 + 7),
   ПользСт7 = Table.AddColumn(ПользСт6, "Ст7", функц01)
in
   ПользСт7
//здесь (_) один аргумент из любого количества столбцов в строке (в записи таблицы)?
// а не любое количество аргументов из строки таблицы
// причем в случае с each можно не использовать
Изменено: alpopo - 01.02.2019 21:20:12
 
Цитата
Alexey_Spb написал:
(_ as any) => [Столбец1] +
В чем смысл частого употребления as any?
 
alpopo, это дисциплинирует кодописца. Вообще указание типа для аргумента функции можно и опустить. Но если его задавать, то так можно контролировать пользователя, который пытается передавать в функцию значение не правильного типа, тогда транслятор будет выдавать ошибку.
А еще хочу добавить ссылку на статью с замечательной функцией List.Dates.HolidaysRU от Бондаренко Ивана, которая позволяет формировать производственный календарь в PQ и PBI
Изменено: PooHkrd - 04.02.2019 13:05:27
Вот горшок пустой, он предмет простой...
 
Цитата
alpopo написал: В чем смысл частого употребления as any?
Здесь это было написано чтобы показать разницу между вариантами.
А если говорить в целом, то PooHkrd довольно подробно все написал.
 
Доброго времени суток!
На амазоне появилось второе издание итальянцев DAX ,однако на сайте у них еще нет SQLBI_книги
Книга уже реально существует?
И если кто заказывал в Россию неужели это минимум месяц ждать?
На пирсоне тоже еще нет
 
Цитата
Lari написал:
Книга уже реально существует?
А что есть причины не верить Амазону? Если книгу только разместили, то это надо еще страничку для неё на сайте итальянцев смастерить, куда потом партнерскую ссылку на амазон прикрутить. Вы уж подождите недельку другую - сделают. Я просто думаю, что продажа книжек для них это не профильный бизнес - капает и хорошо, а зашибают деньгу с консультаций и всего такого, потому им и не горит.
Вот горшок пустой, он предмет простой...
 
PooHkrd, возможно я деревенскими масштабами мыслю)) Сами итальянцы достаточно неопределенно говорили о дате выхода, а на амазоне уже за полгода была дата 2 февраля. Вот я и подумал, вдруг чтобы не нарушать обещание заказать то я могу, а вот когда реально её дождусь это вопрос))
 
А разве это не она?
https://www.amazon.com/dp/150930276X/?tag=se04-20
Или я что то не так понял?
/***
Меня смутила Ваша фраза: "однако на сайте у них еще нет SQLBI_книги", вот я и посмотрел, что эта книга есть на Amazon
Изменено: Виктор Косенков - 07.02.2019 13:02:12
 
Виктор Косенков, я правильно понял что  вы сравнили книгу по вашей ссылке  и книгу по этой ссылке и не находите различия?
 
Цитата
alpopo написал:
здесь (_) один аргумент из любого количества столбцов в строке (в записи таблицы)?
Немного не так. Тут суть в другом - функция Table.AddColumn устроена так, что ее третьим аргументом должна быть функция, принимающая первым аргументом запись, состоящую из всех столбцов таблицы, потому что именно её она (Table.AddColumn) и передает во вложенную функцию, и больше ничего не дает.
Тогда получается, что 2 и далее аргументы вложенной функции взять неоткуда, потому вот это и не работает
Код
Table.AddColumn(ПользСт4, "Ст5", (b1,b2,b3) => b2[Столбец1]+b2[Столбец3]), //Error

Некоторые другие функции, встроенные в итераторы, получают на вход и 2, и 3 аргумента - там это надо тоже учитывать
F1 творит чудеса
 
Решил тут зафиксировать пост про сравнение быстродействия разных методов удаления дубликатов из таблицы по условию при помощи группировки. Возможно кому-то будет полезно.
Изменено: PooHkrd - 13.02.2019 13:23:10
Вот горшок пустой, он предмет простой...
 
Может кто подскажет в какую сторону копать:
Есть OLAP кубы, на основе которых проводится очень много расчётов. Хочется к ним подключаться через PQ и спокойно работать с результатом умной таблицы.
Проблема в том, что ежемесячно (или чаще) нужно менять даты в фильтрах, добавлять какие-то новые показатели и тд. Сейчас всё делается на основе сводных, там с фильтром работать проще, но дальнейшие вычисления производить проблематично.
В итоге вопрос: есть какие-то инструменты, благодаря которым можно будет удобно управлять фильтрами в выгрузке кубов через PQ? Я вижу идеальный функционал так:
1) На отдельном листе выгружается вся иерархия куба
2) Из этой иерархии копируются необходимые показатели для выгрузки
3) Показатели вставляются в заранее отведённое место и запрос обновляется


ps. PP не подходит, т.к. расчётами занимаются разные сотрудники с разным уровнем владения Excel. Большинство вычислений происходит формулами, от чего в данный момент никак не уйти. Главная задача - уйти от сводных, из-за которых постоянно приходится протягивать формулы и совершать кучу лишних действий
 
Dark1589, ИМХО так будет не лучше чем делать все в PP.
Что там за показатели такие, что нельзя загрузить куб в модель и сделать нужную меру?
Если вы в своих задачах будете исходить из уровня сотрудников - далеко не уйдете. По моему опыту гораздо проще делать все правильно и подтягивать уровень сотрудников. Если не тянут значит пусть моют полы, а для умной работы ищем умных сотрудников.
Вот горшок пустой, он предмет простой...
 
PooHkrd, в теории всё так, но даже по форуму видно, что PP ещё не на столько пошёл в массы. У всех есть свои сильные и слабые стороны. Если уж на то пошло, то можно сделать ТЗ, программисты занимающиеся OLAP'ами его реализуют и у кого-то не останется работы. Вот только реализация и дальнейшие корректировки будут слишком сложны.
Моя идея в создании достаточно автономного, но при этом понятного инструмента. Как реализовать 95% задуманного я знаю, но вот как организовать выгрузку из OLAP с удобным выбором категорий - чёрт знает. Мне не хватает теоретических знаний в процессе обращения к серверу. Тот же MDX, как я понимаю, ссылается на прописанные категории и меры, но не даёт возможность задать список этих категорий в ячейке(ячейках) Excel.

Сейчас хочется для себя понять, возможно как-то создать форму для перечисления категорий и мер в выгрузке, либо нужно искать другой путь (например создать отдельные файлы с выгрузками, к которым потом обращаться отдельными запросами).
 
Доброго времени суток!
PooHkrd, позвольте у вас поинтересоваться, если у вас за последние полтора года изменился объем знаний и навыков в PP, PQ, DAX, M, то сказалось ли это на стоимости вашего труда на вашей работе. И если да то как это происходит, вы заходите к начальнику и говорите что теперь будет так, или начальник вызывает вас и говорит что теперь будет эдак, или постепенно вы начинаете брать все более и более сложные проекты или вообще это все хобби и увлечение?!
Интересуюсь в личных целях  .
С уважением, Lari.
 
Lari, очень просто. Работал начальником отдела. Предложили взять проект. Взял. Оказалсь что там нужно было считать миллионы строк. Начал по старинке в Экселе кусками - через 2 недели ночных бдений, зависаний, вылетов без сохранения и тому понял что проект завалю. Когда вы работаете по ночам, ЗП как-то не растет, а значит стоимость часа работы сильно падает. Сделал коленочный вариант расчетов на Access, накидал кое-какие запросы, которые можно было слабать в конструкторе и выводить результаты в сводную. Но поддержание такой БД было ресурсоемкой задачей, а обученных спецов под рукой не было. Вариант с VBA отпадал, ибо моя задача требовала серьезных знаний, а времени на освоение не было. При этом я слышал, что есть там в Экселе какая-то штука, которая позволяет в режиме конструктора также лепить запросы.
Когда пощупал PQ оказалось что можно тот же объем работы сделать за 2 дня. И это я еще про PP ничего толком не знал. Начал во-время уходить с работы, а освободившееся время тратить на обучение. Через месяц практически любые расчеты по проекту занимали 1-2 дня, а остальную неделю можно было пинать балду, а можно учиться (по факту за счет работодателя). Учитывая что KPI я выполнял и проект шел своим чередом начальство на это дело смотрело сквозь пальцы. Таким образом я кардинально увеличил стоимость своего часа работы. Проект сдал и стал в результате руководителем службы, это подняло и денежное довольствие и нарисовало некоторые перспективы.
Вот сейчас планирую взять еще более масштабный проект. Уверен мои знания там очень помогут.
Цитата
Lari написал:
вы заходите к начальнику и говорите что теперь будет так
Это не самый конструктивный подход в общении с руководством. Ко мне самому так уже подходили, мои подчиненные - это вызывает сильное сопротивление, причем беспричинное. Просто потому что тебе пытаются что-то диктовать. Скажем так, мне повезло и всегда попадались очень адекватные начальники (а может это и я такой молодец - не конфликтую без надобности  ;) ), поэтому если хочешь больше денег, то приходишь и говоришь, хочу больше, что надо сделать? Он тыкает пальцем - надо сделать вот это - за счет этого сможем у экономистов выбить повышение ЗП. Делаешь - показываешь эффект - повышают ЗП, либо переходишь на вышестоящую должность. Если же он говорит что денег нет - а вы держитесь! То смотрим вакансии и машем ручкой - но это больше специфика малого бизнеса. Сейчас работаю в большой сети, начинал грузчиком на складе, прошло 8 лет теперь рук. службы в головной компании.
Вот горшок пустой, он предмет простой...
 
PooHkrd, большое спасибо что поделились опытом. Ваш успех и развитие вдохновляют, возьму себе на вооружение.
 
Доброго времени суток!
Возникла проблема с DaxStudio:
если открыть приложение DaxStudio, оно не видит открытой модели данных Power Pivot.
Запустить DaxStudio чтобы она видела модель данных PP получается только из надстройки Excel.
Если открыть PowerBI, а потом DaxStudio, минуту пишет "Loading...", а потом все-такиподключается к  PowerBI.
По этой ссылке решения не_нашел.
Удалял и устанавливал заново DaxStudio (версия 2.8.2), офис тоже обновлен, не помогает.
Office 365, Windows 10.
Вдруг кто сталкивался и нашел решение.
 
Цитата
Lari написал:
Запустить DaxStudio чтобы она видела модель данных PP получается только из надстройки Excel.
Так задумано и только так и работало всегда. Если нужна модель Excel - запускаем из надстройки, Power BI - из программы
F1 творит чудеса
Страницы: Пред. 1 2 3 4 5 6 7 8 9 10 11 12 След.
Наверх