【问题标题】:Calculating Monthly Average over time with only Start and End Dates in Power BI在 Power BI 中仅计算开始日期和结束日期的月平均值
【发布时间】:2021-01-11 00:32:08
【问题描述】:

为了跟踪我们的平均员工人数和流动趋势,我在 Power BI 中创建了一个报告,该报告实质上扩展了包含员工开始/结束信息的表格,以记录每位员工在公司受雇的每一天。

虽然这个解决方案有效,但我最终得到了一个包含数百万行的表,看起来效率不高。

我在 DAX 中研究了其他可能的解决方案,但没有找到任何可以给我完全相同输出的东西。似乎大多数解决方案都依赖于从一个月的开始日期和结束日期获取时间,然后对它们进行平均,这并不是我想要做的。

我附上了一个简化的 pbix 文件,它显示了我想要得到的所需输出。任何建议将不胜感激。

pbix example

【问题讨论】:

  • 处理这种情况的快照表实际上是最好的解决方案。 “似乎效率不高”是什么意思? Power BI 经过优化,可以毫无问题地处理数百万行。您是否遇到实际性能问题?
  • 这里有一篇关于这种实现的文章sqlbi.com/articles/analyzing-events-with-a-duration-in-dax
  • 在您的模型中,您同时启用了日期表和自动日期/时间。我建议禁用选项自动日期/时间,因为有一个自定义日期表(这是最好的选择)
  • @sergiom 当我说效率不高时,它主要与转换/数据刷新/加载方面有关,刷新肯定比我认为要复杂得多的报告要长得多。正如我所说,该解决方案目前正在运行,但由于它会随着时间的推移呈指数增长,我担心它在未来的表现。
  • @sergiom 您发送的链接正是我想要的!谢谢!

标签: powerbi dax


【解决方案1】:

最终代码如下所示:

All Employees = countrows ('Employees')

Terminations = 
Calculate(
    Countrows('Employees'),
    USERELATIONSHIP('Employees'[End Date],'Calendar'[Date])
)


Active Employees = 
AVERAGEX(
    VALUES('Calendar'[Date]),
    VAR CurrentDate = 'Calendar'[Date]
    VAR HiredBeforeCurrentDate =
        Filter(
            ALL('Employees'[Start Date]),
            'Employees'[Start Date] <= CurrentDate
        )
    VAR HiredAfterCurrentDate = 
        FILTER(
            ALL('Employees'[End Date]),
            OR('Employees'[End Date] >= CurrentDate, isblank('Employees'[End Date])
            )
        )
    RETURN
        CALCULATE(
            Countrows('Employees'),
            HiredBeforeCurrentDate,
            HiredAfterCurrentDate,
            ALL('Calendar')
        ))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-27
    • 1970-01-01
    • 1970-01-01
    • 2021-02-12
    • 2020-08-21
    • 1970-01-01
    • 2019-04-30
    • 2021-09-26
    相关资源
    最近更新 更多