计算TRUE的度量

时间:2019-10-15 10:09:03

标签: powerbi dax

因此,我有这段代码可以检查我们制造的哪些机器当前处于活动状态。当前活动机器的标准是,在最近四个星期中,它至少每周生产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)

上面的代码当前有效,现在我需要添加(或删除或其他任何内容)以使我的想法在这里起作用吗?任何帮助将不胜感激:)

1 个答案:

答案 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)