如何解决在 Power BI 中为事实和维度编写 DAX
假设在 Power BI 中我有以下设置:
d_date (this is a date dimension)
d_customers (this is a customer dimension)
f_orders (this is a fact table)
f_orders
在 d_date
上连接到 date_id
,在 d_customers
上连接到 customer_id
。
我想创建一个 dax 度量,显示每个日期的不同客户列表及其姓名。
我怎么能这样做?
(我是 Dax 的新手,对 Power BI 有点陌生)
预期输出
Table 1
order date Customer Name
2020-01-01 John Doe
2020-01-01 James Simpson
2020-01-03 Emilia Clarke
...
2020-12-31 Jamie Lanister
Table 2
order date distinct_customer_count
2020-01-01 2
2020-01-03 1
...
2020-12-31 1
我的目标不是生成输出,而是查看使用 DAX 从 2 个表生成输出的简单示例。
解决方法
您要求返回列表的度量。这不能直接完成,因为度量必须返回一个标量,除非您打算为所有客户构建一个字符串。 (这可以使用 CONCATATEX() 来完成,但当他显示的客户数量过多时效果不佳)
从您想要的输出中,我看到您希望看到包含日期和在该日期下订单的客户的表格视觉效果。为此,只需创建如下所示的客户计数度量即可
# Customers = DISTINCTCOUNT( f_orderes[customer_id] )
并使用 d_date[date]、d_customer[name] 和 [#Customers] 创建一个表格视觉对象
只使用 d_date[date] 和 [#Customers] 你应该得到表 2
要查看使用这两个表的一些代码,您可以计算计算表,例如,移动到包含客户、日期和销售额的真实数据集,表 1 的简单实现是
SUMMARIZE ( Sales,'Date'[Date],Customer[Name] )
这里是要在 dax.do
上测试的相同代码对于表 2
FILTER (
ADDCOLUMNS (
ALL ( 'Date'[Date] ),"# Customers",CALCULATE ( DISTINCTCOUNT ( Sales[CustomerKey] ) )
),NOT ISBLANK ( [# Customers] )
)
NOT ISBLANK() 上的过滤器需要删除没有销售的日期
这是dax.do上的代码
也可以使用 SUMMARIZECOLUMNS,但 SUMMARIZECOLUMNS 是一种更高级的函数,无法在 DAX 度量中使用。
SUMMARIZECOLUMNS (
'Date'[Date],DISTINCTCOUNT ( Sales[CustomerKey] )
)
这里是dax.do link for this last code snippet
,创建一个计算 f_orders 中不同客户的度量。如果您在按日期分组/过滤的视觉对象中使用该度量,则该度量将显示正确的值。
例如,一个在 X 轴上显示日期并将不同客户计数作为值的图表将显示每天的不同计数。
在 Power BI/DAX 中,您不需要预先计算所有类型的方案,因为度量将始终在页面/视觉过滤器的上下文中进行评估。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。