Power BI / DAX - 具有动态计数的堆积柱形图

Power BI / DAX - Stacked Column Chart with Dynamic Count

我有一个客户 table,如下所示:

Customers

Name         ID           Number of Purchases
Billy        100          2
Steve        101          1
Alison       102          5
John         103          3
Matt         104          0
Andrew       105          1

我有一个标准的日期维度

 Date          Month        Year
 1/1/2017      January      2017
 1/2/2017      January      2017
 1/3/2017      January      2017
 1/4/2017      January      2017
 ...
 2/1/2017      February     2017
 2/2/2017      February     2017
 2/3/2017      February     2017
 2/4/2017      February     2017

我有购买 table

Purchases

 Date         Name      ID       Amount
 1/1/2017     Billy     100      10.53
 1/1/2017     Alison    102      15.90
 1/2/2017     Alison    102      9.87
 1/3/2017     Steve     101      12.59
 1/4/2017     Billy     100      22.19
 1/4/2017     John      103      17.45
 1/5/2017     John      103      8.79
 2/1/2017     Alison    102      9.87

我正在尝试开发一些东西,让每个顾客都根据他们在 selected 日期范围内的购买数量被扔进垃圾箱。

所以如果我 select 1/1/2017 - 1/2/2017,我应该只有 2 个柱。第一个条形在 x 轴上应该有一个 1,值为 1,因为 "Billy" 在 selected 时间段内进行了 1 次购买,第二个条形图将为 2,它也将有一个值为 1,因为 "Alison" 在 selected 时间段内进行了 2 次购买。如果我将 [购买数量] 放在 x 轴上然后使用

NameCount = CALCULATE( COUNT(Purchases[ID]), FILTER(Purchases, Purchases[ID] = RELATED(Customer[ID])))

对于值,它告诉我有 3 个人购买了 5 次,但事实并非如此。实际上,实际上没有人在 Purchases table 上有 5 次购买。艾莉森以 3 次购买领先。

为了实现这一点,我计划使用堆积柱形图,我只是不知道轴和值使用什么。 Axis 只允许我使用静态列,这很好,但我可以让客户购买 50 次。

我认为答案是开发一个经过计算的 table,但我以前从未这样做过,所以我不确定 how/if 是否可行。

需要更改一些内容才能完成您想要的。我将尝试解释您的场景中发生的情况,然后提供一些您可能更改的内容。

为什么会得到这个结果?

当您将日期过滤器设置为 2017 年 1 月 1 日 - 2017 年 1 月 2 日时,您还有以下购买(包括过滤器中选定的日期):

Date         Name      ID       Amount
1/1/2017     Billy     100      10.53
1/1/2017     Alison    102      15.90
1/2/2017     Alison    102      9.87
2/1/2017     Alison    102      9.87

当您在 X 轴上设置带有客户[购买] 的条形图,并且您的度量值

NameCount = CALCULATE( COUNT(Purchases[ID]), FILTER(Purchases, Purchases[ID] = RELATED(Customer[ID])))

在 Y 轴上,那么您实际上是在计算采购 table 中 [ID] 的数量,并将其显示为来自客户 table 的相关 [采购] 值。

根据您的客户 table,艾莉森购买了 5 件商品,比利购买了 2 件商品。这些是静态值,不受日期过滤器的任何影响。

COUNT() 函数不会return 不同数量的 [ID](您可以使用 DISTINCTCOUNT() 函数来实现此目的)。因此,您将在 Y 轴上看到值 3(艾莉森在所选日期的购买 table 中出现三次)在 X 轴上看到值 5(根据您的客户,艾莉森有 5 次购买 table).比利也是如此。

你可以改变什么来完成你想要的?

您想要完成的事情并非易事。您想要在一个轴上使用动态度量(所选期间内每个客户的购买数量),并在另一个轴上使用另一个动态度量(所选期间内不同的客户数量)。这不能在 PowerBI 中完成。这里的问题是动态日期过滤器,它会阻止您将购买数量预先计算为计算列。

一种解决方案是创建一个新的 table,其中包含每个客户每月的购买次数。然后,您可以仅在一个月内使用过滤器,并在 X 轴上显示该月每位客户的购买次数。这是可能的,因为购买数量是一个预先计算的数字(一列,而不是度量)。在 Y 轴上,您可以使用这样的度量:

CustomerCount = DISTINCTCOUNT(PurchasesPerMonth[CustomerID])