/// DNS-name of the server with BI-data, e.g. "myhost.bitrix24.com" expression 'Server address' = "magok.bitrix24.ru" meta [IsParameterQuery=true, Type="Text", IsParameterQueryRequired=true] annotation PBI_ResultType = Text /// Secret token expression 'Secret key' = "OLK0Ik9i34J1r3afMOHb5Q16DO821hjMru" meta [IsParameterQuery=true, Type="Text", IsParameterQueryRequired=true] annotation PBI_ResultType = Text expression bx24_load_entity = let //https://helpdesk.bitrix24.com/open/16457718/ //bx24_entity_name: "crm_company_uf" //https://docs.microsoft.com/en-us/powerquery-m/web-contents func = (bx24_entity_name as text) as table => let response = Web.Contents( "https://" & #"Server address", [ RelativePath = "bitrix/tools/biconnector/pbi.php", Query = [ table = bx24_entity_name ], Content = Json.FromValue([dateRange = [ startDate = Date.AddYears(Date.From(DateTime.LocalNow()),-5), endDate = Date.From(DateTime.LocalNow())], key = #"Secret key" ] ) ] ), jd = Json.Document(response) in Table.FromRows( List.Skip(jd),//data: >=1 row (index 0 based) List.First(jd)//header: 0 row (index 0 based) ) in func annotation PBI_ResultType = Function expression 'Ошибки в Я Директ расходы' = let Источник = #"Я.Директ расходы стар", #"Обнаруженные несоответствия типов" = let tableWithOnlyPrimitiveTypes = Table.SelectColumns(Источник, Table.ColumnsOfType(Источник, {type nullable number, type nullable text, type nullable logical, type nullable date, type nullable datetime, type nullable datetimezone, type nullable time, type nullable duration})), recordTypeFields = Type.RecordFields(Type.TableRow(Value.Type(tableWithOnlyPrimitiveTypes))), fieldNames = Record.FieldNames(recordTypeFields), fieldTypes = List.Transform(Record.ToList(recordTypeFields), each [Type]), pairs = List.Transform(List.Positions(fieldNames), (i) => {fieldNames{i}, (v) => if v = null or Value.Is(v, fieldTypes{i}) then v else error [Message = "Тип значения не соответствует типу столбца.", Detail = v], fieldTypes{i}}) in Table.TransformColumns(Источник, pairs), #"Добавлен индекс" = Table.AddIndexColumn(#"Обнаруженные несоответствия типов", "Номер строки" ,1), #"Сохраненные ошибки" = Table.SelectRowsWithErrors(#"Добавлен индекс", {"Дата", "Кампания", "Группа", "Условие показа", "№ Условия показа", "Показы", "Клики", "CTR (%)", "key_dir", "Ср. цена клика, руб", "Расход, руб"}), #"Переупорядоченные столбцы" = Table.ReorderColumns(#"Сохраненные ошибки", {"Номер строки", "Дата", "Кампания", "Группа", "Условие показа", "№ Условия показа", "Показы", "Клики", "CTR (%)", "key_dir", "Ср. цена клика, руб", "Расход, руб"}) in #"Переупорядоченные столбцы" queryGroup: 'Ошибки в запросах — 05 01 2025 15:59:08' annotation PBI_NavigationStepName = Навигация annotation PBI_ResultType = Exception expression 'Я.Директ расходы стар' = let Источник = GoogleSheets.Contents("https://docs.google.com/spreadsheets/d/12gd2O6tTGPGc2BsRbX_QPKn4VF23jhXoFcrj8ErblAo/edit?usp=sharing"), #"Мастер отчётов_Table" = Источник{[name="Мастер отчётов",ItemKind="Table"]}[Data], #"Повышенные заголовки" = Table.PromoteHeaders(#"Мастер отчётов_Table", [PromoteAllScalars=true]), #"Измененный тип" = Table.TransformColumnTypes(#"Повышенные заголовки",{{"Дата", type date}, {"Кампания", type text}, {"№ Кампании", type text}, {"Группа", type text}, {"№ Группы", type text}, {"Условие показа", type text}, {"№ Условия показа", type text}, {"Показы", Int64.Type}, {"Клики", Int64.Type}, {"CTR (%)", type number}, {"Расход (руб.)", type number}, {"Ср. цена клика (руб.)", type number}}), #"Вставлено: объединенный столбец" = Table.AddColumn(#"Измененный тип", "key_dir", each Text.Combine({[#"№ Кампании"], [#"№ Группы"]}, "-"), type text), #"Удаленные столбцы" = Table.RemoveColumns(#"Вставлено: объединенный столбец",{"№ Кампании", "№ Группы"}), #"Добавлен пользовательский объект" = Table.AddColumn(#"Удаленные столбцы", "Ср. цена клика, руб", each [#"Ср. цена клика (руб.)"]/1000), #"Удаленные столбцы1" = Table.RemoveColumns(#"Добавлен пользовательский объект",{"Ср. цена клика (руб.)"}), #"Измененный тип1" = Table.TransformColumnTypes(#"Удаленные столбцы1",{{"Ср. цена клика, руб", type number}}), #"Добавлен пользовательский объект1" = Table.AddColumn(#"Измененный тип1", "Расход, руб", each [#"Расход (руб.)"]/1000), #"Измененный тип2" = Table.TransformColumnTypes(#"Добавлен пользовательский объект1",{{"Расход, руб", type number}}), #"Удаленные столбцы2" = Table.RemoveColumns(#"Измененный тип2",{"Расход (руб.)"}), #"Строки с примененным фильтром" = Table.SelectRows(#"Удаленные столбцы2", each [Дата] < #date(2024, 6, 1)) in #"Строки с примененным фильтром" annotation PBI_NavigationStepName = Навигация annotation PBI_ResultType = Table