Power BI YTD расчет в месячных базах - PullRequest
0 голосов
/ 08 ноября 2019

У меня проблема с визуализацией среднего значения с начала года.

У меня есть база данных в excel, связанная с Power BI. База данных имеет следующий формат: структура базы данных Для построения графика требуется среднее значение за месяц и среднее значение с начала года на основе данных. В отчете Power BI есть несколько срезов, поэтому можно выбрать 5-6 различных регионов и 5-6 различных типов моделей.

Среднемесячное значение работает со средним показателем времени выполнения заказа за каждый период. Период в основном месяц, но не в той же системе, что и календарный месяц. P01 - октябрь, P02 - ноябрь, P03 - декабрь .... P12 - сентябрь.

Поэтому необходимо рассчитать среднее значение с начала года, когда срезы все еще работают:

ДляP01 месячная и с начала года средняя одинаковы. Для P02 среднее месячное значение основано на всех элементах, сообщенных для P02, но среднее значение YTD является следующим: YTD P02 = сумма времени выполнения заказа, разделенная на сумму количества в периодах P01 и P02 вместе.

Для P03с начала года должна быть сумма времени выполнения заказа в периоде P01-P03, деленная на количество товаров за тот же период.

и т. Д. для P04-P12 продолжается та же настройка.

Я использую мощность Bi для визуализации среднемесячного значения, а также можно рассчитать месячное количество (количество).

Как я могу управлять графиком, где ytd будет использовать рассчитанные значения мощности bi? power bi graph

Среднемесячное и месячное количество существует, поэтому задача написать функцию, используя следующие значения:

  • YTD P01 = AVG Leadtime P01/ счет времени выполнения P01
  • YTD P02 = (AVG P01 * Счет P01 + AVG P02 * счет P02) / (Счет P01 + счет P02)
  • YTD P03 = (AVG P01 * Счет P01+ AVG P02 * счет P02 + AVG P03 * счет P03) / (счет P01 + счет P02 + счет P03)

.... и т. Д. До P12.

У кого-нибудь естьидея для решения? Заранее спасибо.

Габор

1 Ответ

0 голосов
/ 08 ноября 2019

Несмотря на то, что вы не используете фактические даты, у вас есть значения в порядке возрастания, поэтому вы должны иметь возможность использовать шаблоны, аналогичные стандартным показателям с начала года в DAX и Power BI. Надо отдать должное команде SQLBI, стоящей за веб-сайтом DAX Patterns Я просто настраиваю их работу здесь.

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

Я предполагаю, что ваша таблица данных называется «MyTable».

[TotalLeadTimeYTD] := 
CALCULATE (
    SUM('MyTable'[Leadtime]), 
    FILTER (
        ALL ( 'MyTable' ), 
        'MyTable'[FY] = MAX ( 'MyTable'[FY] )
            && 'MyTable'[Period] <= MAX ( 'MyTable'[Period] )
    )
)

И:

[CountOfMeasuresYTD] := 
CALCULATE (
    COUNTROWS('MyTable'), 
    FILTER (
        ALL ( 'MyTable' ), 
        'MyTable'[FY] = MAX ( 'MyTable'[FY] )
            && 'MyTable'[Period] <= MAX ( 'MyTable'[Period] )
    )
)

И наконец

AverageLeadTimeYTS := DIVIDE([TotalLeadTimeYTD],[CountOfMeasuresYTD])

Имейте в виду, что, поскольку у вас нет отдельной таблицы дат, ВСЕ ('MyTable') вычислений также удалят любые другие фильтры, которые вы применили. Если это не тот результат, который вам нужен, вам нужно будет изменить его, чтобы удалить фильтры по периоду и году, но не другие. ALL («MyTable» [FY], «MyTable» [Period]) может работать, но мы находимся в точке, где трудно кодировать без выборочных данных.

Вышеуказанные меры были проверены на соответствие следующим жесткимнабор кодированных данных:

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45Wcos0tFDSUQowBBKGSrE6CBEjIGGEImIMJIxhIuYYusyRdMUCAA==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [Column1 = _t, Column2 = _t, Column3 = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", type text}, {"Column2", type text}, {"Column3", Int64.Type}}),
    #"Renamed Columns" = Table.RenameColumns(#"Changed Type",{{"Column1", "FY"}, {"Column2", "Period"}, {"Column3", "Leadtime"}})
in
    #"Renamed Columns"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...