DAX HASONEVALUE行过滤器

DAX HASONEVALUE行过滤器,dax,tabular,Dax,Tabular,我想添加一个条件,如果lever 03=现金、计算和成本,则返回空白以删除小计行。我尝试过类似的方法,但它不能正常工作,这给了我错误“column level03的值无法在当前上下文中确定”。如何在level03列中添加该条件?只是一个旁注,“它工作不正常”对于确定问题的根源非常没有帮助。特别是在动力轴/表格模型中 在语法上,有一些错误。在深入研究其他度量定义之前,让我们先解决这些问题,看看行为是否合适 这一部分就是问题所在: 12 Total := SWITCH ( TRUE (),

我想添加一个条件,如果lever 03=现金、计算和成本,则返回空白以删除小计行。我尝试过类似的方法,但它不能正常工作,这给了我错误“column level03的值无法在当前上下文中确定”。如何在level03列中添加该条件?

只是一个旁注,“它工作不正常”对于确定问题的根源非常没有帮助。特别是在动力轴/表格模型中

在语法上,有一些错误。在深入研究其他度量定义之前,让我们先解决这些问题,看看行为是否合适

这一部分就是问题所在:

12 Total :=
SWITCH (
    TRUE (),
    HASONEVALUE ([level04] ), CALCULATE (
        [Local],
        DATESINPERIOD (
            Calendar[Date],
            MAX ( Calendar[Date] ),
            -12,
            MONTH
        )
    ),
    HASONEVALUE ([level03]),If([level 03]= "calculation:" && [level03]= "Cash:" && [level03]= "Costs:"=>0, Blank(), CALCULATE (
        [Local],
        DATESINPERIOD (
            Calendar[Date],
            MAX ( Calendar[Date] ),
            -12,
            MONTH
        )
)
        ),
        HASONEVALUE ( [level02] ), BLANK ()
    )
在重写过程中,我将把谓词的组合更改为逻辑or,这样IF()就可以返回空白。按照上面写的方式,即使修复语法错误,也会导致它始终计算else条件,因为[level 03]不能同时具有“calculation:”、“Cash:”和“Costs:=>0”的值

。。。
,HASONEVALUE(“”[level03])
//作为最佳实践,您应该始终使用完全合格的
//列引用-“表”[字段]
//另外,我只提到了下面的[level03]
,如果(//注意我们已经将[level 03]包装在下面的VALUES()中-这将
//允许我们与标量文本进行比较
值(“”[level03])=”计算://双引号
||值(''[level03])=“现金:”
//注意:我们已将逻辑and、&&更改为逻辑and
//或者,| |-表示如果这些谓词中的任何一个为真,
//我们将空白返回
||价值(''[level03])=“成本:=>0”
,BLANK()
,计算(
[本地]
,DATESINPERIOD(
日历[日期]
,最大值(日历[日期])
,-12
,月
)
)
)
,....
这将检查透视表中[level03]只有一个不同值的任何单元格,如果为真,它将计算IF()函数


函数的作用是:检查[level03]的值。如果该值是以下三个值中的任意一个,“计算:”、“现金:”、或“成本:=>0”,则返回为空。如果[level03]的值不是这三个值中的任何一个,它将计算CALCULATE(),它将返回滚动12个月期间的度量值[Local]。

非常感谢!我从没想过价值观,谢谢!
...
,HASONEVALUE([level03])
    // Note, you are inconsistent in referring to [level03] and
    // [level 03]
,If( // Below you are testing column references against scalar
     // literals. DAX doesn't understand how to do this, so you
     // have to wrap each reference in a VALUES() function, which
     // can be implicitly converted to a scalar value
    [level 03] = 'calculation:'   // DAX needs double quotes: ""
        && [level03]= 'Cash:'     // You have multiple predicates
        && [level03]=' Costs:'=>0 // for a single field combined
                                  // with a logical and - these
                                  // can't all simultaneously be true
    ,Blank()
    ,CALCULATE(
        [Local]
        ,DATESINPERIOD(
            Calendar[Date],
            MAX ( Calendar[Date] ),
            -12,
            MONTH
        )
    )
)
,....
...
,HASONEVALUE('<table>'[level03]) 
    // As a best practice, you should always use fully qualified
    // column references - 'table'[field]
    // Also, I've referred only to [level03] below
,IF( // Note we've wrapped [level 03] in VALUES() below - this will
     // allow our comparisons to scalar literals
    VALUES('<table>'[level03]) = "calculation:" // double quotes
        || VALUES('<table>'[level03]) = "Cash:"  
            // Note: we've changed the logical and, &&, to a logical
            // or, || - meaning if any 1 of these predicates is true,
            // we'll return BLANK
        || VALUES('<table>'[level03]) = " Costs:=>0"
    ,BLANK()
    ,CALCULATE(
        [Local]
        ,DATESINPERIOD(
            Calendar[Date]
            ,MAX( Calendar[Date] )
            ,-12
            ,MONTH
        )
    )
)
,....