达克斯。小计和总计的问题

DAX. Problem with subtotals and grand totals

希望你做得很好,可以帮助解决 DAX for PowerBI 和 PowerPivot 中的这个难题。

我在计算小计和总计时遇到问题。我的场景如下:

我有 3 个 table(我在下面分享了一个 link 和一个测试文件,这样你就可以看到它并在那里工作 :robothappy:):

1) "Data"(每个收银机都是巴士公司售出的车票);

2) "Km"(我有公共汽车在各自公里内可以做的所有可能的轨道)。与"Data";

相关

3) 和一个 "Calendar"。与 "Data".

有关

在"Data"中,我有一段时间内售出的所有机票及其价格、乘客购买的轨道以及该轨道的出发时间。

每个轨道可以有超过 1 个出发时间(我们可以称之为服务)但只有特定的公里长度(它们的公里数在 "Km" table 中指定)。

基本上我需要的是计算一段时间内(年、月、日)每项服务每公里的收入。

计算基本上应该是:

[价格]的总和(该期间售出的每张票)/[公里]的总和(该期间考虑服务及其各自的公里数)

我设法用以下逻辑和措施计算了一天的粒度:

Revenue = SUM(Data[Price])

Unique dates = DISTINCTCOUNT(Data[Date])

Revenue/Km = DIVIDE([Revenue]; SUM(Km[Km])*[Unique dates]; 0)

我创建了 [Unique dates] 来计算它,因为我试图管理轨道粒度的小计,同时考虑到您在此期间可以有超过 1 天的服务时间。例如:

"Track 1" 我们注册了:

周一 (lunes) 在 5:00am 有 1 次服务。

Revenue = .140. 
Km = 115. 
Tickets = 6. 
Revenue/Km = 1.140/115 = 9,91.

星期二 (martes) 在 5:00am 有 1 次服务。

Revenue = . 
Km = 115. 
Tickets = 2. 
Revenue/Km = 67/115 = 0,58.

"Subtotal Track 1" 应该是:

Revenue = 1.140 + 67 = 1.207.
Km = 115 + 115 = 230.
Tickets = 6 + 2 = 8.
Revenue/Km = 1.207/230 = 5,25.

所以在那种情况下,有人会认为我的公式有效,但是当我每天有超过 1 次服务时,例如第 3 轨道,你会看到这个问题。而且这种影响对 3 月的总计(马佐)。

我明白了,问题是计算每个时期每个轨道的正确公里数。如果查"Sum[Km]"栏也是错的

这是一个 table(excel 要下载的文件 - 选项卡 "Goal"),其中包含应显示的值:

[目标] https://drive.google.com/file/d/1PMrc-IUnTz0354Ko6q3ZvkxEcnns1RFM/view?usp=sharing

[pbix 样本文件]https://drive.google.com/file/d/14NBM9a_Frib55fvL-2ybVMhxGXN5Vkf-/view?usp=sharing

希望你能理解我的问题。如果您需要更多详细信息,请告诉我。

非常感谢您!!!

安迪.-

删除 "Sum of Km" - 您应该始终改为编写 DAX 度量。

为行驶的公里数创建新度量:

Total Km =
SUMX (
    SUMMARIZE (
        Data,
        Data[Track],
        Data[Date],
        Data[Time],
        "Total_km", DISTINCT ( Data[Kilometers Column] )
    ),
    [Total_km]
)

然后,改变[Revenue/Km]测量:

Revenue/Km = DIVIDE([Revenue], [Total Km])

结果:

该度量在小计和总计级别上都正确计算了公里数。 它的工作方式:

首先,我们使用 SUMMARIZE 按行程对记录进行分组(其中行程是行程、日期和时间的唯一组合)。然后,我们在摘要中添加一列,其中包含每次行程的公里数。最后,我们使用 SUMX 逐个记录地迭代摘要记录,并对行程距离进行求和。

该解决方案应该可行,但我建议对数据模型设计给予更多思考。你需要构建更好的星型模式,否则 DAX 将继续面临挑战。例如,我会考虑向每条记录添加类似 "Trip Id" 的内容 - 迭代此类 id 而不是一直对记录进行分组会容易得多。此外,更具描述性的名称有助于使 DAX 变得干净(像 km[km] 这样的名称看起来有点奇怪:)