مرجع Power BI السريع
آخر تحديث
المقاييس والأعمدة والجداول
يُحسب المقياس لكل خلية في المرئي، أما العمود المحسوب فيُحسب مرة واحدة لكل صف ويُخزَّن.
| الغرض | DAX |
|---|---|
| إنشاء مقياس | Total Sales = SUM ( Sales[Amount] ) |
| إنشاء عمود محسوب (قيمة واحدة لكل صف) | Line Total = Sales[Quantity] * Sales[Unit Price] |
| إنشاء جدول محسوب | Top Customers = TOPN ( 10, Customer, [Total Sales] ) |
| الإشارة إلى عمود: اسم الجدول، ثم اسم العمود بين قوسين مربعين | Sales[Amount] |
| وضع اسم الجدول بين علامتي اقتباس إذا كان فيه مسافة أو كان كلمة محجوزة | 'Date'[Date] |
| الإشارة إلى مقياس: بالقوسين المربعين فقط | [Total Sales] |
| استخدام مقياس داخل مقياس آخر | Average Price = DIVIDE ( [Total Sales], [Total Units] ) |
دوال التجميع
تلخّص كل دالة منها عمودًا في سياق التصفية الحالي.
| الغرض | DAX |
|---|---|
| جمع قيم عمود | SUM ( Sales[Amount] ) |
| متوسط عمود | AVERAGE ( Sales[Amount] ) |
| أصغر قيمة | MIN ( Sales[Order Date] ) |
| أكبر قيمة | MAX ( Sales[Order Date] ) |
| عدّ صفوف جدول | COUNTROWS ( Sales ) |
| عدّ القيم غير الفارغة في عمود | COUNT ( Sales[Amount] ) |
| عدّ القيم المميزة | DISTINCTCOUNT ( Sales[Customer Key] ) |
| قسمة آمنة: قيمة فارغة بدل الخطأ عندما يكون المقام 0 | DIVIDE ( [Total Sales], [Total Units] ) |
| قسمة مع قيمة تظهر عندما يكون المقام 0 | DIVIDE ( [Profit], [Total Sales], 0 ) |
المكررات (دوال X)
تمرّ على الجدول صفًا صفًا، وتحسب تعبيرًا لكل صف، ثم تجمع النتائج.
| الغرض | DAX |
|---|---|
| الضرب في كل صف ثم الجمع | SUMX ( Sales, Sales[Quantity] * Sales[Unit Price] ) |
| متوسط نتيجة كل صف | AVERAGEX ( Sales, Sales[Quantity] * Sales[Unit Price] ) |
| أكبر نتيجة بين الصفوف | MAXX ( Sales, Sales[Quantity] * Sales[Unit Price] ) |
| متوسط مقياس لكل عميل | AVERAGEX ( VALUES ( Customer[Customer Key] ), [Total Sales] ) |
| استخدام عمود من جدول مرتبط داخل التعبير | SUMX ( Sales, Sales[Quantity] * RELATED ( Product[Unit Cost] ) ) |
| عدّ الصفوف التي تحقق شرطًا | COUNTROWS ( FILTER ( Sales, Sales[Quantity] >= 3 ) ) |
| ترتيب كل المنتجات حسب مقياس | RANKX ( ALL ( Product[Product] ), [Total Sales] ) |
| ترتيب بلا فجوات بعد التعادل (1، 1، 2) | RANKX ( ALL ( Product[Product] ), [Total Sales], , DESC, DENSE ) |
| ضمّ القيم في نص واحد | CONCATENATEX ( VALUES ( Product[Category] ), Product[Category], ", " ) |
CALCULATE ودوال التصفية
تحسب CALCULATE تعبيرًا بعوامل تصفية معدّلة. عامل التصفية على العمود نفسه يحلّ محل القديم، وعوامل التصفية على أعمدة مختلفة تجتمع بـ AND.
| الغرض | DAX |
|---|---|
| التصفية على قيمة واحدة | CALCULATE ( [Total Sales], Product[Category] = "Bikes" ) |
| التصفية على قائمة قيم | CALCULATE ( [Total Sales], Product[Color] IN { "Red", "Blue" } ) |
| عاملا تصفية (AND) | CALCULATE ( [Total Sales], Product[Color] = "Red", Store[Country] = "Spain" ) |
| OR عبر عمودين | CALCULATE ( [Total Sales], FILTER ( ALL ( Product[Color], Product[Brand] ), Product[Color] = "Red" || Product[Brand] = "Contoso" ) ) |
| التصفية حسب مقياس | CALCULATE ( [Total Sales], FILTER ( VALUES ( Customer[Customer Key] ), [Total Sales] > 1000 ) ) |
| الإبقاء على عامل التصفية الحالي والتقاطع معه | CALCULATE ( [Total Sales], KEEPFILTERS ( Product[Color] IN { "Red", "Blue" } ) ) |
| إزالة عوامل التصفية عن عمود | CALCULATE ( [Total Sales], REMOVEFILTERS ( Product[Category] ) ) |
| إزالة كل عوامل التصفية عن جدول | CALCULATE ( [Total Sales], ALL ( Product ) ) |
| إزالة كل عوامل التصفية عن جدول ما عدا بعض الأعمدة | CALCULATE ( [Total Sales], ALLEXCEPT ( Store, Store[Country] ) ) |
| الإبقاء على اختيار مقسم طريقة العرض، وتجاهل صفوف المرئي نفسه | CALCULATE ( [Total Sales], ALLSELECTED ( Product[Category] ) ) |
| استخدام علاقة غير نشطة | CALCULATE ( [Total Sales], USERELATIONSHIP ( Sales[Ship Date], 'Date'[Date] ) ) |
| جعل التصفية تسري في الاتجاهين لمقياس واحد | CALCULATE ( COUNTROWS ( Customer ), CROSSFILTER ( Sales[Customer Key], Customer[Customer Key], BOTH ) ) |
| التصفية بجدول لا تربطه به علاقة | CALCULATE ( [Total Sales], TREATAS ( VALUES ( Budget[Category] ), Product[Category] ) ) |
التحليل الذكي للوقت
تحتاج هذه الدوال إلى جدول تاريخ: صف واحد لكل يوم، بلا فجوات، ومعلَّم كجدول تاريخ.
| الغرض | DAX |
|---|---|
| منذ بداية العام | TOTALYTD ( [Total Sales], 'Date'[Date] ) |
| منذ بداية العام، لسنة مالية تنتهي في 30 يونيو | TOTALYTD ( [Total Sales], 'Date'[Date], "6/30" ) |
| منذ بداية العام داخل CALCULATE | CALCULATE ( [Total Sales], DATESYTD ( 'Date'[Date] ) ) |
| منذ بداية الربع | TOTALQTD ( [Total Sales], 'Date'[Date] ) |
| منذ بداية الشهر | TOTALMTD ( [Total Sales], 'Date'[Date] ) |
| الفترة نفسها من العام الماضي | CALCULATE ( [Total Sales], SAMEPERIODLASTYEAR ( 'Date'[Date] ) ) |
| إزاحة التواريخ بفاصل زمني (هنا شهر واحد إلى الوراء) | CALCULATE ( [Total Sales], DATEADD ( 'Date'[Date], -1, MONTH ) ) |
| الشهر السابق كاملًا | CALCULATE ( [Total Sales], PREVIOUSMONTH ( 'Date'[Date] ) ) |
| الفترة كاملة قبل عام | CALCULATE ( [Total Sales], PARALLELPERIOD ( 'Date'[Date], -1, YEAR ) ) |
| آخر 12 شهرًا حتى آخر تاريخ ظاهر | CALCULATE ( [Total Sales], DATESINPERIOD ( 'Date'[Date], MAX ( 'Date'[Date] ), -12, MONTH ) ) |
| نطاق تواريخ ثابت | CALCULATE ( [Total Sales], DATESBETWEEN ( 'Date'[Date], DATE ( 2025, 1, 1 ), DATE ( 2025, 3, 31 ) ) ) |
أنماط مقاييس شائعة
انسخها، ثم غيّر أسماء الجداول والأعمدة لتطابق نموذجك.
| الغرض | DAX |
|---|---|
| النسبة من كل الفئات | Category % = DIVIDE ( [Total Sales], CALCULATE ( [Total Sales], REMOVEFILTERS ( Product[Category] ) ) ) |
| النسبة مما تتركه مقسمات طرق العرض | Visible % = DIVIDE ( [Total Sales], CALCULATE ( [Total Sales], ALLSELECTED ( Product[Category] ) ) ) |
| النمو مقارنة بالعام الماضي | YoY % = VAR LastYear = CALCULATE ( [Total Sales], SAMEPERIODLASTYEAR ( 'Date'[Date] ) ) RETURN DIVIDE ( [Total Sales] - LastYear, LastYear ) |
| الإجمالي التراكمي على كل الفترات | Running Total = CALCULATE ( [Total Sales], FILTER ( ALL ( 'Date'[Date] ), 'Date'[Date] <= MAX ( 'Date'[Date] ) ) ) |
| متوسط متحرك لسبعة أيام (لكل يوم فيه مبيعات) | Sales 7 Day Avg = AVERAGEX ( DATESINPERIOD ( 'Date'[Date], MAX ( 'Date'[Date] ), -7, DAY ), [Total Sales] ) |
| إظهار القيمة لأعلى 5 فقط | Top 5 Sales = IF ( RANKX ( ALLSELECTED ( Product[Product] ), [Total Sales] ) <= 5, [Total Sales] ) |
| عدّ العملاء فوق حدّ معيّن | Big Customers = COUNTROWS ( FILTER ( VALUES ( Customer[Customer Key] ), [Total Sales] > 1000 ) ) |
| جعل الإجمالي يساوي مجموع صفوفه | Bonus Total = SUMX ( VALUES ( Product[Category] ), [Bonus] ) |
| إظهار القيمة في مستوى واحد فقط من المصفوفة | Category Rank = IF ( ISINSCOPE ( Product[Category] ), RANKX ( ALL ( Product[Category] ), [Total Sales] ) ) |
| الرصيد الختامي: آخر تاريخ فيه قيمة | Closing Units = CALCULATE ( SUM ( Inventory[Units] ), LASTNONBLANK ( 'Date'[Date], CALCULATE ( SUM ( Inventory[Units] ) ) ) ) |
الدوال المنطقية ودوال المعلومات
للشروط، ولمعرفة ما يحتويه سياق التصفية.
| الغرض | DAX |
|---|---|
| شرط واحد | IF ( [Total Sales] > 1000, "High", "Low" ) |
| عدة قيم لتعبير واحد | SWITCH ( Store[Country], "Spain", "ES", "Portugal", "PT", "Other" ) |
| نطاقات تُفحص من الأعلى إلى الأسفل | SWITCH ( TRUE (), [Total Sales] >= 10000, "A", [Total Sales] >= 1000, "B", "C" ) |
| AND وOR | IF ( Sales[Quantity] > 2 && Sales[Amount] > 50, "Big", "Small" ) |
| هل القيمة فارغة؟ | ISBLANK ( [Total Sales] ) |
| أول قيمة غير فارغة | COALESCE ( [Total Sales], 0 ) |
| هل يترك عامل التصفية قيمة واحدة بالضبط؟ | HASONEVALUE ( Product[Category] ) |
| تلك القيمة الواحدة، أو قيمة افتراضية | SELECTEDVALUE ( Product[Category], "All categories" ) |
| هل هذا الصف من المرئي مجمّع حسب العمود؟ | ISINSCOPE ( Product[Category] ) |
| إرجاع قيمة فارغة | BLANK () |
دوال النص
يضمّ العامل & النصوص، وتحوّل FORMAT رقمًا أو تاريخًا إلى نص.
| الغرض | DAX |
|---|---|
| ضمّ النصوص | Customer[First Name] & " " & Customer[Last Name] |
| تنسيق رقم | FORMAT ( [Total Sales], "#,0.00" ) |
| تنسيق تاريخ | FORMAT ( 'Date'[Date], "mmm yyyy" ) |
| الأحرف الأولى | LEFT ( Product[Code], 3 ) |
| أحرف تبدأ من موضع معيّن | MID ( Product[Code], 4, 2 ) |
| الطول | LEN ( Product[Name] ) |
| تحويل إلى أحرف كبيرة | UPPER ( Store[City] ) |
| إزالة المسافات الزائدة | TRIM ( Customer[Name] ) |
| استبدال نص | SUBSTITUTE ( Customer[Phone], " ", "" ) |
| موضع نص دون مراعاة حالة الأحرف (0 إذا لم يوجد) | SEARCH ( "pro", Product[Name], 1, 0 ) |
دوال التاريخ
التواريخ أرقام في الأساس، لذا يمكنك طرح تاريخ من آخر لتحصل على عدد الأيام.
| الغرض | DAX |
|---|---|
| تاريخ اليوم | TODAY () |
| إنشاء تاريخ | DATE ( 2025, 12, 31 ) |
| سنة التاريخ | YEAR ( 'Date'[Date] ) |
| رقم الشهر | MONTH ( 'Date'[Date] ) |
| يوم الأسبوع، والاثنين هو 1 | WEEKDAY ( 'Date'[Date], 2 ) |
| رقم الأسبوع، والأسابيع تبدأ يوم الاثنين | WEEKNUM ( 'Date'[Date], 2 ) |
| آخر يوم في الشهر | EOMONTH ( 'Date'[Date], 0 ) |
| اليوم نفسه قبل شهر | EDATE ( 'Date'[Date], -1 ) |
| عدد الأيام بين تاريخين | DATEDIFF ( Sales[Order Date], Sales[Ship Date], DAY ) |
| جدول تاريخ من تواريخ ثابتة | CALENDAR ( DATE ( 2024, 1, 1 ), DATE ( 2025, 12, 31 ) ) |
| جدول تاريخ من التواريخ الموجودة في النموذج | CALENDARAUTO () |
العلاقات والبحث
تتبع RELATED العلاقة من الطرف المتعدد إلى الطرف الأحادي.
| الغرض | DAX |
|---|---|
| قيمة من الطرف الأحادي (في عمود على Sales) | RELATED ( Product[Category] ) |
| صفوف الطرف المتعدد المرتبطة بالصف الحالي (في عمود على Customer) | COUNTROWS ( RELATEDTABLE ( Sales ) ) |
| البحث عن قيمة دون علاقة | LOOKUPVALUE ( Product[Price], Product[SKU], Sales[SKU] ) |
| مسار الأصل والفرع (للتسلسلات الهرمية والأمان على مستوى الصف) | PATH ( Employee[Employee ID], Employee[Manager ID] ) |
| المستخدم الذي سجّل الدخول، للأمان الديناميكي على مستوى الصف | USERPRINCIPALNAME () |
دوال الجداول
تُرجع جداول: استخدمها في جدول محسوب، أو داخل CALCULATE، أو في مكرر.
| الغرض | DAX |
|---|---|
| القيم المميزة في عامل التصفية الحالي | VALUES ( Product[Category] ) |
| الصفوف التي تحقق شرطًا | FILTER ( Product, Product[Price] > 100 ) |
| أعلى N صفوف حسب مقياس | TOPN ( 5, ALL ( Product[Product] ), [Total Sales] ) |
| التجميع حسب أعمدة وإضافة مقاييس | SUMMARIZECOLUMNS ( Product[Category], "Sales", [Total Sales] ) |
| إضافة عمود إلى جدول | ADDCOLUMNS ( VALUES ( Product[Category] ), "Sales", [Total Sales] ) |
| اختيار أعمدة وإعادة تسميتها | SELECTCOLUMNS ( Customer, "Name", Customer[Name], "City", Customer[City] ) |
| قائمة أرقام | GENERATESERIES ( 1, 10, 1 ) |
| كل التوافيق بين جدولين | CROSSJOIN ( VALUES ( 'Date'[Year] ), VALUES ( Product[Category] ) ) |
| تكديس جدولين لهما الأعمدة نفسها | UNION ( 'Sales 2024', 'Sales 2025' ) |
المتغيرات
يسمّي VAR خطوة ويحسبها مرة واحدة، ويعطي RETURN النتيجة.
| الغرض | DAX |
|---|---|
| متغير واحد | Margin % = VAR Revenue = [Total Sales] RETURN DIVIDE ( Revenue - [Total Cost], Revenue ) |
| عدة متغيرات | Sales vs LY = VAR CY = [Total Sales] VAR PY = CALCULATE ( [Total Sales], SAMEPERIODLASTYEAR ( 'Date'[Date] ) ) RETURN CY - PY |
| جدول داخل متغير | Top 5 Total = VAR Top5 = TOPN ( 5, ALL ( Product[Product] ), [Total Sales] ) RETURN CALCULATE ( [Total Sales], Top5 ) |
خطوات Power Query (M)
يشكّل Power Query البيانات قبل تحميلها. هذه صيغ M التي تعمل خلف الأزرار الشائعة.
| الغرض | M |
|---|---|
| الإبقاء على الصفوف المطابقة | Table.SelectRows(Source, each [Status] = "Paid") |
| إزالة أعمدة | Table.RemoveColumns(Source, {"Notes", "Temp"}) |
| تعيين أنواع الأعمدة | Table.TransformColumnTypes(Source, {{"Amount", type number}, {"Date", type date}}) |
| إعادة تسمية عمود | Table.RenameColumns(Source, {{"amt", "Amount"}}) |
| إضافة عمود | Table.AddColumn(Source, "Total", each [Quantity] * [Price], type number) |
| دمج استعلامين (ربط) | Table.NestedJoin(Sales, {"ProductID"}, Products, {"ProductID"}, "Product", JoinKind.LeftOuter) |
| إلحاق استعلامات (تكديس) | Table.Combine({Sales2024, Sales2025}) |
| إلغاء تمحور الأعمدة إلى صفوف | Table.UnpivotOtherColumns(Source, {"Product"}, "Month", "Amount") |
| التجميع والتلخيص | Table.Group(Source, {"Category"}, {{"Sales", each List.Sum([Amount]), type number}}) |
| استبدال الأخطاء بقيمة | Table.ReplaceErrorValues(Source, {{"Amount", 0}}) |
يجمع مرجع Power BI السريع هذا صيغ DAX الأكثر استخدامًا في صفحة واحدة: التجميعات، ومكررات X، وCALCULATE والدوال التي تغيّر عوامل التصفية، والتحليل الذكي للوقت، ودوال النص والتاريخ، وأنماط مقاييس يمكنك نسخها، مثل النسبة من الإجمالي والنمو مقارنة بالعام الماضي والإجمالي التراكمي.
تستخدم الأمثلة نموذج مبيعات فيه الجداول Sales وProduct وCustomer و'Date'؛ غيّر الأسماء لتطابق نموذجك. حُلّلت كل صيغ DAX هنا بالمحرك الذي تعمل به دورة Power BI في Coddy، وفيها تكتب DAX في مساحة عمل Power BI داخل متصفحك ويُتحقَّق منه.
أسئلة شائعة عن مرجع Power BI السريع
هل مرجع Power BI السريع هذا مجاني؟
نعم. اقرأه هنا أو احفظه في المفضلة، بلا تسجيل.
ما الفرق بين المقياس والعمود المحسوب؟
يُحسب العمود المحسوب مرة واحدة لكل صف عند التحديث ويُخزَّن، لذا يمكنك التقسيم حسبه. أما المقياس فيُحسب لكل خلية في المرئي، بعوامل تصفية تلك الخلية، ولا يخزّن شيئًا. الإجماليات والنسب مكانها المقاييس.
ماذا تفعل CALCULATE؟
تحسب تعبيرًا بعوامل تصفية معدّلة: تضيف عوامل تصفية أو تستبدلها أو تزيلها، ثم تحسب النتيجة. ومعظم DAX بعد الإجماليات البسيطة هو CALCULATE مع وسائط التصفية المناسبة.
لماذا أستخدم DIVIDE بدل العامل /؟
DIVIDE قيمة فارغة (أو قيمة تختارها) عندما يكون المقام صفرًا أو فارغًا. أما العامل / فيُرجع ما لا نهاية أو قيمة خطأ، وتظهر هذه في المرئيات.هل أحتاج إلى جدول تاريخ للتحليل الذكي للوقت؟
TOTALYTD وSAMEPERIODLASTYEAR إلى جدول فيه صف لكل يوم، بلا فجوات وبسنوات كاملة، مرتبط بجداول الحقائق ومعلَّم كجدول تاريخ.هل يعمل DAX هذا في Power Pivot في Excel وفي Analysis Services؟
لغة DAX مشتركة، لذا يعمل كله تقريبًا هناك أيضًا. بعض الدوال الأحدث تصل إلى Power BI أولًا.
أين أتدرّب على DAX؟
في دورة Power BI على Coddy: يمنحك كل درس مساحة عمل Power BI في المتصفح، ويتحقق من مقياسك على بيانات الدرس وعلى نسخ مخفية منها.