Есть таблица факт и справочник. В таблице факт Содержание рассчитываются как Металл / Добычу и * 1000. Меры и пример (во вложении) представлены ниже:
Код
1. Металл, кг (план):=CALCULATE ( SUM ( 'ТаблицаФакт'[План] ); 'ТаблицаФакт'[Показатель, ед. изм.] = "Металл, кг" )
2. Добыча, т (план):=CALCULATE ( SUM ( 'ТаблицаФакт'[План] ); 'ТаблицаФакт'[Показатель, ед. изм.] = "Добыча руды, т")
3. Содержание, г/т (план):=DIVIDE ( [Металл, кг (план)]; [Добыча, т (план)]; 0 ) * 1000
4. План (SWITCH):=SWITCH ( IF ( HASONEVALUE ( 'ТаблицаФакт'[Показатель, ед. изм.] ); VALUES ( 'ТаблицаФакт'[Показатель, ед. изм.] ) ); "Содержание, г/т"; [Содержание, г/т (план)]; SUMX (
'ТаблицаФакт'; 'ТаблицаФакт'[План] )
Когда работаешь с таблицей факт или отдельными мерами, данные рассчитывает правильно, т.е. металл 3.5 г/т (и в итогах, во всех сводных таблицах). Если Показатели и Наименование Подразделений добавляю со справочника (хочу спрятать таблицу факт от пользователя), Содержание не считается, в сводной таблице Содержание исчезает. Если делаем меру через SUM: План (Sum):=SUM( 'ТаблицаФакт'[План] ), итоговые содержания складываются, а нужно рассчитывать, согласно формулы. Так же возникает вопрос, может в модель данных не тянуть Содержание, в связи с тем, что оно рассчитывается и как правильно написать меру, чтобы управлять со справочника.
Есть лист данных (во вложении файл), нужно преобразовать с помощью List.Accumulate, задача решена с помощью List.Generate. Если есть какие-то мысли решения данной задачи ещё другим способами - прошу поделиться идеями?
Предложения по быстрому способу преобразования данных (файл во вложении) по блокам (выделены рамкой - столбец "Наименование работ"), убрать всего и итого для работы в Power Pivot и сводной таблицы. С условным столбцом получается громостко и Power Query при большом объёме (таблиц 1600 шт.) зависает.
Ошибка кроется в одинаковых данных (цифра 4) в #"Данные", если поставить другую цифру, то отрабатывает формула - отлично. Нужно искать другой подход замен.
Возможно ли сделать с помощью List Generator или другой функцией Power query замену текста в столбце "Наименование работ, ед. изм.". Я реализовал это с добавлением столбца [Индекс] и [Пользовательская], хотелось бы уйти от лишних шагов в Power query. Мысль такая, если содержит "В т.ч.", то нижних четыре строчки, после последнего "В т.ч.", тоже должны быть со словом "В т.ч.". Файл приложен с реализацией добавление столбцов.
Код
#"Условный столбец добавлен" = Table.AddColumn(#"Добавлен индекс", "Пользовательская", each try if Text.Contains([#"Наименование работ, ед. изм."], "В т.ч.") then [#"Наименование работ, ед. изм."]
else if Text.Contains(#"Добавлен индекс"[#"Наименование работ, ед. изм."]{[Индекс]-1}, "В т.ч.") then "В т.ч. " & Text.Replace([#"Наименование работ, ед. изм."], Text.Split([#"Наименование работ, ед. изм."]," "){0}, Text.Lower(Text.Split([#"Наименование работ, ед. изм."]," "){0}))
else if Text.Contains(#"Добавлен индекс"[#"Наименование работ, ед. изм."]{[Индекс]-2}, "В т.ч.") then "В т.ч. " & Text.Replace([#"Наименование работ, ед. изм."], Text.Split([#"Наименование работ, ед. изм."]," "){0}, Text.Lower(Text.Split([#"Наименование работ, ед. изм."]," "){0}))
else if Text.Contains(#"Добавлен индекс"[#"Наименование работ, ед. изм."]{[Индекс]-3}, "В т.ч.") then "В т.ч. " & Text.Replace([#"Наименование работ, ед. изм."], Text.Split([#"Наименование работ, ед. изм."]," "){0}, Text.Lower(Text.Split([#"Наименование работ, ед. изм."]," "){0}) )
else if Text.Contains(#"Добавлен индекс"[#"Наименование работ, ед. изм."]{[Индекс]-4}, "В т.ч.") then "В т.ч. " & Text.Replace([#"Наименование работ, ед. изм."], Text.Split([#"Наименование работ, ед. изм."]," "){0}, Text.Lower(Text.Split([#"Наименование работ, ед. изм."]," "){0}))
else [#"Наименование работ, ед. изм."] otherwise [#"Наименование работ, ед. изм."])