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

Страницы: 1
Тормозит мера DAX при использовании формулы для вычисления % отклонения в мере.
 
Я имею в виду меру в сводной таблице Power Pivot, которая обозначается как fx.
Я стараюсь использовать меньше вычисляемых столбцов в модели данных и больше таких мер, с целью не усугублять производительность на больших массивах, но бывают меры, которые используют прочие такие же меры, которые при "вытаскивании" их в сводную таблицу снижают ее производительность (иногда с сообщением о недостатке системных ресурсов).

Упростив формулу до:
Код
=[Отклонение] / [Нормализованный бюджет]

стало нормально. Неужели такие примитивные вычисления не способны выполняться без фризов?
Или дело в мерах, которые использутся в этой формуле?
Тормозит мера DAX при использовании формулы для вычисления % отклонения в мере.
 
Здравствуйте!

Использую следующую формулу для вычисления % отклонения в мере. Как только добавляю ее в модель данных, сразу проседает производительность.
Используемые в мере столбцы других мер работают как надо и не тупят. Показать сам файл нет возможности, подскажите хотябы куда можно капнуть?
Код
=IFERROR(
       IF(AND([Нормализованный бюджет]=0,
                                 [Нормализованный факт]>0),
      1,
         [Отклонение]
      /
         [Нормализованный бюджет]),1)
DAX отмена фильтра для части данных столбца
 
На моей более сложной модели и реальных данных да. Связь при этом с таблицей месяцев сохранена.
DAX отмена фильтра для части данных столбца
 
Цитата
azma написал: и написал такой чудовищный код:
На самом деле всё было куда проще, я пошагово исключая элементы формулы нашел проблему.
Я видоизменил вычисление последнего года для сравнения следующим образом:
Код
CALCULATE(MAX('Таблица_данных'[Год]),ALL(Таблица_месяцев[№ месяца]))

Так как если оставить предыдущий вариант
Код
MAX('Таблица_данных'[Год]) 

мера ищет только последний год в пределах выбранных в слайсере месяцев и если например данные начинаются для каждой строки не с первого месяца, то при выделении только первого месяца мера выводит всю годовую сумму в промежуточный итог.
Код
=Var latestYear = CALCULATE(MAXX('Таблица_данных', 'Таблица_данных'[Year]), ALL('Таблица_данных')) 
Return 
       IF(
           CALCULATE(MAX('Таблица_данных'[Год]),ALL(Таблица_месяцев[№ месяца]))= latestYear ,
   CALCULATE(SUMX(Таблица_данных,Таблица_данных[Сумма])),         
   CALCULATE(SUMX(Таблица_данных,Таблица_данных[Сумма]), ALL('Таблица_месяцев')
))

Всем огромное спасибо за помощь!
DAX отмена фильтра для части данных столбца
 
