Power BI中是否有类似SUMX+Filter的方式实现DISTINCTCOUNT?
去年同期位置ID去重计数的DAX实现方案
你已实现计算任意选定区间去年销售额的DAX度量值:
Total Net Sales LY = VAR MINSequentialDayNumber = MIN('Dim_Date'[SequentialDayNumber-LY]) VAR MAXSequentialDayNumber = MAX('Dim_Date'[SequentialDayNumber-LY]) RETURN SUMX( FILTER( ALL(Dim_Date), 'Dim_Date'[SequentialDayNumber]>=MINSequentialDayNumber && 'Dim_Date'[SequentialDayNumber]<=MAXSequentialDayNumber),[Total Net Sales])
由于DAX中不存在DISTINCTCOUNTX函数,你尝试的代码无法运行,以下是两种无需创建单独去重表的替代实现方案:
方案一:CALCULATE + DISTINCTCOUNT组合
这是最简洁的实现方式,利用CALCULATE的筛选上下文修改能力:
Location Count LY = VAR MIN_LY_Day = MIN('Dim_Date'[SequentialDayNumber-LY]) VAR MAX_LY_Day = MAX('Dim_Date'[SequentialDayNumber-LY]) RETURN CALCULATE( DISTINCTCOUNT('Fact_Sales'[Location_ID]), -- 替换为你的事实表位置ID列 FILTER( ALL('Dim_Date'), 'Dim_Date'[SequentialDayNumber] >= MIN_LY_Day && 'Dim_Date'[SequentialDayNumber] <= MAX_LY_Day ) )
方案二:SUMMARIZE + COUNTROWS组合
如果需要更灵活的筛选逻辑(比如同时过滤其他维度),可以先生成唯一位置ID集合再计数:
Location Count LY = VAR MIN_LY_Day = MIN('Dim_Date'[SequentialDayNumber-LY]) VAR MAX_LY_Day = MAX('Dim_Date'[SequentialDayNumber-LY]) VAR LY_Unique_Locations = SUMMARIZE( FILTER( ALL('Fact_Sales'[Location_ID], 'Dim_Date'), 'Dim_Date'[SequentialDayNumber] >= MIN_LY_Day && 'Dim_Date'[SequentialDayNumber] <= MAX_LY_Day ), 'Fact_Sales'[Location_ID] ) RETURN COUNTROWS(LY_Unique_Locations)
注意事项
- 将代码中的
Fact_Sales替换为你的实际事实表名称,Location_ID替换为需要去重计数的位置ID列 - 两种方案均无需额外创建去重表,直接在度量值内完成去年同期的位置ID去重计数逻辑
内容的提问来源于stack exchange,提问作者Roger Clerkwell
相关产品推荐
相关产品推荐

