首页 文章

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

提问于
浏览
0

我有一个带有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的行(Measure 1(Sum)) . 我可以使用ID值或名称列的“值过滤器”,但在这种情况下,小计也将更改(减少记录数)但我需要显示每个组的小计作为一个整体,而不仅仅是这些行的计算超过10个值 .

有没有办法为小计写入/更改DAX公式,它会计算整个组的值,而不考虑“值过滤器”?或者可能还有其他选项只显示值等于或大于10的行但是在小计中计算整个组的值?

将不胜感激任何帮助!

这是原始表:

enter image description here

这就是我现在得到的(小计基于当前/过滤的枢轴记录:C列(测量1(总和))中等于或大于10的值):

enter image description here

寻找这个结果(每个小组作为一个整体显示小计):

enter image description here

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

enter image description here

1 回答

  • 1

    您可以使用 HASONEVALUEISFILTERED 等函数将度量设置为根据是否为小计而进行不同的计算 . 因此,如果您使用"values filters"来限制您看到的行,您仍然可以通过使用适当的过滤器上下文来获取包含所有行的小计 .

    例如,对于基本计数,你可以写这样的东西

    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]))
    )
    

    Edit: 为了回应您的评论,从值过滤中获取单独的切片器选择有点棘手,因为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
        )
    )
    

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

    我无法保证这个特定的组合适用于您的特定设置,因为我不知道您拥有的所有列和切片器等等,但它应该让您了解您可以尝试的类型 .

相关问题