我试图计算DAX中的业务逻辑,结果证明资源非常庞大且复杂。我有一个非常大的PowerPivot模型(称之为"销售"),有许多维度和措施。销售模型的简化视图:
+-------+--------+---------+------+---------+-------+
| State | City | Store | Week | Product | Sales |
+-------+--------+---------+------+---------+-------+
| NY | NYC | Charlie | 1 | A | $5 |
| MA | Boston | Bravo | 2 | B | $10 |
| - | D.C. | Delta | 1 | A | $20 |
+-------+--------+---------+------+---------+-------+
基本上我尝试做的是按商店和周计算产品的DISTINCTCOUNT:
SUMMARIZE(Sales,[Store],[Week],"Distinct Products",DISTINCTCOUNT([Product]))
+---------+------+-------------------+
| Store | Week | Distinct Products |
+---------+------+-------------------+
| Charlie | 1 | 15 |
| Charlie | 2 | 7 |
| Charlie | 3 | 12 |
| Bravo | 1 | 20 |
| Bravo | 2 | 14 |
| Bravo | 3 | 22 |
+---------+------+-------------------+
然后,我想在商店一级计算这些不同产品的平均值。我接近这个的方法是先进行计算,然后在它上面运行一个SUMX并将它除以不同的周数:
SUMX(
SUMMARIZE(Sales,[Store],[Week],"Distinct Products",DISTINCTCOUNT([Product]))
,[Distinct Products]
) / DISTINCTCOUNT([Week])
+---------+------------------+
| Store | Average Products |
+---------+------------------+
| Charlie | 11.3 |
| Bravo | 18.7 |
+---------+------------------+
我将这个计算存储在一个度量中,当数据集较小时它运行良好。但是现在数据集非常庞大,当我尝试使用该测量时,它会挂起,直到我必须取消该过程。
有更有效的方法吗?
答案 0 :(得分:2)
SUMX在这种情况下是合适的,因为您希望为每个商店和每个商店独立计算不同的产品数量。每个星期,然后由商店汇总,然后除以商店的周数。没有办法解决这个问题。 (如果有的话,我会推荐它。)
但是,SUMX是一个迭代器,因此可能导致速度减慢。由于我们无法完全消除SUMX,因此这里最大的因素是您拥有的商店/周的组合数量。
要确认商店/周的组合数量是否是减速的来源,请尝试过滤或从数据模型的副本中删除50%,看看是否加快了速度。如果没有超时,请重新添加更多内容,以了解失败点的组合数量。
使用完整数据集加快速度:
Calculated Table =
SUMMARIZE (
Sales,
[Store],
[Week],
"Distinct Products", DISTINCTCOUNT ( Sales[Product] )
)
注意:上面计算的表格代码是基本的,主要是作为概念证明。如果这是您所采用的路径,则您需要确保具有单独的商店维度以将计算表连接到,因为这不会直接连接到源表
Measure Using Calc Table =
SUMX (
'Calculated Table',
[Distinct Products] / DISTINCTCOUNT ( 'Calculated Table'[Week] )
)
杰森·托马斯(Jason Thomas)在计算表格上发表了一篇很棒的文章,以及它们何时可以在这里发挥作用:http://sqljason.com/2015/09/my-thoughts-on-calculated-tables-in.html。
如果您不能使用计算表,但您的数据来自某种形式的数据库,那么您可以在SQL中执行相同的逻辑,然后导入预先准备的独立存储/月份的独立表及其独特的计数。
我希望其中一些证明有用(或者你以另一种方式解决了问题)。