Цитата
Barly написал:
но суммы в итогах по строкам, как вы и пишете, не равны Итоговой сумме. Причем если выбрать все месяцы, то корректно. А как сделать чтобы были равны?
Проблема решилась для фильтрации последнего года добавлением SUMX(GROUPBY(
Код
=Var latestYear = CALCULATE(MAXX('Таблица_данных', 1*'Таблица_данных'[Год]), ALL('Таблица_данных')) 
Return 
SUMX(GROUPBY(Таблица_данных, 'Таблица_данных'[Год]),
IF(  MAX('Таблица_данных'[Год])= latestYear ,
   CALCULATE(SUMX(Таблица_данных,Таблица_данных[Сумма])),         
   CALCULATE(SUMX(Таблица_данных,Таблица_данных[Сумма]), ALL('Таблица_месяцев')
)))
Но теперь не бьются суммы по категориям с итоговыми в прошлые годы  :cry:
Изменено: vikttur - 28.09.2021 11:20:20
DAX отмена фильтра для части данных столбца
 
Цитата
azma написал: насчет того, что слайсер как будто неактивный
Методом тыка решил проблему со слайсером заменив в формуле BLANK() на 0.
Полученная формула работает и я подумал это уже финиш:
Код
=IF(MAX('Таблица_данных'[Год])= latestYear,
   CALCULATE(SUMX(Таблица_данных,Таблица_данных[Сумма])),         
   CALCULATE(SUMX(Таблица_данных,Таблица_данных[Сумма]), ALL('Таблица_месяцев')
))
Но теперь проблема при фильтрации последнего года. Он суммируется как и нужно было в зависимости от выбранного месяца в фильтре,
но суммы в итогах по строкам, как вы и пишете, не равны Итоговой сумме. Причем если выбрать все месяцы, то корректно. А как сделать чтобы были равны?
Изменено: vikttur - 28.09.2021 11:19:48
DAX отмена фильтра для части данных столбца
 
Цитата
azma написал:
на это:

Огромное спасибо! С этим изменением всё заработало как нужно!
Единственный момент: на больших данных фильтрация тормозит (при кликах по слайсеру тупит)?

Изменено: Barly - 28.09.2021 03:39:20
DAX отмена фильтра для части данных столбца
 
Цитата
Андрей VG написал:
Вот мера

Спасибо, я попробовал данное решение, но при фильтрации месяцев в сводной таблице по прежнему исчезают суммы в 2019 и 2020 годах.
Если месяц встречается только в какой-то одной категории, и выбран только он, то остальные категории исчезают из сводной таблицы.
В значения ставлю меру.

Цитата
Андрей VG написал:
P. S. А какими соображениями вы руководствовались, выбирая тип данных для поля Год - текстовый?

Никакими, просто добавил в пример как есть, упустив этот нюанс из вида.
DAX отмена фильтра для части данных столбца
 
Цитата
Дмитрий(The_Prist) Щербаков написал:
Вы может файл уже приложите с данными?

Да, извиняюсь. Вот файл
DAX отмена фильтра для части данных столбца
 
Цитата
Дмитрий(The_Prist) Щербаков написал:
P.S. я так понял, что надо отбирать именно по выбранным месяцам, а значит ALL тут лишняя.

Дмитрий, спасибо за ответ,

Допустим считаем текущий год (он должен быть максимальным в таблице).

Да, но в представленных примерах, я просто отфильтрую по годам в заданном формулами диапазоне. А как это повлияет на мои месяцы?
Мне ведь нужно, чтобы я мог слайсером выбирать месяцы только в последнем году, а в прошлые годы мера должна выдавать все 12 месяцев.
И это всё в одной сводной таблице...

На рисунке ниже я изобразил сводную таблицу, которая должна получиться из этих данных.
Там где стрелки с 12 - суммы за весь соответствующий год и не меняются;
Там где желтая стрелка - сумма меняется в зависимости от выбранного месяца в слайсере;

DAX отмена фильтра для части данных столбца
 
Здравствуйте!

Имеется две таблицы связанных между собой по колонке [№ месяца]. Таблица_данных регулярно расширяется вниз по мере поступления информации.
Моя задача сделать меру сводной таблицы, которая бы считала сумму за каждый год поп полю [Сумма], но при этом не ограничивая помесячную фильтрацию для последнего года. Т.е. при выборе месяца в слайсере Таблица_месяцев должны фильтроваться только месяцы для последнего года в Таблица_данных.



На данный момент я додумался только до следующей меры:

Код
=CALCULATE(
         SUMX(Таблица_данных,Таблица_данных[Сумма]*1000)
          ,ALL(Таблица_месяцев)
        )


Но она как раз таки складывает все суммы по каждому месяцу и для последнего года тоже, а слайсер фильтрует месяцы по всем годам.

Собственно мой вопрос: Как сделать, чтобы при использовании ALL(), либо его замене, Слайсер работал в сводной таблице только для последнего года?
Вычисляемая мера DAX - возможно ли сделать проще?
 
Всем здравствуйте!

Посмотрите пожалуйста мою меру с точки зрения стилистики написания кода... Может быть есть сделать тоже самое но проще, например другими функциями?
Может посоветуете, как можно скорректировать код? Важна производительность. Старался не использовать LOOKUPVALUE.

Код
=CALCULATE(
         
         SUMX(Actuals_HANA,                  
                  
                  SWITCH(RELATED(Exchange_Rates[Normalization]),
                        "Normalize",
                           Actuals_HANA[Amt in TC]/
                           SUMX(
                              FILTER(   RELATEDTABLE(Exchange_Rates),
                                 Exchange_Rates[Currency code]=Actuals_HANA[Curr Key TC] && 
                                 Exchange_Rates[Normalization]="Normalize" &&
                                 Exchange_Rates[Currency version]=FIRSTNONBLANK(Exchange_Rate_Version[Exchange_Rate_Version],TRUE())
                                    ),  Exchange_Rates[Exchange rate (RUB)]
                              ),
                        "RUD",
                              
                           Actuals_HANA[Amt in GC]
                        )
            )
                     
      ,ALL(Months_Table)

)
Изменено: Barly - 23.09.2021 01:15:15
Скачиваемая PDF версия страничного отчета в PBI Report Server
 
Здравствуйте!

Может не по теме, но я видел тут вопросы по Power BI.

Есть BPI Report Server с опубликованным отчетом (Paginated Report) в формате rdl. Я хочу сделать так, чтобы ссылкой можно было получать готовый отчет в PDF.
Данной ссылкой я открываю отчет с панелью, где есть кнопка сохранения в различные форматы (в том числе и PDF):

1:
http://powerbi.mycompany.ru/reports/report/dir1/dir2/Folder1/Folder2/My%Report?rs:Embed=True

При нажатии на эту кнопку получаю такую ссылку, которая работает некоторое время (при ее вставке в браузер, скачивается готовый отчет в PDF).

2:
http://powerbi.sakhalinenergy.ru/ReportServer/Reserved.ReportViewerWebControl.axd?ExecutionID=o3gramvl5e2mm3451g1m2f3t&Culture=1033&CultureOverrides=False&UICulture=9&UICultureOverrides=False&ReportStack=1&ControlID=65e822050f204f16a9261153b252d5c9&OpType=Export&FileName=My%Report&ContentDisposition=OnlyHtmlInline&Format=PDF

Но данная ссылка работает максимум 2-3 минуты (потом выдает ошибку).
В этой ссылке есть два параметра, которые каждый раз новые (меняются при открытии отчета): ExecutionID=o3gramvl5e2mm3451g1m2f3t&Culture и ControlID=65e822050f204f16a9261153b252d5c9.

В первую ссылку, я пробовал добавлять и комбинировать различные параметры: ?rs:Command=Render, ?rs:Format=PDF но ничего не получилось, отчет также открывается в web.

Вопрос - Как мне видоизменить ссылку, чтобы отчет сразу скачивался в PDF?
Проблема с производительностью при вставке значений из массива в SQL Server
 
Цитата
sokol92 написал:
Я имел в виду несколько иную схему.

Огромное всем спасибо!!! Проблема решена! Всё работает достаточно быстро! Даже и не думал, что Join на столько быстрый. Пока применил Вариант Sokol92, но обязательно попробую поэкспериментировать с кодом Andrey VG.
Проблема с производительностью при вставке значений из массива в SQL Server
 
Цитата
sokol92 написал:
В Вашем случае можно использовать и Join

Cпасибо! Попробовал Join для своего примера, как сумел (уже голова не варит):

Получилось просто формирование данной строки для БД (~44 сек) для 10 тыс. строк - долговато. Наверное нужно найти способ вообще избавиться от "&"?

Код
Dim StringMassive(9)
Dim FInalJoinMassive(1)

    For i = 1 To UBound(iMassive, 1)
                            
                            StringMassive(0) = "INSERT INTO [DB1].[dbo].[MyData] ([Field1], [Field2], [Field3], [Field4], [Field5], [Field6], [Field7], [Field8], [Field9], [Field10]) VALUES (N'" & iMassive(i, 1)
                            StringMassive(1) = iMassive(i, 2)
                            StringMassive(2) = iMassive(i, 3)
                            StringMassive(3) = iMassive(i, 4)
                            StringMassive(4) = iMassive(i, 5)
                            StringMassive(5) = iMassive(i, 6)
                            StringMassive(6) = iMassive(i, 7)
                            StringMassive(7) = iMassive(i, 8)
                            StringMassive(8) = iMassive(i, 9)
                            StringMassive(9) = iMassive(i, 10) & "')"
                            
                            SQLQuery = Join(StringMassive, "', N'")

                            FInalJoinMassive(0) = InsertQuery
                            FInalJoinMassive(1) = SQLQuery
                            
                            InsertQuery = Join(FInalJoinMassive, " ")

                            InsCount = InsCount + 1

    Next i

Проблема с производительностью при вставке значений из массива в SQL Server
 
Добрый день!

Помогите пожалуйста решить проблему с производительностью. Может я неправильно пишу код.
Итак, проблема следующая - Я пытаюсь из массива собрать большой запрос на вставку значений в SQL Server (так как у меня нет доступа к BULK INSERT). А планирую я таким образом заливать ~1 млн строк за один раз.
Когда я объединяю значения из массива в одну строку, на это уходит слишком много времени (гораздо больше, чем на сам запрос). Вот та самая часть кода (всё работает, но слишком медленно - я полагал массивы быстрее):

Код
    For i = 1 To UBound(iMassive, 1)
                            
                            SQLQuery = "INSERT INTO " & SQLTableName & _
                                "(" & _
                                "[Field1], [Field2], [Field3], [Field4], [Field5], [Field6], [Field7], [Field8], [Field9], [Field10]" & _
                                ") " & _
                                "VALUES " & _
                                "(N'" & _
                                iMassive(i, 1) & "', N'" & iMassive(i, 2) & "', N'" & iMassive(i, 3) & "', N'" & iMassive(i, 4) & "', N'" & iMassive(i, 5) & "', N'" & iMassive(i, 6) & "', N'" & iMassive(i, 7) & "', N'" & iMassive(i, 8) & "', N'" & iMassive(i, 9) & "', N'" & iMassive(i, 10) & _
                                "')"
                            InsertQuery = InsertQuery & " " & SQLQuery 'Strings concatenating
                            InsCount = InsCount + 1

        'INSERT Query:
                Debug.Print "Filling " & i
        If InsCount = 50000 Or i = UBound(iMassive, 1) Then
                cmd_ADO.CommandText = InsertQuery
                cmd_ADO.ActiveConnection = cn_ADO
                cmd_ADO.Execute
                TotalInsCount = TotalInsCount + InsCount
        End If
    Next i


Буду рад любому совету! :)
Визуальный элемент Матрица в Power BI группировка по столбцу значений, содержащихся в данном столбце.
 
Цитата
Максим Зеленский написал:
Если это что-то специфическое
Ок, я создаю все линейки в вычисяемых столбцах, и добавляю в матрицу. А каждой строке тогда можно будет задать свой цвет в таком случае?
Цвет белый только на самом детальном уровне, в остальном все мои аггрегирующие уровни синего цвета и каждый отдельный уровень я не могу покрасить.
Должен же быть какой-то мануальный способ (кодом) внести эти изменения.
Визуальный элемент Матрица в Power BI группировка по столбцу значений, содержащихся в данном столбце.
 
Добрый день!

Есть ли возможность, либо иные варианты добавить в матрицу новые линейки без раскрывающей существующие категории группировки?
Например, есть таблица, построенная по двум столбцам:
Field 1Field 2 Field 3
Категория 1Подкатегория 1
Категория 1Подкатегория 2
Категория 2Подкатегория 1
Я хочу вытащить в нее столбец из модели данных, но чтобы он попал не в раскрывающийся Field 3, а дополнительными линейкам в Field 1.

Field 1Field 2 Field 3
Категория 1 Подкатегория 1
Категория 1 Подкатегория 2
Категория 2 Подкатегория 1
Новая категория из другого столбца 1 Подкатегория 1
Это нужно только для отображения промежуточных итогов Категорий 1/2 сгруппированных по этим полям (но чтобы они были в этой же таблице).
Пробовал через группировку, но не получается.

Какие варианты посоветуете?
Спасибо заранее.
DAX. Вывести первые 3 значения и остальные значения как "прочее"
 
Цитата
Максим Зеленский написал:
Вам нужна мера и доп.таблица, а не столбец
Да, но я так и делаю, только я не могу рассчитать сами категории в мере. Только значения.
DAX. Вывести первые 3 значения и остальные значения как "прочее"
 
Здравствуйте,

Работаю над проблемой выделения нескольких самых больших отклонений и прочего в графике.
По примерам нашел как это делать, но есть один нюанс - я хочу чтобы график корректно перестраивался при фильтрации месяцев (чего не проиходит в моем проекте).

Данной формулой вычисляю столбец с категориями:
Код
TOP 3 & Others = 
VAR RankPresentationLevelBy = RANKX(ALL('TOP_N'),ABS([Variance]),,DESC)
RETURN
IF(RankPresentationLevelBy<=3,'TOP_N'[Structure2],"Others")

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

Файл в Power BI, но тоже самое.
Power Query - Замена отдельных ячеек таблицы из другой таблицы
 
Здравствуйте!

Имеется таблица с определенными значениями (набор колонок постоянно меняется) и таблица новых значений в указанных колонках первой.
Мне необходимо получить третью таблицу с изменениями из второй. Файл с примером прикрепляю.

Буду обчень благодарен за помошь!
Power Query M - Замена значений в таблице по условиям из другой таблицы.
 
Цитата
PooHkrd написал:
если все правильно понял, предлагаю так:
PooHkrd, Огромное спасибо! То, что нужно!
Power Query M - Замена значений в таблице по условиям из другой таблицы.
 
Здравствуйте!

Помогите пожалуйста решить простую на первый взгляд (для вас :) ) проблему.

