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

Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 24 След.
Удалить все строки, в которых отсутствует определённый текст, результат отразить по вертикали., Создать макрос.
 
Можно в PQ
Код
let
  src     = Excel.CurrentWorkbook(){[ Name = "data" ]}[Content],
  filter  = Table.SelectRows ( src, ( x ) => Text.Contains ( Text.From ( Record.FieldValues ( x ){0} ), "Всего" ) ),
  reverse = Table.ReverseRows ( filter )
in
  reverse
Изменено: surkenny - 20.01.2022 17:30:29
Автоматическая подгрузка данных в диапазон ячеек, который служит источником данных для другой таблицы
 
Цитата
Сергей Николаев написал:
в режиме анимации
это точно нужно?
А по делу - приложите файл пример.
Работа с таблицами и формулами, Годовые формулы
 
Цитата
Александр Батыргалиев написал:
Таблица которая прикреплена, не внушает доверия и не много не понятна.
Это просто таблица, в которую руками вносят данные о дате соответствующего обучения для каждого сотрудника, а условное форматирование подсвечивает даты по условию. Что означает "не внушает доверия"?
Форматирование отдельным цветом для 3-х лет добавить можно.
Как переместить каждую вторую строку в столбец и удалить пустую ячейку + математические операции, Упрощение работы с СС от Youtube
 
Nikita Rocky, можно так. Но!!! Если добавляете листы или меняете на них данные, нужно сохранить файл перед обновлением запроса.
Код
let
  keywords = List.Buffer (
    Table.TransformColumns ( Excel.CurrentWorkbook(){[ Name = "keywords" ]}[Content], { "keywords", ( x ) => Text.Lower ( x ) } )[keywords]
  ),
  parameters = Record.FromList (
    Excel.CurrentWorkbook(){[ Name = "parameters" ]}[Content][Значение],
    Excel.CurrentWorkbook(){[ Name = "parameters" ]}[Content][Параметр]
  ),
  src = Excel.Workbook ( File.Contents ( parameters[Путь к файлу] ) ){[ Item = Text.From ( parameters[Лист] ), Kind = "Sheet" ]}[Data],
  split = List.Transform ( List.Split ( Table.Column ( src, Table.ColumnNames ( src ){0} ), 2 ), ( x ) => { Number.From ( x{0} ) / 60 } & { x{1} } ),
  toTable = Table.FromRows ( split, type table [ timecode = time, text = text ] ),
  typed = Table.TransformColumnTypes ( toTable, { { "timecode", type time } } ),
  filter = Table.SelectRows (
    typed,
    each List.ContainsAny (
      Text.SplitAny ( Text.Lower ( [text] ), Text.Remove ( [text], { "0" .. "9", "A" .. "z", "А" .. "я", "[", "]" } ) ),
      keywords
    )
  )
in
  filter
Изменено: surkenny - 20.01.2022 14:47:34
PowerQ замена всех значений >0 на true
 
PooHkrd, конечно, так пошустрее должно быть. У меня же прошла любовь к Table.ReplaceValue() :)
Но тут Вы ТС еще и Table.TransformColumns() изучать заставляете, когда Replace еще не разобрался :)
Работа с таблицами и формулами, Годовые формулы
 
Александр Батыргалиев, пишу в личку
Как переместить каждую вторую строку в столбец и удалить пустую ячейку + математические операции, Упрощение работы с СС от Youtube
 
Nikita Rocky,
1. Уберите разрывы между строками в сообщении.
2. Можно так:
Код
let
  keywords = List.Buffer (
    Table.TransformColumns ( Excel.CurrentWorkbook(){[ Name = "keywords" ]}[Content], { "keywords", ( x ) => Text.Lower ( x ) } )[keywords]
  ),
  src = Excel.CurrentWorkbook(){[ Name = "data" ]}[Content],
  split = List.Transform ( List.Split ( src[data], 2 ), ( x ) => { x{0} / 60 } & { x{1} } ),
  toTable = Table.FromRows ( split, type table [ timecode = time, text = text ] ),
  typed = Table.TransformColumnTypes ( toTable, { { "timecode", type time } } ),
  filter = Table.SelectRows (
    typed,
    each List.Accumulate ( keywords, 0, ( s, c ) => s + Number.From ( Text.Contains ( [text], c, Comparer.OrdinalIgnoreCase ) ) ) > 0
  )
