Манипулирование двумя последними строками, если есть данные, основанные на дате сокращения - PullRequest
1 голос
/ 20 июня 2019

Этот вопрос является слегка измененной версией этой ...

Теперь я использую Measures вместо Calculated columns, и дата является статической, а не основана на раскрывающемся списке.

Вот файл теста Power BI .pbix file:

https://drive.google.com/open?id=1OG7keqhdvDUDYkFQFMHyxcpi9Zi6Pn3d

Этот принтскрин описывает то, что я пытаюсь выполнить:

enter image description here

В основном дата в таблице P6 Update используется как дата вырезания и будет фиксированной \ статической. Он импортирован из листа Excel, где пользователь может настроить его по своему усмотрению.

Вот что должно произойти, если в таблице тестовых данных найдена соответствующая строка для P6 Update date:

  • столбец Earned Daily - его значение должно суммироваться со следующей строкой, если она есть;
  • столбец Earned Cum - должен получить значение следующего ряда;

  • все предыдущие строки должны оставаться неизменными, то есть их значения не изменятся;

  • все последующие строки должны иметь свои значения, присвоенные 0.

Так, например:

Если P6 Update равно 1-мая-2018 , это ожидаемый результат:

1-May    7,498    52,106
2-May        0         0

Если P6 Update равно 30-апреля-2018 , это ожидаемый результат:

30-Apr  13,173    50,699
1-May        0         0
2-May        0         0 

Если P6 Update равно 29-Apr-2018 , это ожидаемый результат:

29-Apr  11,906    44,608
30-Apr       0         0
1-May        0         0
2-May        0         0 

и так далее ...

Надеюсь, это имеет смысл.

В Excel это проще, но попытки сделать это в Power BI сводят меня с ума.

1 Ответ

2 голосов
/ 20 июня 2019

Я буду игнорировать ранее заданные связанные вопросы и начну с нуля.

Сначала создайте меру:

Current Earn = 
CALCULATE (
        SUM( 'Test data'[Value]),
        'Test data'[Act Rem] = "Actual Units",
        'Test data'[Type] = "Current"
    )

Эта мера будет использоваться в других мерах, чтобы избежать повторного ввода всех этих условий («Фактические единицы» и «Текущие») иснова.Хорошей практикой является повторное использование мер в других мерах - экономит работу, делает код чище и его проще реорганизовать.

Создайте другую меру:

Cut Date = SELECTEDVALUE('P6 Update'[Date])

Мы будем использовать эту меру всякий раз, когда нам понадобится дата отсечения.Обратите внимание, что он не должен быть жестко запрограммирован - если таблица P6 содержит список дат, вы можете создать раскрывающийся слайсер из дат и выбрать динамически дату отсечения.Формула будет работать правильно.

Создайте третью меру:

Next Earn =
VAR Cut_Date = [Cut Date]
VAR Current_Date = MAX ( 'Test data'[Date] )
VAR Next_Date = Current_Date + 1
VAR Current_Earn = [Current Earn]
VAR Next_Earn = CALCULATE ( [Current Earn], 'Test data'[Date] = Next_Date )
RETURN
    SWITCH (
        TRUE,
        Current_Date < Cut_Date, Current_Earn,
        Current_Date = Cut_Date, Current_Earn + Next_Earn,
        BLANK ()
    )

Я не уверен, что «Next Earn» подходит для него, надеюсь, вы найдете более интуитивное имя.Как это работает: мы сохраняем все необходимые входные данные в переменные, а затем используем функцию SWITCH для определения результатов.Надеюсь, это говорит само за себя.(Примечание: если вам нужно 0 выше даты вырезания, замените BLANK () на 0).

Наконец, мы определяем показатель совокупного заработка.Он не требует какой-либо специальной логики, потому что предыдущая мера позаботится о нем правильно:

Cum Earn = 
VAR Current_Date = MAX('Test data'[Date])
RETURN
CALCULATE(
    [Next Earn],
    FILTER(ALL('Test data'[Date]), 'Test data'[Date] <= Current_Date))

Результат:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...