因此,我有这段代码可以检查我们制造的哪些机器当前处于活动状态。当前活动机器的标准是,在最近四个星期中,它至少每周生产25个小部件。用DAX编写代码并不难,但是我们对定义不满意。当前的问题是,如果一台机器的工作时间缩短了一周,那么即使它只有一周的时间少于25个小部件,该机器现在也将被视为处于非活动状态。我们现在想要做的是将过去四周的定义更改为3/4周。这样一台机器就不会在一个缓慢的一周内被标记为不活动。
事实证明,这比我想象的要难。我最初的想法是使VAR计数器= 0,并且如果计数器为3或更高,则每周对每个TRUE进行计数。问题是我只是不知道如何在DAX中使用VAR,我只是不明白。
ActiveMachines = IF(
(CALCULATE(SUM('Query1'[TrayProduced Hourly]),
DATESINPERIOD('Query1'[TrayProducedDay].[Date]
,CALCULATE(MAX('Query1'[TrayProducedDay].[Date]), FILTER(ALL('Query1'), 'Query1'[TrayProduced Hourly]))
,-7
,DAY)
) > 25 &&
CALCULATE(SUM('Query1'[TrayProduced Hourly]),
DATESINPERIOD('Query1'[TrayProducedDay].[Date]
,(CALCULATE(MAX('Query1'[TrayProducedDay].[Date]), FILTER(ALL('Query1'), 'Query1'[TrayProduced Hourly])) - 7)
,-7
,DAY)
) > 25 &&
CALCULATE(SUM('Query1'[TrayProduced Hourly]),
DATESINPERIOD('Query1'[TrayProducedDay].[Date]
,(CALCULATE(MAX('Query1'[TrayProducedDay].[Date]), FILTER(ALL('Query1'), 'Query1'[TrayProduced Hourly])) - 14)
,-7
,DAY)
) > 25 &&
CALCULATE(SUM('Query1'[TrayProduced Hourly]),
DATESINPERIOD('Query1'[TrayProducedDay].[Date]
,(CALCULATE(MAX('Query1'[TrayProducedDay].[Date]), FILTER(ALL('Query1'), 'Query1'[TrayProduced Hourly])) - 21)
,-7
,DAY)
) > 25), TRUE, FALSE)
上面的代码当前有效,现在我需要添加(或删除或其他任何内容)以使我的想法在这里起作用吗?任何帮助将不胜感激:)
答案 0 :(得分:0)
我也在PowerBi论坛上问过,在那里我得到了这个答案:
ActiveMachines = IF(
(IF(CALCULATE(SUM('MetricsQuery'[TrayProduced Hourly]),
DATESINPERIOD('MetricsQuery'[TrayProducedDate].[Date]
,CALCULATE(MAX('MetricsQuery'[TrayProducedDate].[Date]), FILTER('MetricsQuery', 'MetricsQuery'[TrayProduced Hourly]))
,-7
,DAY)
), 1) +
IF(CALCULATE(SUM('MetricsQuery'[TrayProduced Hourly]),
DATESINPERIOD('MetricsQuery'[TrayProducedDate].[Date]
,(CALCULATE(MAX('MetricsQuery'[TrayProducedDate].[Date]), FILTER('MetricsQuery', 'MetricsQuery'[TrayProduced Hourly])) - 7)
,-7
,DAY)
), 1) +
IF(CALCULATE(SUM('MetricsQuery'[TrayProduced Hourly]),
DATESINPERIOD('MetricsQuery'[TrayProducedDate].[Date]
,(CALCULATE(MAX('MetricsQuery'[TrayProducedDate].[Date]), FILTER('MetricsQuery', 'MetricsQuery'[TrayProduced Hourly])) - 14)
,-7
,DAY)
), 1) +
IF(CALCULATE(SUM('MetricsQuery'[TrayProduced Hourly]),
DATESINPERIOD('MetricsQuery'[TrayProducedDate].[Date]
,(CALCULATE(MAX('MetricsQuery'[TrayProducedDate].[Date]), FILTER('MetricsQuery', 'MetricsQuery'[TrayProduced Hourly])) - 21)
,-7
,DAY)
), 1)
>= 3), TRUE, FALSE)