parameter-passing - 将参数传递给 DAX 查询报表生成器
问题描述
我需要一些帮助。下面是我从 Power BI 复制到 Power BI Report Builder 的 DAX 查询。我希望将参数传递到此查询中以获取“edw dim_paycom_amcs_location_xref”[Paycom_Location_Desc]。但是,我不确定将其放在查询中的哪个位置。我已经对此进行了研究,无论我尝试将它放在哪里,我都会收到错误。有人能帮忙吗?非常感谢。
// DAX Query
DEFINE
VAR __DS0FilterTable =
TREATAS({"2021"}, 'edw dimDate'[Year])
VAR __DS0FilterTable2 =
TREATAS({"August"}, 'edw dimDate'[MonthName])
VAR __DS0Core =
SUMMARIZECOLUMNS(
'edw dimDate'[MonthYear],
'edw dimDate'[Month],
'edw dim_paycom_amcs_location_xref'[Paycom_Location_Desc],
__DS0FilterTable,
__DS0FilterTable2,
"SumOvertime_Hours_by_Day", CALCULATE(SUM('PaycomHours'[Overtime_Hours_by_Day])),
"SumReg_Hours_by_Day", CALCULATE(SUM('PaycomHours'[Reg_Hours_by_Day])),
"Transportation", 'PaycomHours'[Transportation],
"Total_Inbound_Tons", 'PaycomHours'[Total Inbound Tons],
"Total_Inbound_Tons__excl_Yakima_", 'PaycomHours'[Total Inbound Tons (excl Yakima)],
"No_Operating_Days", 'edw dimDate'[No.Operating Days],
"Tonnage_Inbound__3rd_Party", 'PaycomHours'[Tonnage Inbound- 3rd Party],
"Tonnage_Inbound__Intercompany", 'PaycomHours'[Tonnage Inbound- Intercompany],
"Tonnage_Inbound___3rd_Party_Metal", 'PaycomHours'[Tonnage Inbound - 3rd Party Metal],
"Tonnage___Intercompany_Metal", 'PaycomHours'[Tonnage - Intercompany Metal],
"Tonnage___Intercompany_Hog_Fuel", 'PaycomHours'[Tonnage - Intercompany Hog Fuel],
"Tonnage___3rd_Party_Hog_Fuel", 'PaycomHours'[Tonnage - 3rd Party Hog Fuel],
"Total_Commodities_Volume_Sold", 'PaycomHours'[Total Commodities Volume Sold],
"Tonnage___Intercompany_Cardboard", 'PaycomHours'[Tonnage - Intercompany Cardboard],
"Tonnage___Intercompany_ALL", 'PaycomHours'[Tonnage - Intercompany ALL],
"Tonnage___3rd_Party_ALL", 'PaycomHours'[Tonnage - 3rd Party ALL]
)
VAR __DS0PrimaryWindowed =
TOPN(
501,
__DS0Core,
'edw dimDate'[Month],
1,
'edw dimDate'[MonthYear],
1,
'edw dim_paycom_amcs_location_xref'[Paycom_Location_Desc],
1
)
EVALUATE
__DS0PrimaryWindowed
ORDER BY
'edw dimDate'[Month],
'edw dimDate'[MonthYear],
'edw dim_paycom_amcs_location_xref'[Paycom_Location_Desc]
解决方案
我在报表生成器中使用 DAX 的参数时遇到了很多困难。根据您的需求,有几种不同的方法。
第一个问题,你需要用户能够改变参数的值吗?如果是这样,您需要在报告数据的“参数”下定义它。
接下来,无论您之前的答案如何,您都需要在数据集中定义参数。
如果您使用的是用户可选择的参数,请使用 [@User_Parameter_Name] 的屏幕截图中显示的符号。如果你点击进入函数编辑器,你会看到这对应于 VB.Net 表达式=Parameters!User_Parameter_Name.Value
第二个问题是您是否将查询直接输入到数据集属性的查询框中。如果您只是将 PBI 中的 DAX 粘贴到该框中,那么您应该很高兴。
但是,如果您使用的是查询设计器(如果您不使用,我不能怪您),那么您需要按照您已经发现的那样做,并在查询设计器中重新声明参数。 这里的查询参数的问题是,他们真的很难默认为空值......此外,当我有一个参数时,查询设计器似乎总是忘记我每次打开它时使用的是 DAX 而不是 MDX。
但无论如何,一旦您在此处声明它,您就可以在查询本身中引用它们。
最后,如果您需要传递一个值列表而不是单个值,我让它工作的唯一方法是使用这个奇怪的、文档很少的函数 RSCustomDaxFilter 来创建一个过滤表:
VAR MonthFilter=
SUMMARIZECOLUMNS (
'Month'[Month],
RSCustomDaxFilter(@MonthQP,EqualToCondition, [Month].[Month], String
)
我可以对这个函数的工作原理做出一些推断;Table.Field 语法和指定对象类型让我认为至少是在 VB.Net 之后建模的,但是除了在几乎只有这种确切情况下如何使用它的示例之外,我还没有找到任何关于它如何工作的官方文档,最好的解释来自Chris Webb 的博客,早在 2019 年。此外,如果您不使用查询设计器,它喜欢在执行查询准备时冻结!
推荐阅读
- javascript - 使用 Javascript 访问 iFrame 中的 DOM
- c++ - 如何将程序中的所有变量初始化为零而不在c ++中显式执行
- html - 从选择框中选择一个值并使用 jquery 从另一个选择框中自动选择一个值
- google-sheets - 时间轴图的 Google Sheet 日期和时间格式错误
- vue.js - 如何验证 vuetify 规则中的数字
- rust - 如何避免比较两种不同的整数类型?
- kubernetes - 版本“projectcalico.org/v3”中没有匹配类型“CalicoAPIConfig”
- python - python中大型二维数组的有效重新网格化
- twilio - 如何从 Twilio Studio Whatsapp 消息中获取“纬度”和“经度”字段
- r - 有没有办法让图表突出显示以及在 R 中选择元素的交互性?