蒙特基地中的Power BI YTD计算

时间:2019-11-08 11:48:48

标签: powerbi dax powerbi-desktop

我对年初至今平均数的可视化有疑问。

我在excel中有一个与Power BI链接的数据库。数据库的格式如下: database structure 需要绘制的是基于数据的每月平均值和年初至今平均值。 Power BI报表包含一些切片器,因此需要选择5-6个不同的区域以及5-6个不同的模型类型。

Montly average正在与每个周期的显示提前期平均值一起工作。 周期主要是一个月,但与日历月不在同一系统中。 P01是10月,P02是11月,P03是12月... P12是9月。

因此,需要计算的是切片器仍在工作的YTD平均值:

对于P01,每月和年初至今的平均值相同。 对于P02,每月平均值基于报告的所有P02项目,但年初至今平均值如下: YTD P02 =提前期总和除以P01和P02期间的数量之和。

对于P03,本年迄今交货时间应为P01-P03期间的提前期总和除以同期的项目数量。

等对于P04-P12,正在进行相同的设置。

我正在使用功率Bi可视化每月平均值,并且还可以计算每月数量(计数)。

我该如何使用年初至今计算出的功率bi值来管理图呢? power bi graph

每月平均和每月的数量存在,因此使用以下值编写函数的任务:

  • 年初至今P01 = AVG提前期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。

有人对解决方案有想法吗? 预先感谢。

Gabor

1 个答案:

答案 0 :(得分:0)

虽然您没有使用实际日期,但是您具有按升序排列的值,因此应该能够使用与DAX和Power BI中的标准年初至今度量标准类似的模式。应该归功于DAX Patterns website后面的SQLBI团队,我只是在这里自定义他们的工作。

为使事情变得清晰,我建议将事情分解为多个步骤,针对总提前期和测量次数建立年初至今的度量,然后再提出三分之一以给出所需的实际平均值。如果存在问题,单独的措施也有助于调试。

我假设您的数据表名为“ 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"