【问题标题】:DAX measure - show values from best dayDAX 度量 - 显示最佳日期的值
【发布时间】:2017-10-18 00:33:36
【问题描述】:

我在 PowerBI(2017 年 10 月发布)中有一些数据显示了一些太阳能电池板每隔五分钟的快照输出。

我目前有一个测量方法,它通过获取当天瞬时读数的总和并除以 12(因为每小时有 12 个读数)来计算每天的总产量,然后显示这个每日数量的平均值无论是在当前上下文中的哪个时期:

Avg Daily Production (KWh) = 
    AVERAGEX(SUMMARIZE('Solar Output', 'Solar Output'[Date], "Daily Production (KWh)", SUM('Solar Output'[Production (KW)]/12), [Daily Production (KWh)]) 

对于我的可视化,我想展示一个图表,显示一天中不同时间的平均产量与最佳一天的产量相比,即[Avg Daily Production (KWh)] 值最高的一天。

这是我目前的工作:

通过使用识别顶天

Best Day = TOPN(1, SUMMARIZE('Solar Output', 'Solar Output'[Date], "Daily Production (KWh)", [Avg Daily Production (KWh)]), [Daily Production (KWh)], DESC)

但这会产生一行,而不是一个标量,我不知道如何获取这个日期并将其用作这样的度量的过滤器:

Production On Best Day (KW) = 
    CALCULATE(SUM([Production (KW)]), FILTER(ALL('Solar Output'[Date]), 'Solar Output'[Date] = [Best Day]))

我想要的图表如下所示,所选日期的平均产量以绿色显示,然后另一个系列以红色铅笔显示最佳日期的那些时间的产量。

【问题讨论】:

  • 您介意分享一个示例 .pbix 文件/数据集吗?
  • 不熟悉在这里发文件,我只是学习如何......
  • 抱歉,我在连接到工作中的文件托管站点时遇到问题。类似的数据可以在这里找到pvoutput.org/…
  • 我认为 FIRSTNONBLANK 函数会起作用,例如围绕着你的 Best Day 表达。我不是 100% 确定,今天也没有时间玩它,但是 HTH。
  • @MikeHoney FIRSTNONBLANK(ColumnName, Expression) 需要列引用作为参数,但 TOPN() 返回一个表...

标签: powerbi dax


【解决方案1】:

我无法真正理解所涉及的计算,但我希望我能满足您的要求。

所以你想在同一张图表上绘制两条线,一条总是作为参考的最佳日期的数据,另一条是从日期过滤器中选择的数据,对吧?

您实际上已经非常接近上面给出的信息的解决方案了。

我刚刚将您的 DAX 修改为:

Production On Best Day (KW) = 
CALCULATE(
    SUM('Solar Output'[Average]),
    FILTER(
        ALL('Solar Output'[Date]),
        'Solar Output'[Date] = VALUES('Best Day'[Date])
    )
)

(不太清楚您如何计算中间指标,因此您可能需要根据自己的指标进行调整)

是的,TOPN() 返回一个表格,因此您可以使用VALUES('Best Day'[Date]) 获取日期值并用于比较。

结果:

【讨论】:

  • 所以不是Best Day 是一个度量,我可以将它作为一个计算表......?
  • 同一张表中是否有多个太阳能电池板的数据?或者换一种说法,你的Best Day会根据其他过滤器变化吗?
  • 不,目前无论其他过滤器如何,该值都是相同的。
  • 轻微修改:Production On Best Day (KWh) = CALCULATE(AVERAGE([Production (KW)]), FILTER(ALL('Solar Output'[Date].[Date]), 'Solar Output'[Date].[Date] = VALUES('Best Day'[Date]))) 我认为与正确使用隐式日期层次结构有关。
  • 那么这个解决方案应该可以工作。否则,我们需要Best Daymeasure 的解决方案,因为计算表只会在刷新数据集时刷新,并且在报表消费期间保持静态。
【解决方案2】:

解决此问题的另一种方法是使用MAXX() 函数从TOPN() 返回的表中获取标量值。

这在MAX() 不起作用的情况下有效,因为MAXX() 接受表表达式 作为其第一个参数(表表达式是TOPN() 函数的结果),其中仅MAX()从现有表中获取列。

Best Day = MAXX(TOPN(1, 
                     SUMMARIZE(ALL('Solar Output'), 
                               'Solar Output'[Date], 
                               "Daily Production (KWh)", 
                               [Avg Daily Production (KWh)]), 
                     [Daily Production (KWh)], 
                     DESC), 
                [Date])

这种方法的好处是它应该在不支持计算表的 DAX 版本中工作(例如 SSAS 2014、Excel 2013)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-09
    • 2023-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多