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])
我有一个客户 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])