dax-authoring

bởi microsoft

Viết và kiểm thử các truy vấn DAX trên mô hình ngữ nghĩa Power BI. Bao gồm các quy tắc cú pháp DAX, mẫu truy vấn, thông minh thời gian và quy trình kiểm thử lặp lại sử dụng…

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

Thêm skills từ microsoft

oss-growth
microsoft
Cá tính tăng trưởng OSS
agent-framework-azure-ai-py
microsoft
Xây dựng các tác nhân Azure AI Foundry bằng SDK Python của Microsoft Agent Framework (agent-framework-azure-ai). Sử dụng khi tạo các tác nhân bền vững với AzureAIAgentsProvider, sử dụng các công cụ được lưu trữ (trình thông dịch mã, tìm kiếm tệp, tìm kiếm web), tích hợp máy chủ MCP, quản lý chuỗi hội thoại hoặc triển khai phản hồi phát trực tuyến. Bao gồm các công cụ hàm, đầu ra có cấu trúc và các tác nhân đa công cụ.
development
airunway-aks-setup
microsoft
Thiết lập AI Runway trên AKS — từ cụm trống đến mô hình đang chạy. Bao gồm xác minh cụm, cài đặt controller, đánh giá GPU, thiết lập nhà cung cấp và triển khai đầu tiên. KHI NÀO: "thiết lập AI Runway", "onboard cụm AKS", "cài đặt AI Runway", "thiết lập airunway", "triển khai mô hình lên AKS", "suy luận GPU trên AKS", "thiết lập KAITO trên AKS", "chạy LLM trên AKS", "vLLM trên AKS", "thiết lập phục vụ mô hình trên AKS", "AI Runway controller".
devops
appinsights-instrumentation
microsoft
Hướng dẫn để instrument các ứng dụng web với Azure Application Insights. Cung cấp các mẫu telemetry, thiết lập SDK, và tài liệu tham khảo cấu hình. KHI NÀO: cách instrument ứng dụng, App Insights SDK, các mẫu telemetry, App Insights là gì, hướng dẫn Application Insights, ví dụ instrumentation, các phương pháp tốt nhất APM.
devops
applicationinsights-web-ts
microsoft
Instrument các ứng dụng trình duyệt/web bằng SDK JavaScript Application Insights (@microsoft/applicationinsights-web). Dùng cho Real User Monitoring (RUM) — lượt xem trang, nhấp chuột, phụ thuộc AJAX/fetch, ngoại lệ, sự kiện tùy chỉnh và dấu vết tác nhân GenAI phía trình duyệt tương quan với dấu vết OpenTelemetry phía backend. Bao gồm thiết lập SDK Loader Script và npm, tiện ích mở rộng framework (React, React Native, Angular), Click Analytics, trình khởi tạo telemetry và quy ước ngữ nghĩa OTel GenAI cho các span tác nhân/công cụ/mô hình phát ra từ trình duyệt.
devops
azure-ai-anomalydetector-java
microsoft
Xây dựng ứng dụng phát hiện bất thường với Azure AI Anomaly Detector SDK cho Java. Sử dụng khi triển khai phát hiện bất thường đơn biến/đa biến, phân tích chuỗi thời gian hoặc giám sát hỗ trợ AI.
development
azure-ai-language-conversations-py
microsoft
Triển khai Conversational Language Understanding (CLU) bằng SDK Python azure-ai-language-conversations. Sử dụng khi làm việc với ConversationAnalysisClient để phân tích ý định và thực thể trong hội thoại, xây dựng tính năng NLP, hoặc tích hợp hiểu ngôn ngữ vào ứng dụng.
development
azure-ai-ml-py
microsoft
Azure Machine Learning SDK v2 cho Python. Dùng cho không gian làm việc ML, công việc, mô hình, tập dữ liệu, tính toán và quy trình. Kích hoạt: "azure-ai-ml", "MLClient", "không gian làm việc", "đăng ký mô hình", "công việc đào tạo", "tập dữ liệu".
development