dax-authoring

作者: microsoft

針對 Power BI 語意模型編寫和測試 DAX 查詢。涵蓋 DAX 語法規則、查詢模式、時間智慧,以及使用…的疊代測試工作流程。

npx skills add https://github.com/microsoft/fabric-apps-analytic-templates --skill dax-authoring

DAX Authoring

Table of Contents

TaskReferenceNotes
Must/Prefer/AvoidSKILL.md: Must/Prefer/AvoidGuardrails for DAX query generation
Generating DAX QueriesSKILL.md: Generating DAX QueriesCore rules, inline examples, EVALUATE/DEFINE patterns
DAX Query Structure & Syntaxdax-query-patterns.md: Query StructureDEFINE / EVALUATE / ORDER BY / START AT
DAX Query Key Componentsdax-query-patterns.md: Key ComponentsDEFINE VAR, DEFINE MEASURE, table expressions
DAX Query Worked Examplesdax-query-patterns.md: Common Patterns11 annotated examples from simple aggregation to cross-table joins
DAX Query Anti-Patternsdax-query-patterns.md: Anti-PatternsWhat to avoid in DAX queries
CALCULATE & CALCULATETABLEdax-core-reference.md: CALCULATE & CALCULATETABLEContext transition, filter types, boolean restrictions, common patterns
SUMMARIZECOLUMNSdax-core-reference.md: SUMMARIZECOLUMNSArgument order, auto-blank elimination, filter args, vs SUMMARIZE
ALL & ALLEXCEPTdax-core-reference.md: ALL & ALLEXCEPTCALCULATE modifier vs table function; percentage patterns
TREATASdax-core-reference.md: TREATASVirtual relationships, multi-column filtering
DAX Syntax Rulesdax-core-reference.md: DAX Syntax RulesEVALUATE, CALCULATE, naming, SQL keywords, DEFINE rules
Common Mistakesdax-core-reference.md: Common MistakesVariable naming, quoting, escaping, scalar EVALUATE, multi-table SUMMARIZECOLUMNS
BLANK Semanticsdax-core-reference.md: BLANK SemanticsBLANK vs NULL, propagation, equality, ISBLANK, DIVIDE, non-empty semantics
Time Intelligence PatternsSKILL.md: Time IntelligenceWhen to consult TI reference
Date Table Prerequisitesdax-time-intelligence.md: PrerequisitesDate table requirements, mark as date table
YTD / QTD / MTDdax-time-intelligence.md: Period-to-DateTOTALYTD, DATESYTD, DATESINPERIOD patterns
Year-over-Year / Period Comparisonsdax-time-intelligence.md: Period ComparisonsSAMEPERIODLASTYEAR, DATEADD, PARALLELPERIOD
Rolling Windowsdax-time-intelligence.md: Rolling WindowsDATESINPERIOD rolling 12-month patterns
Opening/Closing Balancesdax-time-intelligence.md: BalancesSemi-additive measures, LASTDATE, LASTNONBLANK
TI in DAX Queries (Critical Rules)dax-time-intelligence.md: Critical Rules for TI in QueriesCALCULATETABLE + TREATAS pattern for query context
TI Common Mistakesdax-time-intelligence.md: Common MistakesMissing date table, wrong granularity, fiscal calendar
Testing & IterationSKILL.md: Testing & IterationExecute → inspect → fix → re-test workflow

Must / Prefer / Avoid

Must

  • Always test generated DAX via npx fabric-app-data query <alias> --query '<DAX>' before using in app code
  • Use fully-qualified 'Table'[Column] for column references
  • Use simple [Measure] for measure references
  • Use DEFINE for VAR and local MEASURE declarations (single DEFINE block, no commas)
  • Prefer existing model measures over re-aggregating raw data

Prefer

  • SUMMARIZECOLUMNS as the primary grouping function for queries
  • TREATAS for filter arguments in SUMMARIZECOLUMNS
  • Variables (VAR) to improve readability and avoid repeated calculations

Avoid

  • SQL keywords (SELECT, WHERE, HAVING, etc.) within DAX expressions
  • EVALUATE with scalar functions directly (wrap in ROW or table function)

Generating DAX Queries

DAX Syntax Rules

  • Measures are named objects in the semantic model. They specify how to aggregate data. Measures should be used first to answer user requests before a new DAX formula is used to aggregate data.
  • EVALUATE Statement: Not a function but a statement. It must always precede a table expression. Avoid pairing EVALUATE with scalar functions like CONCATENATEX, SUMX, DISTINCTCOUNT, etc.
  • Use the fully-qualified name 'Table'[Column] for column references, and the simple name [Measure] for measure references.
  • CALCULATE takes a scalar expression as its first argument. CALCULATETABLE takes a table expression as its first argument.
  • SUMMARIZECOLUMNS requires a specific order: groupby columns, then filters, then aggregations/measures.
  • Do not use SUMMARIZECOLUMNS when there is no aggregation and the groupby columns belong to more than one table; use VALUES, SUMMARIZE, or SELECTCOLUMNS instead.
  • When using SELECTCOLUMNS or CALCULATETABLE, include any columns needed downstream (ORDER BY, FILTER).
  • Filters propagate across relationships based on unidirectional or bidirectional settings.
  • INTERSECT, UNION, EXCEPT require identical column counts in both inputs.
  • For current date/time, use TODAY() or NOW().

Inline Examples

Simple filtered aggregation:

// Total sales for red products
EVALUATE
  ROW("Total Sales Amount", CALCULATE([Total Amount], 'Product'[Color] == "Red"))

Multi-filter grouping with SUMMARIZECOLUMNS:

