首页 文章

基于YTD和过滤Dax计算

提问于
浏览
0

在表格SSAS模型中,我试图计算在YTD时间范围内购买给定产品的不同客户的数量 . 该表包含非显式总和的度量,因此无论销售情况如何,我都会获得每个客户的所有产品的笛卡尔积 . 我试图通过过滤YTD Sales = 0的客户/产品组合来限制计数 . 但是,我无法让FILTER识别DATESYTD上下文 . 它只根据所选日历月内存在的销售额进行过滤 . 我试过每个方向都插入ALL函数 .

这就是我到目前为止所拥有的 .

Measure: 
CALCULATE (
      DISTINCTCOUNT ( Fact[Customer] ), 
      DATESYTD ( Calendar[Date] ), 
      FILTER ( Fact, 
           CALCULATE ( [Sum of Sales], DATESYTD ( Calendar[Date] ) ) <> 0 
      )
 )

例如,如果明确选择了第5个月,则该措施将计算在第5个月购买产品的不同客户 . 但是,它不会包括在同一个月的第2个月购买该项目的客户 .

1 回答

  • 0

    我认为以下DAX应该可以解决这个问题:

    COUNTROWS(
        FILTER(
            VALUES(Fact[Customer]),
            CALCULATE ( [Sum of Sales], DATESYTD ( Calendar[Date] ) ) <> 0 
        )
    )
    

    另外,请确保'Calendar'表已标记为日期表 . 如果由于某种原因,您不希望将其标记为日期表,请将上述DAX重写为:

    COUNTROWS(
        FILTER(
            VALUES(Fact[Customer]),
            CALCULATE ( [Sum of Sales], DATESYTD ( Calendar[Date] ), ALL('Calendar') ) <> 0 
        )
    )
    

    Edit: 您的事实表中是否有 [Sum of Sales] 为0的记录?如果没有,那么您可以通过编写以下内容来大大简化并提高性能:

    CALCULATE(
        DISTINCTCOUNT(Fact[Customer]),
        DATESYTD( Calendar[Date] )
    )
    

    同样,如果您没有't marked your '日历'表作为日期表,请添加 ALL(Calendar) 以删除特定日历列上的过滤器 .

相关问题