DAX 度量 - 显示最佳日的值
DAX measure - show values from best day
我在 PowerBI(2017 年 10 月版)中有一些数据显示某些太阳能电池板以 five-minute 间隔的快照输出。
我目前有一个方法,通过获取当天的瞬时读数的总和除以 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)])
对于我的可视化效果,我想展示一个图表,显示一天中不同时间的平均产量与最佳一天当时产量的比较,即 [=13 值最高的那一天] =].
这是我目前的工作:
使用
识别最高日
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]))
我想要的图表看起来像这样,选定日期的平均产量用绿色表示,然后另一个系列显示最佳日期那些时间的产量用红色铅笔表示。
无法真正理解所涉及的计算,但我希望我能满足您的要求。
所以你想在同一张图表上画两条线,一条总是最好的一天的数据作为参考,另一条是从日期过滤器中选择的数据,对吗?
根据上面给出的信息,您实际上已经很接近解决方案了。
我刚刚将您的 DAX 修改为:
Production On Best Day (KW) =
CALCULATE(
SUM('Solar Output'[Average]),
FILTER(
ALL('Solar Output'[Date]),
'Solar Output'[Date] = VALUES('Best Day'[Date])
)
)
(不太清楚你是如何计算你的中间措施的,所以你可能需要根据你的措施进行调整)
是的,TOPN()
returns一个table,所以你可以使用VALUES('Best Day'[Date])
获取日期值并用于比较。
结果:
解决此问题的替代方法是使用 MAXX()
函数从 TOPN()
.
返回的 table 中获取标量值
这在 MAX()
不适用的地方有效,因为 MAXX()
接受 table 表达式 作为其第一个参数(table 表达式是 TOPN()
函数的结果),其中 MAX()
仅采用现有 table 中的列。
Best Day = MAXX(TOPN(1,
SUMMARIZE(ALL('Solar Output'),
'Solar Output'[Date],
"Daily Production (KWh)",
[Avg Daily Production (KWh)]),
[Daily Production (KWh)],
DESC),
[Date])
这种方法的好处是它应该在没有计算 table 支持的 DAX 版本中工作(例如 SSAS 2014、Excel 2013)。
我在 PowerBI(2017 年 10 月版)中有一些数据显示某些太阳能电池板以 five-minute 间隔的快照输出。
我目前有一个方法,通过获取当天的瞬时读数的总和除以 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)])
对于我的可视化效果,我想展示一个图表,显示一天中不同时间的平均产量与最佳一天当时产量的比较,即 [=13 值最高的那一天] =].
这是我目前的工作:
使用
识别最高日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]))
我想要的图表看起来像这样,选定日期的平均产量用绿色表示,然后另一个系列显示最佳日期那些时间的产量用红色铅笔表示。
无法真正理解所涉及的计算,但我希望我能满足您的要求。
所以你想在同一张图表上画两条线,一条总是最好的一天的数据作为参考,另一条是从日期过滤器中选择的数据,对吗?
根据上面给出的信息,您实际上已经很接近解决方案了。
我刚刚将您的 DAX 修改为:
Production On Best Day (KW) =
CALCULATE(
SUM('Solar Output'[Average]),
FILTER(
ALL('Solar Output'[Date]),
'Solar Output'[Date] = VALUES('Best Day'[Date])
)
)
(不太清楚你是如何计算你的中间措施的,所以你可能需要根据你的措施进行调整)
是的,TOPN()
returns一个table,所以你可以使用VALUES('Best Day'[Date])
获取日期值并用于比较。
结果:
解决此问题的替代方法是使用 MAXX()
函数从 TOPN()
.
这在 MAX()
不适用的地方有效,因为 MAXX()
接受 table 表达式 作为其第一个参数(table 表达式是 TOPN()
函数的结果),其中 MAX()
仅采用现有 table 中的列。
Best Day = MAXX(TOPN(1,
SUMMARIZE(ALL('Solar Output'),
'Solar Output'[Date],
"Daily Production (KWh)",
[Avg Daily Production (KWh)]),
[Daily Production (KWh)],
DESC),
[Date])
这种方法的好处是它应该在没有计算 table 支持的 DAX 版本中工作(例如 SSAS 2014、Excel 2013)。