DEFINE
  VAR _Filter1 = TREATAS({"Consumer Electronics"}, 'Product'[Category])
  VAR _Filter2 = FILTER(ALL('Calendar'[Year]), 'Calendar'[Year] >= 2022 && 'Calendar'[Year] <= 2023)

EVALUATE
  SUMMARIZECOLUMNS(
    'Calendar'[Year],
    'Calendar'[Month],
    _Filter1,
    _Filter2,
    "Total Quantity", SUM('Sales'[Order Quantity]),
    "Discount", [Total Discount]
  )

TopN with filtering:

DEFINE
  VAR _Filter = TREATAS({"Red", "Black"}, 'Product'[Color])
  VAR _Core = SUMMARIZECOLUMNS('Product'[Name], _Filter, "Total Sales", [Total Amount])

EVALUATE
  TOPN(10, _Core, [Total Sales], DESC)

For full syntax reference, worked examples, and anti-patterns, see dax-query-patterns.md. For function details, see dax-core-reference.md.

Time Intelligence

Time intelligence functions enable period-based analysis (YTD, YoY, rolling windows, etc.). They require a properly configured Date table.

Consult dax-time-intelligence.md whenever the user's request involves:

  • Period-to-date calculations (YTD, QTD, MTD)
  • Period comparisons (Year-over-Year, Month-over-Month)
  • Rolling windows (last 12 months, last 30 days)
  • Opening/closing balances
  • Custom date ranges

Testing & Iteration

  1. Generate the DAX query expression
  2. Execute via npx fabric-app-data query <alias> --query '<DAX>'
  3. Inspect results: check column names, data types, row counts, and actual data values
  4. If error: consult dax-core-reference.md, fix, and re-test
  5. Iterate until the query returns expected results

Query Execution

Use npx fabric-app-data query <alias> --query '<DAX>' to run queries. This uses the same SDK pipeline as the running app, so results are identical to what the app produces at runtime. To re-test an existing .dax file without copying the query text, use --file: npx fabric-app-data query <alias> --file src/queries/revenue.dax. For full CLI options (profiles, result limits), see the fabric-cli skill.

Result trimming: The CLI returns at most 1000 rows by default. When the result is trimmed, the output includes a _cliWarning field (e.g., "Result trimmed to first 1000 of 5000 rows"). This is a CLI-only limitation — the full dataset is available in the running app. If you need to see more data, refine your DAX with filters or aggregations.

Troubleshooting

ProblemSolution
CLI query fails with "not signed in"Run az login to sign in to Azure CLI
CLI query fails with "Azure CLI is not installed"Install from https://aka.ms/install-azure-cli
CLI query fails with "alias not found"Run npx fabric-app-data list to check available aliases, then npx fabric-app-data add to register
DAX syntax errorsConsult dax-core-reference.md — check reserved keywords, quoting rules, EVALUATE/scalar mistakes
Unexpected query resultsCheck filter context, relationship direction, BLANK handling in dax-core-reference.md
Time intelligence returns wrong valuesCheck date table prerequisites and critical rules in dax-time-intelligence.md

來自 microsoft 的更多技能

oss-growth
microsoft
開源增長駭客角色
agent-framework-azure-ai-py
microsoft
使用Microsoft Agent Framework Python SDK(agent-framework-azure-ai)构建Azure AI Foundry代理。适用于使用AzureAIAgentsProvider创建持久化代理、使用托管工具(代码解释器、文件搜索、网络搜索)、集成MCP服务器、管理对话线程或实现流式响应。涵盖函数工具、结构化输出和多工具代理。
development
airunway-aks-setup
microsoft
在AKS上設定AI Runway——從裸叢集到執行模型。涵蓋叢集驗證、控制器安裝、GPU評估、供應商設定及首次部署。時機:「設定AI Runway」、「上線AKS叢集」、「安裝AI Runway」、「airunway設定」、「部署模型至AKS」、「在AKS上進行GPU推論」、「在AKS上設定KAITO」、「在AKS上執行LLM」、「在AKS上使用vLLM」、「在AKS上設定模型服務」、「AI Runway控制器」。
devops
appinsights-instrumentation
microsoft
使用Azure Application Insights檢測Web應用程式的指南。提供遙測模式、SDK設定與組態參考。適用時機:如何檢測應用程式、App Insights SDK、遙測模式、什麼是App Insights、Application Insights指南、檢測範例、APM最佳實踐。
devops
applicationinsights-web-ts
microsoft
使用Application Insights JavaScript SDK(@microsoft/applicationinsights-web)為瀏覽器/Web應用程式進行檢測。適用於真實使用者監控(RUM)——頁面檢視、點擊、AJAX/fetch依賴、例外、自訂事件,以及與後端OpenTelemetry追蹤關聯的瀏覽器端GenAI代理追蹤。涵蓋SDK載入器指令碼與npm設定、框架擴充(React、React Native、Angular)、點擊分析、遙測初始化器,以及從瀏覽器發出的代理/工具/模型span的OTel GenAI語意慣例。
devops
azure-ai-anomalydetector-java
microsoft
使用適用於 Java 的 Azure AI 異常偵測器 SDK 建置異常偵測應用程式。在實作單變量/多變量異常偵測、時間序列分析或 AI 驅動監控時使用。
development
azure-ai-language-conversations-py
microsoft
使用 azure-ai-language-conversations Python SDK 實作對話語言理解(CLU)。當使用 ConversationAnalysisClient 分析對話意圖與實體、建置 NLP 功能,或將語言理解整合至應用程式時使用。
development
azure-ai-ml-py
microsoft
Azure Machine Learning SDK v2 for Python。用於機器學習工作區、作業、模型、資料集、計算資源與管線。 觸發詞:「azure-ai-ml」、「MLClient」、「workspace」、「model registry」、「training jobs」、「datasets」。
development