DAX在没有应用值过滤器的情况下为每个子组计算值

时间:2018-10-09 21:30:04

标签: excel dax powerpivot

我有一个数据透视表,其中包含2个切片器以管理人口(早晨/下午;访问类型),3个子组,其中ID和名称作为行,而3个计算的度量作为列:
1.基本计数公式:
 =COUNTROWS(Visit)
2.中位数公式:

=(MINX (FILTER (VALUES (Visit[Colum1]),  
  CALCULATE (COUNT (Visit[Colum1]), Visit[Colum1]   
<= EARLIER (Visit[Colum1])) > COUNT ( Visit[Colum1]) / 2), Visit[Colum1]...

3。查找/ SUM公式:
=IF(CALCULATE(SUM(PE_new[DenominatorNBR2]), RELATEDTABLE(Visit)) < 30, BLANK(), CALCULATE(SUM(PE_new[NumeratorNBR2]), RELATEDTABLE(Visit)) / CALCULATE(SUM(PE_new[DenominatorNBR2]), RELATEDTABLE(Visit)))

我试图找到解决方案的问题是仅在C列中显示值等于或大于10的行(度量1(总和))。 我可以使用ID或Names列的“值过滤器”来做到这一点,但是在这种情况下,小计也将发生变化(减少记录数),但我需要显示每个组作为一个整体的小计,不仅是这些行的计算包含10个以上的值。

是否有一种方法可以为小计编写/更改DAX公式,从而计算整个组的值,而不考虑“值过滤器”? 或者,也许还有其他选项可以只显示等于或大于10的行,但以小计的形式计算整个组的值?

将感谢您的帮助!

这是原始表格:

enter image description here

这就是我现在得到的(小计基于当前/已过滤的数据透视记录:C列中的值等于或大于10(度量1(总和))):

enter image description here

寻找此结果(显示每个组的总体小计):

enter image description here

带有“值过滤器”过滤器的屏幕截图:

enter image description here

1 个答案:

答案 0 :(得分:1)

您可以使用HASONEVALUE中的ISFILTERED之类的功能,将度量设置为根据小计是否进行不同的计算。因此,如果您使用“值过滤器”来限制看到的行,则仍然可以通过使用适当的过滤器上下文来获得包括所有行在内的小计。

例如,对于基本计数,您可以编写如下内容

CountMeasure = 
IF(HASONEVALUE(Visit[ID]),
    COUNT(Visit[Column1]),
    CALCULATE(COUNT(Visit[Column1]), ALLEXCEPT(Visit, Visit[Group]))
)

ALLEXCEPT函数将删除所有过滤器上下文,但您指定的列除外。相同的模式也应适用于其他措施:

SubtotalMeasure = 
IF(HASONEVALUE(Visit[ID]),
    [Measure],
    CALCULATE([Measure], ALLEXCEPT(Visit, Visit[Group]))
)

编辑:响应您的评论,从值过滤中获取单独的切片器选择有些棘手,因为DAX度量对它们的处理方式相似。但是,如果它们在不同的列上切片/过滤,则应该可以。

例如,如果您在ID上有切片器,则可以将该列作为另一个参数ALLEXCEPT传递到ALLEXCEPT(Visit, Visit[Group], Visit[ID])函数中。这样可以防止它删除ID上的切片器筛选。

在保留切片器选择的同时删除过滤器上下文的标准方法是使用ALLSELECTED。但是,这也会保留值过滤。

您可以结合使用这些特定类型的过滤器上下文。例如,

SubtotalMeasure =
VAR CurrentGroup = MAX(Visit[Group])
RETURN
IF(HASONEVALUE(Visit[ID]),
    [Measure],
    CALCULATE([Measure],
        ALLSELECTED(Visit),
        ALL(Visit[Name]),
        Visit[Group] = CurrentGroup
    )
)

The将以AND的方式组合所有这些参数。 ALLSELECTED(Visit)将保留所有切片器和值过滤器(但不保留数据透视表上下文),ALL(Visit[Name])将删除Name列上的值过滤器(但也将保留所有切片器选择)列),Visit[Group]会将Group列的过滤器上下文设置为仅是由上述变量定义的当前表中当前行的Group值。

由于我不知道您拥有的所有列和切片器等等,因此我不能保证这种特定的组合将对您的特定设置有效,但是它应该使您了解可以尝试哪种操作