Имеется таблица A со значениями следующего вида:
Скрытый текст

Имеется таблица B с условиями для замены значений в таблице A:
Скрытый текст

По результатам выполнения запроса, должна получиться таблица C (кота заменили на собаку):
Скрытый текст

Столбцы в таблице A могут добавляться новые. Количество условий будет постоянно пополняться в таблице B.

Спасибо заранее!
Power Query. Сбор таблиц из разных файлов с предварительной обработкой и выборкой конкретных столбцов по списку.
 
Всем огромное спасибо! Проблема решена!
Power Query. Сбор таблиц из разных файлов с предварительной обработкой и выборкой конкретных столбцов по списку.
 
Цитата
Михаил Л написал:
Заменил pivot на group+pivot
Спасибо! Почему-то данный код выбирает из каждого файла по 12 строк и ни одной больше, никак не пойму почему. Уже даже переделал шаг Custom2 на считывание со смарт таблицы, вместо диапазона - всё равно 12 строк.
Power Query. Сбор таблиц из разных файлов с предварительной обработкой и выборкой конкретных столбцов по списку.
 
Цитата
Михаил Л написал:
не с таким размахом как у вас
Спасибо огромное за запрос! Сейчас на выходных попробую его применить у себя, о результатах отпишусь. Даже учитывая, что это сырой вариант, я просто в шоке, что то же самое можно было сделать таким маленьким кодом...  8-0  
Power Query. Сбор таблиц из разных файлов с предварительной обработкой и выборкой конкретных столбцов по списку.
 
