如何在表格模型中使用DAX使子总计和总计空白?

时间:2015-10-07 20:37:00

标签: dax tabular

12 Month Qty:=CALCULATE ( 
     [Qty],
   DATESINPERIOD ( 
       Calendar[Date] , 
       MAX(Calendar[Date]),
       -12, Month
   ) 
)

目前我有我测量的公式。 但是我想将所有小计和毕业总数设为空白。因此我需要正确地放置ISFILTERED功能。我用if(ISFILTERED())包装公式,但效果不好。那么我该如何正确实现ISFILTERED函数呢?或者如果我必须使用不同的配方,我应该在这种情况下使用什么配方?

1 个答案:

答案 0 :(得分:1)

根据您对原始问题的评论:

ISFILTERED()必须以列为参数,而不是度量。 ISFILTERED()将告诉您是否已将过滤器(通过数据透视表行,列,过滤器或切片器)应用于模型中的特定列。因此,您可以使用它来抑制在层次结构的某些级别上对度量的评估。

假设您在某个层次结构的子类别级别上有一个要显示为BLANK的度量类别> SubCategory>项目:

IF(
    ISFILTERED(<table>[SubCategory])
    ,BLANK()
    ,[Measure]
)

这将在[SubCategory]列应用过滤器的任何位置返回空白。

编辑评论:

您希望空白的层次结构是ISFILTERED()中要引用的列。

我通常会使用带有日期层次结构的模式来显示不同的聚合级别,我倾向于选择HASONEVALUE()作为我的测试。我将在SWITCH()函数中应用一系列这些测试。 SWITCH()只是嵌套IF()的语法糖 - 如果需要引用,你可以查找它。

因此:

MyConditionalMeasure:=
SWITCH( TRUE()
    ,HASONEVALUE(DimDate[Date] 
        // This means we're at the date level of the hierarchy
    ,[BaseMeasure] // The measure to evaluate at that first level
    ,HASONEVALUE(DimDate[Month]) 
        // This is true for a month or a date only, but we've
        // already captured the date possibility above
    ,[Month-appropriate Aggregation of BaseMeasure]
    ,HASONEVALUE(DimDate[Year])
        // Again, true for a single date or a single month, but
        // we've already covered those, so the year level is all
        // that's left
    ,[Year-appropriate Aggregation of BaseMeasure]
    ,BLANK() // The last argument is taken as a final ELSE
        // condition, capturing anything we didn't cover above,
        // which would include the grand total - this will blank the
        // grand total, or e.g. DimDate[Decade] since that is a
        // coarser granularity than we covered with our tests above