在表格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个月购买该项目的客户。
答案 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)
以删除特定日历列上的过滤器。