in
  filter

Но будут "лишние" совпадения. К примеру, [.. Мда, чайник не вовремя ..] из-за того, что содержит время.
Изменено: surkenny - 20.01.2022 06:43:07
PowerQ замена всех значений >0 на true
 
Alex.Mari, например, так:
Код
  = Table.ReplaceValue (
    #"Замененное значение", 
    each [price], 
    each if [price] > 0 then "true" else [price], 
    Replacer.ReplaceValue, 
    { "price" }
  )
DAX. Найти максимальную дату за прошедший период.
 
Настя_Nastya, если лень заморачиваться с календарем в PQ, можно еще так (вывод по последнюю дату в данных):
Код
max :=
VAR curDate =
    MAX ( 'Calendar'[Date] )
VAR maxDateInDataTable =
    MAXX ( ALL ( 'Данные' ); 'Данные'[дата] )
VAR result =
    IF (
        curDate <= maxDateInDataTable;
        CALCULATE ( MAX ( 'Данные'[дата время] ); 'Calendar'[Date] <= curDate )
    )
RETURN
    result

Либо по сегодняшний день:
Код
max :=
VAR curDate =
    MAX ( 'Calendar'[Date] )
VAR result =
    IF (
        curDate <= TODAY ();
        CALCULATE ( MAX ( 'Данные'[дата время] ); 'Calendar'[Date] <= curDate )
    )
RETURN
    result
DAX. Найти максимальную дату за прошедший период.
 
Настя_Nastya, плохо книжку читаете :)
У Вас для типа "Рабочий" на 13.06 таблица данных пуста. Таким образом выражение MAX ( 'Данные'[Дата] ) = BLANK. А какие даты меньше BLANK? :)
Поэтому создавайте календарь :)
Код
max :=
CALCULATE (
    MAX ( 'Данные'[дата время] );
    FILTER (
        ALL ( 'Calendar'[Date] );
        'Calendar'[Date] <= MAX ( 'Calendar'[Date] )
    )
)

Если календарь создадите в PQ, то там можно ограничить его сверху последней датой в данных. Или текущим днем при необходимости.
upd:
Чтобы легче было понять подобные результаты, используйте переменные. Во-первых, код можно записать гораздо лаконичнее. Во-вторых, можно быстро менять имя переменной в выводе и посмотреть промежуточные результаты. Переписал именно Вашу меру с некорректным результатом:
Код
max :=
VAR curMaxDate =
    MAX ( 'Данные'[дата] )
VAR result =
    CALCULATE ( MAX ( 'Данные'[дата время] ); 'Данные'[дата] <= curMaxDate )
RETURN
    curMaxDate
Изменено: surkenny - 19.01.2022 18:12:58
Определить сумму в зависимости от величины выплат на руки
 
AIDEKE, вариант:
Код
=ВЫБОР(
   ПОИСКПОЗ( F7; {0;0,01;42500,01;63957,01;340850,01;1717850,01} );
   0; F22/0,88; (F22-425)/0,8712; (F22-4250)/0,792; (F22+3400)/0,81; (F22+194650)/0,9
)

Вроде ТС исправился. Если вдруг нет - не ругайте сильно :)
Изменено: surkenny - 19.01.2022 16:22:07
PQ.Подставить значение из другой таблицы по условию
 
Цитата
surkenny написал:
Этот способ, по идее еще быстрее работать должен.
Потестирую. Но!!!
1. Очень сильно бьет по понятности кода. Не сложности, а понятности :) В TransformRows сразу видно, какое поле меняем и от каких полей зависит.
2. А если еще 5 из 15 столбцов менять?
В общем, если прирост производительности будет большой или под конкретную задачу с огромным числом строк, можно. Но неудобно ппц :)
Изменено: surkenny - 18.01.2022 19:54:41
PQ.Подставить значение из другой таблицы по условию
 
nacimjon, а способ #2 медленно работает?
Метод Михаила про другое. И #4 не смотрите :)
PQ.Подставить значение из другой таблицы по условию
 
Цитата
PooHkrd написал:
последний пост Михаила не пробовали еще?
даже не видел :) Можно ссылку?
Изменено: surkenny - 18.01.2022 17:17:29
PQ.Подставить значение из другой таблицы по условию
 
