【问题标题】:Power BI YTD calculation in montly basesPower BI YTD 每月计算
【发布时间】:2019-11-08 11:48:48
【问题描述】:

我对 YTD 平均值的可视化有疑问。

我有一个链接到 Power BI 的 Excel 数据库。数据库格式如下: database structure 需要绘制的是基于数据的月平均值和 YTD 平均值。 Power BI 报表有一些切片器,因此需要选择 5-6 个不同的区域和 5-6 个不同的模型类型。

月平均值与显示的每个周期的交货时间平均值一起使用。 期间主要是一个月,但与日历月不在同一个系统中。 P01 是 10 月,P02 是 11 月,P03 是 12 月……P12 是 9 月。

所以需要计算的是切片器仍在工作的 YTD 平均值:

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

对于 P03,YTD 应该是期间 P01-P03 的提前期总和除以同一期间的项目数量。

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

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

我如何管理 ytd 将使用 power bi 的计算值的图表? power bi graph

存在每月平均和每月数量,所以任务写一个函数使用以下值:

  • YTD P01= 平均提前期 P01/提前期 ​​P01 计数
  • YTD P02= (AVG P01*Count P01 + AVG P02*count P02 ) / (Count P01 + count P02)
  • YTD P03= (AVG P01*Count P01 + AVG P02*count P02 + AVG P03*Count P03) / (计数 P01 + 计数 P02 + 计数 P03)

.... 等到 P12。

有人对解决方案有想法吗? 提前致谢。

加博

【问题讨论】:

标签: powerbi dax powerbi-desktop


【解决方案1】:

虽然您没有使用实际日期,但您的值按升序排列,因此应该能够使用与 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])

请注意,由于您没有单独的日期表,因此计算的 ALL ('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"

【讨论】:

  • 嗨 BarneyL,感谢您的快速回答,但在 && 的 totalleadtimeYTD 测量范围内,我无法选择正确的列。它没有出现在列表中。如果有帮助,我可以在 Excel 电子表格中包含示例数据
  • 样本数据可能会有所帮助,但您能否澄清您所说的无法选择正确的列是什么意思?如果您只输入需要的内容会发生什么?
  • 我已经更新了硬编码数据集的电源查询代码。复制和粘贴这些措施可以得到我认为准确的结果。
猜你喜欢
  • 1970-01-01
  • 2018-09-18
  • 2017-11-25
  • 1970-01-01
  • 2020-08-23
  • 2020-06-12
  • 2020-05-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多