首页 > 解决方案 > DAX:在选择中运行计数不同

问题描述

我的 Power Query 模型中有一个数据表,如下所示:

日期 客户ID 类别1 类别2
1 1 1 1
2 1 1 2
3 4 2 3
1 2 2 2
2 2 1 3
3 4 1 1
1 2 2 2
2 3 2 1
3 5 1 3
1 1 1 1
2 3 2 3
3 6 2 2
1 2 1 3
2 2 1 2
3 5 1 1

我有一个计算出不同 customer_id 的度量:

Distinct_cust:=DISTINCTCOUNT(Table1[customer_id]))

此措施在数据透视表中效果很好 - 它可以正确计算我添加到数据透视表和所有小计的任何和所有字段的所有插入。

现在我想要一个可以在给定交集范围内工作但考虑到以前的日期值的测量 - 它应该返回与 custeomer_id 不同的运行计数,但仅适用于当前数据透视表中的天数。

现在我有这样的东西,几乎可以正常工作:

Cumulative_Distinct_cust:=CALCULATE (
    [Distinct_cust];
    FILTER (
        ALL ( 'Table1'[date] );
        'Table1'[date] <= MAX ('Table1'[date]) 
    )
)

这将返回正确运行的不同计数,但前提是未在我的数据透视表中过滤掉所有日期。一旦我从枢轴中删除第 nr 1 天,如果还考虑了第 1 天,它仍然显示第 2 天和第 3 天的运行计数不同:

我遇到的问题示例

我想出的蛮力解决方案是在 FILTER 语句中手动添加日过滤器,它将日期限制为仅第 2 天和第 3 天:

Cumulative_Distinct_cust:=CALCULATE (
    [Distinct_cust];
    FILTER (
        ALL ( 'Table1'[date] );
        AND(
              'Table1'[date] >= 2; <-- added this to filter
              'Table1'[date] <= MAX ( 'Table1'[date]) 
    )
))

固定版本

(您可以在标记为 1 的列中看到差异)

但显然,每次我想更改日期范围时,这都是丑陋和麻烦的。是否有任何方法可以传递日期字段的当前可用值以进行此计算?

标签: exceldaxpowerquery

解决方案


你可以这样做:

Cumulative_Distinct_cust:=VAR _date = MAX(Table1[date])
VAR _dates = CALCULATETABLE(VALUES(Table1[date]); ALLSELECTED())
VAR _rt_dates = FILTER(_dates; Table1[date]<= _date)
RETURN
CALCULATE([Distinct_cust];_rt_dates)

推荐阅读