Andrey_S, как нам писал PooHkrd, #3 - это наиболее быстрый способ. Проверено.
Вообще, я перестал использовать Table.ReplaceValue из-за тормознутости. Только если значение1 на значение2 заменить нужно (к примеру, null на 0).
Намного быстрее работает конструкция:
Код
  replace = Table.FromRecords (
    Table.TransformRows (
      tbl,
      ( r ) =>
        Record.TransformFields (
          r,
          {
            { "Столбец2", each if r[Столбец1] = "q" or r[Столбец1] = "w" then 7 else _ },
            { "Столбец1", ( x ) => if x = "q" or r[Столбец2] = 5 then x & "!!!" else x }
          }
        )
    ),
    Value.Type ( tbl )
  )
Изменено: surkenny - 18.01.2022 16:35:41
PQ.Подставить значение из другой таблицы по условию
 
nacimjon,
1. А где попытки-то? :)
2. В цене петрухи, видимо, ошиблись в примере.
3. Вариант 1:
Код
let
  src = Excel.CurrentWorkbook(){[ Name = "stock" ]}[Content] & Excel.CurrentWorkbook(){[ Name = "price" ]}[Content],
  typed = Table.TransformColumnTypes ( src, { { "Дата", type date }, { "Кол-во", Int64.Type }, { "Цена", type number } } ),
  group = Table.Group (
    typed,
    { "Наименование" },
    {
      {
        "table",
        ( eachProduct ) =>
          [
            sort     = Table.Sort ( eachProduct, { { "Дата", Order.Ascending }, { "Кол-во", Order.Ascending } } ),
            fillDown = Table.FillDown ( sort, { "Цена" } ),
            filter   = Table.SelectRows ( fillDown, each ( [#"Кол-во"] <> null ) )
          ][filter]
      }
    }
  ),
  combine = Table.Combine ( group[table] )
in
  combine

4. Вариант 2 (с сохранением порядка строк, как в источнике):
Код
let
  src = Table.AddIndexColumn ( Excel.CurrentWorkbook(){[ Name = "stock" ]}[Content], "Индекс", 1, 1 )
    & Excel.CurrentWorkbook(){[ Name = "price" ]}[Content],
  typed = Table.TransformColumnTypes ( src, { { "Дата", type date }, { "Кол-во", Int64.Type }, { "Цена", type number } } ),
  group = Table.Group (
    typed,
    { "Наименование" },
    {
      {
        "table",
        ( eachProduct ) =>
          [
            sort     = Table.Sort ( eachProduct, { { "Дата", Order.Ascending }, { "Кол-во", Order.Ascending } } ),
            fillDown = Table.FillDown ( sort, { "Цена" } ),
            filter   = Table.SelectRows ( fillDown, each ( [#"Кол-во"] <> null ) )
          ][filter]
      }
    }
  ),
  combine = Table.Combine ( group[table] ),
  sort = Table.Sort ( combine, { { "Индекс", Order.Ascending } } ),
  removeIndex = Table.RemoveColumns ( sort, { "Индекс" } )
in
  removeIndex
Формула Excel СУММЕСЛИМН в DAX.
 
mikmp,
Код
Мера 2 :=
CALCULATE (
    [Сухой вес остатка];
    ALL ( 'Отпр' );
    INTERSECT ( ALL ( 'Отпр'[Куда остаток] ); VALUES ( 'Отпр'[Номер партии] ) )
)
PP мера. Получить количество по шкале
 
Maksim_A,
В данном случае вычисляемый столбец будет содержать очень небольшое количество уникальных значений. Поэтому это нормальный подход к решению. Думаю, что вариант мерой будет даже более тормозным.
Для больших объемов (миллиарды строк) существует еще способ, но для него нужна вычисляемая таблица и он подойдет для PBI.

Если все же хочется мерой :) :
1. Если не усложнять и указать все границы:
Код
Количество_:=SUMX (
    VALUES ( categories[Категория] );
    CALCULATE (
        COUNTROWS (
            FILTER (
                'data';
                'data'[Количество] >= MIN ( 'categories'[От] )
                    && 'data'[Количество] < MAX ( 'categories'[До] )
            )
        )
    )
)

2. Если нравятся пустые значения (чтобы уж точно все попало в какую-то группу :) ):
Код
Кол-во:=SUMX (
    VALUES ( categories[Категория] );
    CALCULATE (
        COUNTROWS (
            FILTER (
                'data';
                IF (
                    ISBLANK ( MIN ( 'categories'[От] ) );
                    TRUE ();
                    'data'[Количество] >= MIN ( 'categories'[От] )
                )
                    && IF (
                        ISBLANK ( MAX ( 'categories'[До] ) );
                        TRUE ();
                        'data'[Количество] < MAX ( 'categories'[До] )
                    )
            )
        )
    )
)
Как выбрать из пути к файлу дату?, Как в запросе PQ из столбца в котором указан путь к файлу выбрать дату?
 
hudoi,
если правильно понял, вариант:
1. Путь делим по разделителю "\".
2. Выбираем элементы, состоящие из 10 знаков.
3. Пробуем преобразовать в дату (если не получается - null).
4. Выбираем оставшиеся непустые элементы.
5. Выводим первый (по идее, он должен остаться один :) ).
Код
let
  src = Excel.CurrentWorkbook(){[ Name = "Исходные_данные" ]}[Content],
  addDate = Table.AddColumn (
    src,
    "Дата",
    each List.First (
      List.RemoveNulls (
        List.Transform (
          List.Select ( Text.Split ( [Folder Path], "\" ), ( x ) => Text.Length ( x ) = 10 ),
          ( x ) => try Date.FromText ( x, "RU-ru" ) otherwise null
        )
      )
    ),
    type date
  )
in
  addDate
Формула Excel СУММЕСЛИМН в DAX.
 
mikmp, если итоги не нужны, можно еще так (HASONEVALUE() для того, чтобы в группировке не считалось, там все равно результат будет некорректным):
Код
Мера 2 :=
IF (
    HASONEVALUE ( 'Отпр'[Номер партии] );
    (
        CALCULATE (
            [Сухой вес остатка];
            FILTER ( ALL ( 'Отпр' ); 'Отпр'[Куда остаток] = MAX ( 'Отпр'[Номер партии] ) )
        )
    )
)
Изменено: surkenny - 18.01.2022 08:45:24
Формула Excel СУММЕСЛИМН в DAX.
 
mikmp, подчеркивается, но должно работать.
Изменено: surkenny - 18.01.2022 08:32:43
Формула Excel СУММЕСЛИМН в DAX.
 
mikmp, можно так:
Код
Мера 1 :=
CALCULATE (
    [Сухой вес остатка];
    FILTER (
        ALL ( 'Отпр' );
        'Отпр'[Куда остаток] IN VALUES ( 'Отпр'[Номер партии] )
    )
)

Или так:
Код
Мера 1 :=
CALCULATE (
    [Сухой вес остатка];
    ALL ( 'Отпр' );
    'Отпр'[Куда остаток] IN VALUES ( 'Отпр'[Номер партии] )
)
Изменено: surkenny - 18.01.2022 06:29:16
Не получается сделать в BI построчную суммеслимн с корректным итогом
 
Andrey Belkin, слегка изменил меры для понятности:
Код
Мера =
VAR endDate =
    MAX ( 'Календарь'[Date] )
VAR dataTbl =
    FILTER ( 'БД', [чек] )
VAR result =
    SUMX (
        dataTbl,
        CALCULATE (
            SUM ( 'Календарь'[Время] ),
            DATESBETWEEN (
                'Календарь'[Date],
                'БД'[Дата начала],
                IF (
                    ISBLANK ( 'БД'[Дата завершения] ),
                    endDate,
                    MIN ( 'БД'[Дата завершения], endDate )
                )
            )
        )
    )
RETURN
    result

Код
Чек = 
COUNTROWS (
    FILTER (
        'БД',
        'БД'[Дата начала] <= MAX ( 'Календарь'[Date] )
            && (
                'БД'[Дата завершения] >= MIN ( 'Календарь'[Date] )
                    || 'БД'[Дата завершения] = BLANK ()
            )
    )
) 
Сумма пропущенных чисел
 
Виталина Филатова, а немного вспомнить школьную программу?
Код
a+x=b => x=b-a

Сумму от 1 до 20 можете и на калькуляторе посчитать или по сумме арифметической прогрессии.
Итого:
Код
= 210 - СУММ( B1:I1 )

P.S. Так как нет примера, то считаем, что в B1:I1 значения не повторяются.
Не получается сделать в BI построчную суммеслимн с корректным итогом
 
Andrey Belkin, что-то долго въезжал, что Вы хотите:)
Так корректно?
Код
Мера =
VAR endDate =
    MAX ( 'Календарь'[Date] )
VAR result =
    SUMX (
        'БД',
        IF (
            [Чек] > 0,
            CALCULATE (
                SUM ( 'Календарь'[Время] ),
                DATESBETWEEN (
                    'Календарь'[Date],
                    'БД'[Дата начала],
                    IF (
                        ISBLANK ( 'БД'[Дата завершения] ),
                        endDate,
                        MIN ( 'БД'[Дата завершения], endDate )
                    )
                )
            )
        )
    )
RETURN
    result
Изменено: surkenny - 17.01.2022 20:40:49
Объединение строк в одну по уникальным значениям в столбце, Объеденение дубликатов в столбце, с последующим сопоставлением строк
 
V Z, исходники Вы не предоставили, поэтому Ваш запрос дополнить не могу. В рабочем файле можете сразу так же обрабатывать Ваш запрос. В Record.RemoveFields в шаге group можете добавить и другие поля, которые Вам не нужны в результате.
Код
let
  src = Excel.CurrentWorkbook(){[ Name = "data" ]}[Content],
  addAnswersCount = Table.AddColumn (
    src,
    "answersCount",
    ( r ) =>
      List.NonNullCount (
        Record.ToList ( Record.SelectFields ( r, List.Select ( Record.FieldNames ( r ), ( x ) => Text.End ( x, 6 ) = "вопрос" ) ) )
      )
  ),
  group = Table.Group (
    addAnswersCount,
    { "Имя пользователя" },
    { { "recs", ( x ) => Record.RemoveFields ( Table.Max ( x, "answersCount" ), "answersCount" ) } }
  ),
  toTable = Table.FromRecords ( group[recs] )
in
  toTable

upd: Вероятнее всего, для одинаковых пользователей поля, кроме вопросов, будут заполнены одинаково. Поэтому их количество в строке не повлияет на определение наибольшего количества ответов и код можно упростить:
Код
let
  src = Excel.CurrentWorkbook(){[ Name = "data" ]}[Content],
  addAnswersCount = Table.AddColumn ( src, "answersCount", ( r ) => List.NonNullCount ( Record.ToList ( r ) ) ),
  group = Table.Group (
    addAnswersCount,
    { "Имя пользователя" },
    { { "recs", ( x ) => Record.RemoveFields ( Table.Max ( x, "answersCount" ), "answersCount" ) } }
  ),
  toTable = Table.FromRecords ( group[recs] )
in
  toTable
Изменено: surkenny - 17.01.2022 12:55:29
PP мера. Получить количество по шкале
 
Maksim_A, если Вы имеете ввиду, что, к примеру, при выборе срезом/фильтром двух несмежных диапазонов, в итог попадут и значения между ними - то да. Лучше создать вычисляемый столбец диапазона. Но тут еще сложнее будет решить при пустых значениях границ :)
PP мера. Получить количество по шкале
 
Maksim_A, так, наверное, попроще:
Код
Копия Мера :=
COUNTROWS (
    FILTER (
        'Продукты';
        IF (
            CONTAINS ( 'Диапазон'; 'Диапазон'[Начало]; BLANK () );
            TRUE ();
            'Продукты'[Количество] >= MIN ( 'Диапазон'[Начало] )
        )
            && IF (
                CONTAINS ( 'Диапазон'; 'Диапазон'[Конец]; BLANK () );
                TRUE ();
                'Продукты'[Количество] <= MAX ( 'Диапазон'[Конец] )
            )
    )
)
Изменено: surkenny - 16.01.2022 20:28:14
PP мера. Получить количество по шкале
 
nacimjon, сорян, видимо, за Вас додумал, что за месяц нужно по продукту просуммировать :)
Под Ваш пример:
Код
Кол-во :=
COUNTROWS (
    FILTER (
        'data';
        'data'[Количество] >= MIN ( 'categories'[От] )
            && 'data'[Количество] < MAX ( 'categories'[До] )
    )
)

Maksim_A, Ваша мера будет некорректно работать в итогах по категориям (попробуйте в сводной вывести общий итог для строк). Самое простое - нижнюю/верхнюю границы у крайних категорий сделать заведомо меньше/больше реальных значений.
Рейтинг в Power BI, Создание динамического рейтинга
 
Михаил Семенов, Подробное руководство по DAX
Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 24 След.
Наверх