由Azure数据仓库支持的Power BI中基于时间的下钻

时间:2016-05-11 23:06:30

标签: azure data-warehouse powerbi azure-sqldw bigdata

我设计了一个简单的Azure数据仓库,我想定期跟踪我的产品库存。此外,我希望能够看到按月,周,日和小时分组的数据,并能够从上到下进行深入分析。我定义了3个维度:

DimDate
DimTime 
DimProduct

我还定义了一个Fact表来跟踪产品库存:

FactStocks
- DateKey (20160510, 20160511, etc)
- TimeKey (0..23)
- ProductKey (Product1, Product2)
- StockValue (number, 1..9999)

我的事实样本数据如下:

20160510 20 Product1 100
20160510 20 Product2 30
20160510 21 Product1 110
20160510 21 Product2 35
20160510 22 Product1 112
20160510 22 Product2 28
20160510 23 Product1 120
20160510 23 Product2 31
20160511 00 Product1 150
20160511 00 Product2 29
20160511 01 Product1 95
20160511 01 Product2 40

我需要的是产品可用性随时间变化的图表,能够检查总数(x轴代表小时数),以及按特定产品过滤的能力:

Total - 130, 145, 140, 151, 179, 135
Product1 - 100, 110, 112, 120, 150, 95;
Product2 - 30, 35, 28, 31, 29, 40;

x-> 20,21,22,23,00,01

此外,我需要能够按天和产品向上钻取和浏览平均可用性(其中x轴表示通过DimDate表格提供的天,周,月,年):

Total - 141.5, 157
Product1 - 110.5, 122.5
Product2 - 31, 34.5

x-> 20160510, 20160511

似乎Power BI无法按日期创建该组,因为它尝试使用聚合函数来获取每日值,并且无法指定将使用的平均函数考虑产品(按产品分组)。聚合函数在这里不起作用,Power BI试图在给定的一天内对所有产品的所有值求和并得到平均值(例如20160511):

150+29+95+40 / 4 = 78.5

当我需要的是以下内容时:

(150+29) + (95+40) / 2 = 157

我只是想让它具有选择产品和轻松上下钻取的能力。请告知我应该如何修改仓库结构以支持我的方案。

3 个答案:

答案 0 :(得分:3)

我认为你不需要改变你的结构。我将在FactStocks表上创建一个新度量(使用Power BI Desktop),根据您的需要使用DAX函数计算可用性。

我猜了一下,因为除了一个例子你还没有真正说明你的要求,但它可能看起来像这样:

Availability = SUM([StockValue])/DISTINCTCOUNT([ProductKey])

这是关于PBI桌面中的度量的完整教程:

https://powerbi.microsoft.com/en-us/documentation/powerbi-desktop-tutorial-create-measures/

答案 1 :(得分:1)

我认为这里的问题是你的衡量标准实际上非常复杂 - 你每天要做的事情是总和,然后是多个平均值天。要做到这一点,你需要用DAX弄脏你。

我在没有编辑或数据的情况下写这个,所以如果我遇到一些语法错误或混淆我的参数顺序,请原谅我:

DailyAverage:=CALCULATE(SUMMARIZE('FactStocks', [DateKey], 'DailySum', Sum([StockValue])), AVG([DailySum]))

原则是SUMMARIZE(在SQL中基本为GROUP BY)你的表,按DateKey分组,总结每组中的值,然后平均结果(现在平均一行)每天而不是源表中的每一行。)

答案 2 :(得分:0)

您是否可以使用数据库视图进行计算和聚合?