Спасибо! Да зашел по вашей наводке! Сайт хорош, много полезной информации нашел для себя  

Я видоизменил файл, упростил его, удалил всё лишнее.

Чтобы заработало, нужно указать путь на листе Index к папке MF. В целом, то что мне нужно запрос выдает, проблема только в скорости.
Если вы реплицируете количество строк в читаемом файле до ~70 тыс и размножите его на 6-7 файлов (в именах нужно поменять год), то запрос будет весьма медленным.
Если я просто делаю Expand по этим файлам (с таким же объемом) без обработки моим запросом, это происходит гораздо быстрее.

Так вот, я был бы очень рад, ускорив его    
Power Query. Сбор таблиц из разных файлов с предварительной обработкой и выборкой конкретных столбцов по списку.
 
Здравствуйте, уважаемые участники форума!

Я работаю над запросом, который собирает данные из нескольких файлов Excel (в каждом смарт таблица).

Основные моменты, которые необходимо учесть:
* Наименования столбцов в файлах постоянно меняются (для этого я создал таблицу, в которой указываю необходимые наименования (ColumnNames),
  которые должны содержаться в имени столбца, чтобы они попали в мою модель данных). В данной таблице также содержатся правильные наименования       столбцов,     чтобы они были в моей финальной выгрузке.
