powerbi - Power BI:DAX:以固定开始日期运行 Sum - 即使在过滤时
问题描述
我有两张桌子,有:
- Entrydate,几个类别
- ChurnDate,几个类别
类别通过不同的表格连接,日期与日历连接。
现在我想计算我有多少客户。所以我有以下 DAX 公式
1. SumChurn =
CALCULATE(
SUM('kuendigungen'[KUENDIGUNG]);
FILTER(
ALLSELECTED('Calendar'[Date]);
ISONORAFTER('Calendar'[Date]; MAX('Calendar'[Date]); DESC)
)
)
2. SumEntry =
CALCULATE(
SUM('eintritt'[NEUMITGLIED]);
FILTER(
ALLSELECTED('Calendar'[Date]);
ISONORAFTER('Calendar'[Date]; MAX('Calendar'[Date]); DESC)
)
)
3. TotalCustomers = SumEntry - SumChurn
这可行,但在我的图表中,我想过滤日期,以便它只显示 2020 年或过去 3 年。当我这样做时,计算是错误的,因为它只计算在这个间隔内。
有没有一种解决方案可以过滤我的视觉效果中的日期,但在我的计算中,累积和的开始日期始终是固定的?
我不想要一个新列,因为我仍然想过滤我的客户类别......
谢谢,米凯拉
编辑:尝试更清楚地解释它
示例表 1:包含新客户
Date unique_id1 unique_id2 unique_id3 cat1 cat2 cat3 cat4 cat5 cat6
1886-02-01 2070030124 550261 207000152145 207 0 0 1 0 0
1887-01-01 4350002756 4081878 435000010707 435 0 0 1 0 0
1888-01-01 7030000597 3206858 703000001279 703 0 0 1 0 0
1888-06-01 7030016696 3208056 703000005002 703 0 0 1 0 0
1888-09-01 8210024182 204124 821000008664 821 1 0 1 0 1
1889-01-01 7050055324 1988250 705000018309 705 1 0 1 0 0
1889-01-01 8250000278 439485 825000600296 825 0 0 1 0 0
1889-05-01 7030023754 3208355 703000000884 703 0 0 1 0 0
1889-10-01 2110071206 2849359 211000330019 211 0 1 1 0 0
1889-10-01 2110071236 2851371 211000120014 211 0 0 1 0 0
1889-11-14 5190529889 4260192 519000123846 519 1 0 1 0 0
1890-07-01 7330349030 4819467 733000013102 733 0 0 1 0 0
1890-07-01 7330152914 4817492 733000075604 733 1 0 1 0 1
1890-07-01 8190000889 486170 819000215708 819 0 0 1 0 0
1890-07-01 8190444976 486199 819000215740 819 0 0 1 0 0
1890-12-01 8190001388 476049 819000100005 819 0 0 1 0 0
1891-01-01 7030001248 3206975 703000000043 703 0 0 1 0 1
示例表 2:包含与表 1 类似的离开客户
日历表示例:
01.01.1990
02.01.1990
03.01.1990 ... (till today)
输出关闭是一个衡量标准
for each day in calendar: number of customer at this date = cumulative_sum(newcustomer) - cumulative_sum(churncustomer)
当我运行我编写的计算时,我得到了这个输出,但我想要以某种方式测量,当我过滤日期时,总和仍然是第一个日期的累积总和,否则数字是错误的。
编辑3:
正如 mkrabbani 发布的那样,我做了完全相同的事情,但它对我不起作用,以下计算:
TotalKuendigungen =
CALCULATE(
SUM('kuendigungen'[KUENDIGUNG]);
FILTER (
ALL ( 'Calendar'[Date] );
( 'Calendar'[Date] <= MAX ( ( 'Calendar'[Date] ))
)))
TotalNeukunden = CALCULATE(
SUM('eintritt'[NEUMITGLIED]);
FILTER (
ALL ( 'Calendar'[Date] );
( 'Calendar'[Date] <= MAX ( ( 'Calendar'[Date] ))
)))
AnzahlMitglieder = [SummeNeumitglied] - [SummeKuendigung]
这就是我的样子:(Neukunden:新客户,kündigungen:离开,aktuellemitglieder:客户数量)
解决方案
感谢您添加一些带有更多解释的示例数据。如果我的要求正确,下面的解释步骤将帮助您解决我希望的问题。
假设:如果我的理解是正确的,您有 3 个包含 Date、new_customer 和 leave_customer 的表,它们的相关性如下图所示。
现在,我创建了一些 10 天的示例数据,以可视化您的需求/问题。希望下表中的累积计数是正确计算的(使用累积计算的基础知识)。
在这个阶段,您需要一个度量来计算基于计算>“cumulative_new_customer-cumulative_leaving_customer”的每行的当前客户数量,这对您来说不是一项艰巨的工作。
但是,当您使用日期切片器对数据进行切片时,您会遇到问题。如果您选择日期编号 5,即我的示例数据中的“2020 年 1 月 5 日”。您想要基于日期 1 月 1 日至 05 日的最终计数,但您只获得一个日期“2020 年 1 月 5 日”的计数。
如果上面的解释是正确的,我建议写 3 个单独的 Measure,如下面的这个答案所述。您可以查看我添加的下图中的输出,并与切片数据之前和之后进行比较。您可以看到“2020 年 1 月 5 日”的当前用户数在两种情况下都是 41(切片前和切片后)
现在,如果以上一切都符合您的期望,您可以使用以下 3 项书面措施。
1.
cumulative_new_customer =
CALCULATE (
COUNT(new_customer[unique_id]),
FILTER (
ALL ( 'Dates'[Date] ),
'Dates'[Date] <= MAX ( 'Dates'[Date] )
)
)
2.
cumulative_leaving_customer =
CALCULATE (
COUNT(leaving_customer[unique_id]),
FILTER (
ALL ( 'Dates'[Date] ),
'Dates'[Date] <= MAX ( 'Dates'[Date] )
)
)
3.
number_of_cutomer_today = [cumulative_new_customer] - [cumulative_leaving_customer]
希望以上细节对您有所帮助。
推荐阅读
- string - 从 Matlab 中的单元格数组中删除 'NaN' 字符串和 [] 单元格
- apache-spark - SparkSQL:jdbc 数据源是否有“filterPushdown”功能
- visual-studio - WIX 从命令行参数更改产品名称和安装目录
- java - java中的大数据类型
- multithreading - 多人围棋程序
- azure - 基于自定义逻辑同时处理 azure blob 存储中的多个文件
- javascript - 如何在javascript中的三元运算符中使用括号
- python-3.x - 修改 Chainer DCGAN 模型的输入图像大小
- solr - 在 Solr 索引中插入记录耗时
- python - 在python中使用xarray重命名netcdf全局属性