2016-02-11 4 views
3

Можно ли использовать формулы Excel Countifs/Sumifs в формулах powerquery? Скажем, у меня есть [Column1] как «Диапазон критериев» и [Column2] как «Criteria» (Примеры критериев [Column2] text содержат «Product»), и я хочу, чтобы ячейки Count/Sum [Column1] в новом настраиваемом столбце ([Column3 ])Как сделать Countifs/Sumifs в PowerQuery Формулы M.Language?

ответ

2

Вы можете использовать фильтры для фильтрации, основанные на ваших критериях, а затем использовать Count Rows на вкладке Transform ribbon. Фильтрацию можно выполнить, щелкнув стрелку в столбце.

В качестве альтернативы вы можете отфильтровать столбец, а затем использовать Group By для вычисления количества или суммы.

+0

Группа была полезна. Благодаря! – Vasim

1

Вы могли бы хотеть попробовать эту формулу:

List.Count(List.FindText(Source[Column1], [Column2])) 

это не так гибок, как SUMIFS но подсчитывает количество записей в COLUMN1, которые содержат слово, которое стоит в текущей строке COLUMN2

+0

Используется Это, спасибо – Behnam2016

-1

Powerquery следует больше подхода ETL. Таким образом, вы не можете активировать OLE в случае включения питания. Вы можете связать существующую таблицу в excel как источник данных и можете генерировать некоторую конкретную сводку для того, что вы хотите. Если вы хотите достичь аналогичной функциональности, такой как excel, есть некоторые предпосылки.

Ваши данные должны находиться внутри таблицы excel. Сделайте еще одну таблицу, содержащую ваши критерии поиска. Теперь вам нужно сделать две таблицы, одну для datasoure, вторую по вашим критериям поиска

Теперь в таблице, полученной из ваших существующих данных, вы можете создать дополнительный индикаторный столбец, где вы можете вывести на основе критериев поиска, поскольку вы нужно что-то вроде того, чтобы реализовать countifs , если Text.Contains (col1, критерии поиска1) и Text.Contains (col2, searchcriteria 2), чем 1 else 0 , чтобы реализовать sumifs , если Text.Contains (col1, критерии поиска1) и текст. Содержит (col2, searchcriteria 2), чем [sumcol] else 0 суммирует таблицу на основе этого столбца и просто выбирает выходной диапазон на листе для результата вывода (который будет представлять собой еще одну таблицу ячеек)

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

К сожалению, его процесс и отсутствие ярлыка или формулы.

1

Я использую эту функцию в моей власти редактора запросов для COUNTIF, но я еще не освоил COUNTIFS или SUMIFS:

let 
    countif = (tbl as table, col as text, value as any) as number => 
    let 
     select_rows = Table.SelectRows(tbl, each Record.Field(_, col) = value), 
     count_rows = Table.RowCount(select_rows) 
    in 
     count_rows 
in 
    countif 

я затем использовать его как

add_column = Table.AddColumn(
    last_expression, 
    "count", 
    each 
    f_countif(Product, "Id",[ProductId])) 

Я написал это вверх довольно широко на моем блоге, и это мой предпочтительный способ сделать это.

http://jaykilleen.com/posts/countif-in-power-query-or-powerbi-using-m-language

Я надеюсь, что это поможет :)

+0

Если вы определяете СУММУ, пожалуйста, дайте мне знать –

0

Я думаю, что я решил этот вопрос.

Я создал csv. [Sumifs test.csv] и связал запрос с этим файлом.

Это исходная таблица, выглядит следующим образом: [заголовок] {строки}

[Alpha1] {AAAAAAAAA}

[Alpha1] {AA AA AA AA BB BB BB BB BB}

[num1] {1 1 1 1 1 1 1 1 1}

[Num2] {11 11 11 11 22 22 22 22 22}

[Значение] {1 2 3 4 5 6 7 8 9}

пусть
Source = Csv.Document (File.Contents ("D: \ питания BI \ Тесты \ SUMIFS test.csv"), [Разделитель =», "Кодирование = 1252]),
#" Promoted Headers1 "= Table.PromoteHeaders (Source),
#« Измененный тип »= Table.TransformColumnTypes (#« Продвинутые заголовки1 », {{« Num1 », Int64.Type}, {« Num2 », Int64.Type}, { "Значение", Int64.Type}}),

Phase1 = # "Измененный тип",
# "Сгруппированные Ряды" = Table.Group (# "Измененный тип", { "Alpha1", "Alpha1_1" }, {{"Значения", каждый Список.Sum ([Значение]), номер типа}}),

MyList = List.Buffer (# "сгруппированные строки" [VALUES]),
custom1 = # "Сгруппированные Ряды",

# "Добавлен Custom" = Table.AddColumn (Custom1, "Acumulative", каждый из списка .Sum (List.Select (MyList, (x) => x> = [Значения]))),

# "Grouped Rows1" = Table.Group (# "Added Custom", {"Alpha1"}, {{ "Values2", каждый List.Sum ([Значения]), номер типа}}),

MyList2 = List.Buffer (# "сгруппированных Rows1" [Values2]),
Польз2 = # "Сгруппированные Rows1 ",

# «Объединенные запросы» = Table.NestedJoin (Phase1, {«Alpha1»}, Custom2, {«Alpha1»}, «NewColumn», JoinKind.LeftOuter),
# «Расширенная новая таблица» = Таблица.ExpandTableColumn (# "Запросы Объединенные", "NewColumn", { "Values2"}, { "NewColumn.Values2"}), Phase2 = # "Расширенное NewColumn",

# "Merged Queries2" = Table.NestedJoin (Phase2, { "Alpha1_1"}, Польз1, { "Alpha1_1"}, "NewColumn", JoinKind.LeftOuter),

# "Расширенное NewColumn1" = Table.ExpandTableColumn (# "Merged Queries2", "NewColumn", { "Значения" }, {"NewColumn.Values"})

в

# «Expanded NewColumn1»

0

Посмотрите на этот пример: У меня есть таблица с 4 колонки (Serial, команда, имя, роль), как показано на here и хотите создать сводную таблицу со столбцами (Team, HasAdmin?, CountOfMembers)

я сделать это в 3 шага, как показано ниже:

Шаг 1: добавить 2 новый столбец, используя conditional column кнопку в Add Column ленты, как показано на here и here

Шаг 2: изменить тип новых столбцов «целого числа», как показано here

Шаг 3: Selec t колонку [Team] и нажмите на кнопку Group By в Home Лента и заполните как показано here

конец!

для «sumif» вы можете поместить значение ячеек вместо «1» на этапе 1