* Примерный объем данных в каждом файле: 70 тыс. строк / 140 столбцов (столбцы будут Unpivot).

Я написал запросы, которые делают необходимые действия, но с 6-ти файлов это занимает ~10 минут.

Посмотрите пожалуйста запрос, что можно изменить, чтобы ускорить данный процесс? Любой совет для меня будет ценен и полезен.
К сожалению сам файл не могу выложить, но скопировал сюда все используемые функции.

В некоторых местах я добавил Table.Buffer, что ускорило выполнения запроса в два раза до 10-ти минут, но хотелось бы, конечно быстрее.

Код
let
    Source = Folder.Files(Folder_Path_Flash_Reports("Folders_Paths", 1)),
    #"Added Custom" = Table.AddColumn(Source, "Year", each Number.FromText(Text.Start([Name],4)), type number),
    #"Removed Columns" = Table.RemoveColumns(#"Added Custom",{"Content", "Date accessed", "Date modified", "Date created", "Attributes", "Extension"}),
    GetColumnNamesTables = Table.AddColumn(#"Removed Columns", "ColumnsListsToRename", each GetStructureColumnNamesTable([Year])),
    Get_Tables_From_Files = Table.AddColumn(GetColumnNamesTables, "Flash_Report_Table", each Table.Buffer(Get_Data_from_file([Folder Path]&[Name],"Table2"))),
    #"Get_Tables_From_Files_(Renamed)" = Table.AddColumn(Get_Tables_From_Files, "Flash_Report_Table_(Renamed)", each RenameColumns([Flash_Report_Table],[ColumnsListsToRename])),
    #"Removed Table with old names" = Table.RenameColumns(Table.RemoveColumns(#"Get_Tables_From_Files_(Renamed)",{"Flash_Report_Table"}),{{"Flash_Report_Table_(Renamed)", "Flash_Report_Table"}}),
    Column_Names_List_Added = Table.AddColumn(#"Removed Table with old names", "Columns_Names", each Table.ColumnNames([Flash_Report_Table])),
    Get_unique_Names_of_all_tables = Table.Distinct(Table.ExpandListColumn(Table.RemoveColumns(Column_Names_List_Added,{"Name", "Folder Path", "Year", "Flash_Report_Table", "ColumnsListsToRename"}), "Columns_Names"))[Columns_Names],
    Remove_waste_columns = Table.RemoveColumns(Column_Names_List_Added,{"ColumnsListsToRename", "Folder Path", "Columns_Names"}),
    Month_to_find_list = {"01","02","03","04","05","06","07","08","09","10","11","12","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"},
    Full_Columns_Names_Set = Table.Buffer(Table.FromList(Get_unique_Names_of_all_tables, Splitter.SplitByNothing(), null, null, ExtraValues.Error)),
    #"Step1 - Month" = Table.AddColumn(Full_Columns_Names_Set, "Check1 - Month", (C) => List.AnyTrue(List.Transform(Month_to_find_list, each Text.Contains(C[Column1], _)))),
    GetValuesColumnNames = List.Buffer(Table.ToList(Table.Distinct(Table.RemoveColumns(Table.TransformColumnTypes(Table.Distinct(Table.ReorderColumns(Table.RemoveColumns(Table.UnpivotOtherColumns(Table.SelectRows(Excel.CurrentWorkbook(){[Name="ColumnNames"]}[Content], each ([Curr Key] <> null)),{"Columns in the report", "Curr Key", "Data Type"}, "FR_Year", "FR_Columns_Names"),{"Curr Key", "Data Type"}),{"Columns in the report", "FR_Columns_Names", "FR_Year"})),{{"Columns in the report", type text}, {"FR_Columns_Names", type text}, {"FR_Year", Int64.Type}}),{"Columns in the report", "FR_Year"})))),
    #"Step2 - FR_Values_Names" = Table.AddColumn(#"Step1 - Month", "Check2 - FR_Columns_Names", (C) => List.AnyTrue(List.Transform(GetValuesColumnNames, each Text.Contains(C[Column1], _)))),
    GetCurrKeyList = List.Buffer(Table.ToList(Table.Distinct(Table.SelectColumns(Table.SelectRows(Excel.CurrentWorkbook(){[Name="ColumnNames"]}[Content], each ([Curr Key] <> null)),{"Curr Key"})))),
    #"Step3 - Curr_Key" = Table.AddColumn(#"Step2 - FR_Values_Names", "Check3 - Currency_Key", (C) => List.AnyTrue(List.Transform(GetCurrKeyList, each Text.Contains(C[Column1], _)))),
    GetStructureColumnsNames = List.Buffer(Table.ToList(Table.SelectColumns(Table.SelectRows(Excel.CurrentWorkbook(){[Name="ColumnNames"]}[Content], each ([Curr Key] = null)),{"Columns in the report"}))),
    #"Step4 - Structure" = Table.AddColumn(#"Step3 - Curr_Key", "Check4 - Structure", (C) => List.AnyTrue(List.Transform(GetStructureColumnsNames, each List.Contains(GetStructureColumnsNames,C[Column1])))),
    Selected_Columns_Names = Table.SelectColumns(Table.SelectRows(Table.AddColumn(#"Step4 - Structure", "Final Column Check", each if ([#"Check1 - Month"] = true and [#"Check2 - FR_Columns_Names"] = true and [#"Check3 - Currency_Key"] = true) then true else if ([#"Check1 - Month"] = false and [#"Check4 - Structure"] = true) then true else false), each ([Final Column Check] = true)),{"Column1"})[Column1],
    FL_Columns_Selected = Table.RemoveColumns(Table.AddColumn(Remove_waste_columns, "FL_Table_Selected_Columns", each Table.SelectColumns([Flash_Report_Table], Selected_Columns_Names, MissingField.Ignore)),{"Flash_Report_Table"}),
    Reordered_All_Columns = Table.RemoveColumns(
            Table.AddColumn(
                  FL_Columns_Selected, "Unpivoted", each 
                     Table.RenameColumns(      
                        Table.Pivot(   
                           Table.RemoveColumns(
                              Table.AddColumn(
                                 Table.AddColumn(               
                                    Table.ReplaceValue(
                                       Table.UnpivotOtherColumns(
                                          [FL_Table_Selected_Columns], GetListOfStructureColumns([Year]), "Attribute", "Value"
                                             )
                                             ,"-",0,Replacer.ReplaceValue,{"Value"}
                                             )
                                             , "Fiscal_Month", each Text.Trim(Extract_Months([Attribute]))
                                             )
                                       , "Attribute_Cleared", each Text.Combine( List.ReplaceMatchingItems(Text.ToList ([Attribute]), { {",", ""}, {".", ""}, {"0", ""}, {"1", ""}, {"2", ""}, {"3", ""}, {"4", ""}, {"5", ""}, {"6", ""}, {"7", ""}, {"8", ""}, {"9", ""} }))
                                          )
                                       ,{"Attribute"}
                                          )
                                       , {"01","02","03","04","05","06","07","08","09","10","11","12"}, "Fiscal_Month", "Value",List.Sum
                                          )
                           ,{{"01", "M01"}, {"02", "M02"}, {"03", "M03"}, {"04", "M04"}, {"05", "M05"}, {"06", "M06"}, {"07", "M07"}, {"08", "M08"}, {"09", "M09"}, {"10", "M10"}, {"11", "M11"}, {"12", "M12"}}
                                       )   
                        ),{"FL_Table_Selected_Columns"}
                     ),
    Expand_Table = Table.RemoveColumns(Table.ExpandTableColumn(Reordered_All_Columns, "Unpivoted", List.Combine({GetStructureColumnsNames,{"Attribute_Cleared"}, {"Value"}, {"Fiscal_Month"},{"M01"}, {"M02"}, {"M03"}, {"M04"}, {"M05"}, {"M06"}, {"M07"}, {"M08"}, {"M09"}, {"M10"}, {"M11"}, {"M12"}}), List.Combine({GetStructureColumnsNames, {"Attribute_Cleared"}, {"Value"}, {"Fiscal_Month"}, {"M01"}, {"M02"}, {"M03"}, {"M04"}, {"M05"}, {"M06"}, {"M07"}, {"M08"}, {"M09"}, {"M10"}, {"M11"}, {"M12"}})),{"Value", "Fiscal_Month"}),
    #"Changed Data Types" = Table.TransformColumnTypes(Table.TransformColumnTypes(Expand_Table, List.Transform(List.Combine({GetStructureColumnsNames, {"Attribute_Cleared"}}), each {_, type text})),{{"M01", type number}, {"M02", type number}, {"M03", type number}, {"M04", type number}, {"M05", type number}, {"M06", type number}, {"M07", type number}, {"M08", type number}, {"M09", type number}, {"M10", type number}, {"M11", type number}, {"M12", type number}}),
    Data_type_Column = Table.TransformColumnTypes(Table.AddColumn(#"Changed Data Types", "Data_Type", each "Flash_Reports_ADV"),{{"Data_Type", type text}})
in
    Data_type_Column


//Функции
================================================================
* Folder_Path_Flash_Reports


let Parameter=(TableName as text, RowNumber as number) =>
let
     Source = Excel.CurrentWorkbook(){[Name=TableName]}[Content],
     value = Source{RowNumber-1}[Folder Path]
in
     value
in Parameter

================================================================
* Get_Year_From_FilePath


(filepath)=>
let
    GetCurrentYearTable = Table.FromRecords({[FilePath=filepath]}),
    GetCurrentYear = Table.AddColumn(Table.SelectColumns(Record.ToTable(Table.Last(Table.Transpose(Table.SplitColumn(Table.FromRecords({[FilePath=filepath]}), "FilePath", Splitter.SplitTextByDelimiter("\", QuoteStyle.Csv))))), "Value"), "Custom", each Text.Start([Value],4)){0}[Custom]
in
    GetCurrentYear


================================================================
* Get_Data_from_file


(filepath, tableName)=>
let
    Source = Excel.Workbook(File.Contents(filepath), null, true),
    Table1_Table = Source{[Item=tableName,Kind="Table"]}[Data]
in
    Table1_Table

================================================================
* GetStructureColumnNamesTable


(FlashReportYear)=>
let
    Source  = Table.ToColumns(Table.Transpose(Table.ReorderColumns(Table.RemoveColumns(Table.SelectRows(Table.TransformColumnTypes(Table.UnpivotOtherColumns(Excel.CurrentWorkbook(){[Name="ColumnNames"]}[Content], {"Columns in the report", "Curr Key", "Data Type"}, "FR_Year", "FR_Column_Name"),{{"FR_Year", type number}}), each ([Curr Key] = null) and ([FR_Year] = FlashReportYear)),{"Curr Key", "Data Type", "FR_Year"}),{"FR_Column_Name", "Columns in the report"})))
in
    Source

================================================================
* GetListOfStructureColumns


(FR_Year)=>
let
    Source = Table.RemoveColumns(Table.SelectRows(Table.RemoveColumns(Table.SelectRows(Table.TransformColumnTypes(Table.UnpivotOtherColumns(Excel.CurrentWorkbook(){[Name="ColumnNames"]}[Content], {"Columns in the report", "Curr Key", "Data Type"}, "FR_Year", "FR_Column_Name"),{{"FR_Year", type number}}), each ([Curr Key] = null)),{"Curr Key", "Data Type", "FR_Column_Name"}), each ([FR_Year] = FR_Year)),{"FR_Year"})[Columns in the report]
in
    Source


================================================================
* RenameColumns


(Source, Headers)=>
let
    #"Renamed Columns" = Table.RenameColumns(Source,Headers,MissingField.Ignore)
in
    #"Renamed Columns"

================================================================

* Extract_Months


(String) => 
let
    MyKeywords = {" 01", " 02", " 03", " 04", " 05", " 06", " 07", " 08", " 09", " 10", " 11", " 12"},
    MatchFound = List.Transform(List.Buffer(MyKeywords), each Text.Contains(String, _, Comparer.OrdinalIgnoreCase)), 
    //index position of match found
    Position = List.PositionOf(MatchFound, true),
    //return null if Position is negative
    Return =  if Position < 0 then null else MyKeywords{Position}        
in
    Return

================================================================







Изменено: Barly - 07.05.2020 16:21:05
Страницы: 1
Наверх