基于YTD和的滤波器Dax计算

时间:2018-06-14 22:16:54

标签: dax ssas-tabular

在表格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 :(得分:0)

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

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

另外,请确保您的日历&#39;表已被标记为日期表。如果出于某种原因,您希望将其标记为日期表,请将上述DAX重写为:

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

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

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

同样,如果您还没有标记自己的日历&#39;将表作为日期表添加ALL(Calendar)以删除特定日历列上的过滤器。