انتقل إلى المحتوى

سحب التصدير في Power BI Desktop

حمّل صفوف الاستجابات مباشرة في Power BI Desktop باستخدام رمز الوصول الخارجي. لا يلزم ربط Microsoft في البوابة لهذه الطريقة.

مرتبط: نظرة عامة على Power BI · الدفع إلى Power BI

قبل البدء

  1. انشر الاستبيان وجمع الاستجابات عبر قناة توزيع.
  2. انسخ الرمز المختصر للاستبيان من رابط الاستبيان أو تبويب التكاملات.
  3. احصل على رمز الوصول الخارجي من الملف الشخصي.

اختصار من البوابة

  1. افتح التكاملاتPower BI → وسّع الطريقة الثانية: سحب التصدير في Power BI Desktop.
  2. انسخ نقطة نهاية التصدير، رأس التفويض، ومقتطف Power Query (M).
  3. الصق استعلام Power Query في Power BI Desktop (انظر أدناه).

1. نقطة نهاية التصدير

استبدل {short_code} بالرمز المختصر للاستبيان.

نقطة النهاية
GET https://api-cxm.akwad.sa/api/v1/integrations/surveys/{short_code}/responses/export

2. الرؤوس

Accept
Accept: application/json
Authorization
X-External-Access-Token: {your_token}

3. معاملات الاستعلام

المعاملالافتراضيالوصف
page1رقم الصفحة
per_page100صفوف لكل صفحة (الحد الأقصى 100)
sortcreated_atcreated_at أو start_time أو end_time
directiondescasc أو desc
search-بحث نصي اختياري في معرّف الاستجابة أو جهة الاتصال أو اسم القناة
since-طابع ISO8601 - إرجاع الصفوف حيث created_at >= since (تحديث تدريجي)
include_piitrueعند false، حذف أعمدة email وphone وip

مثال طلب تدريجي:

GET
https://api-cxm.akwad.sa/api/v1/integrations/surveys/{short_code}/responses/export?since=2026-06-01T00:00:00Z&include_pii=false

4. شكل الاستجابة

حمولة النجاح (عقد المنتج):

JSON
{
  "success": true,
  "message": "Export completed.",
  "data": {
    "columns": [
      "response_id",
      "created_at",
      "status",
      "collector_name",
      "q_nps",
      "q_feedback"
    ],
    "rows": [
      {
        "response_id": "01932a1b-2c3d-7890-abcd-ef1234567890",
        "created_at": "2026-06-08T12:00:00+00:00",
        "status": "pending",
        "collector_name": "Web Link 1",
        "q_nps": 9,
        "q_feedback": "Great service"
      }
    ],
    "meta": {
      "current_page": 1,
      "per_page": 100,
      "total": 250,
      "last_page": 3
    }
  }
}
  • columns - أعمدة بيانات وصفية ثابتة بالإضافة إلى عمود لكل سؤال (رمز السؤال إن وُجد، وإلا q_{question_id}).
  • rows - كائنات مسطّحة بمفاتيح أسماء الأعمدة (بدون answers[] متداخلة).
  • meta - ترقيم الصفحات للتصدير الكامل؛ استخدم since للتحديث التدريجي في استعلامات مخصصة.

5. Power BI Desktop (يدوي)

  1. الحصول على البياناتويب.
  2. اختر متقدم والصق رابط التصدير (أضف ?page=1&per_page=100 إن لزم).
  3. أضف الرأس X-External-Access-Token مع رمزك.
  4. وسّع datarows، أو استخدم مقتطف Power Query أدناه (موصى به - يحمّل كل الصفحات تلقائياً).

6. Power Query (M) - كل الصفحات

استبدل {short_code} و{your_token}. يطابق هذا المقتطف ما يُنشأ في حوار CXM.

Power Query
powerquery
let
    // Step 1: Define API base URL
    baseUrl = "https://api-cxm.akwad.sa/api/v1/integrations/surveys/{short_code}/responses/export",

    // Step 2: Define headers with your token
    headers = [
        #"Content-Type" = "application/json",
        #"X-External-Access-Token" = "{your_token}"
    ],

    // Step 3: Set up request options
    options = [
        Headers = headers,
        ManualStatusHandling = {400, 401, 403, 404}
    ],

    // Step 4: Fetch and expand a single page
    GetPage = (page as number) as table =>
    let
        pageUrl = baseUrl & "?page=" & Number.ToText(page) & "&per_page=100",
        response = Web.Contents(pageUrl, options),
        json = Json.Document(response),
        data = json[data],
        columnsList = data[columns],
        rows = data[rows],
        toTable = Table.FromList(rows, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
        expanded = Table.ExpandRecordColumn(toTable, "Column1", columnsList, columnsList)
    in
        expanded,

    // Step 5: Read total pages from the first page
    firstJson = Json.Document(Web.Contents(baseUrl & "?page=1&per_page=100", options)),
    lastPage = try firstJson[data][meta][last_page] otherwise 1,
    safeLastPage = if lastPage < 1 then 1 else lastPage,

    // Step 6: Fetch all pages and combine rows
    pages = List.Numbers(1, safeLastPage),
    #"Combined Pages" = Table.Combine(List.Transform(pages, each GetPage(_)))
in
    #"Combined Pages"

خصوصية Power BI Desktop

إذا طُلب منك مستويات الخصوصية، اضبط نقطة نهاية API على تنظيمي أو عدّل إعدادات الخصوصية حتى يتمكن Web.Contents من دمج الصفحات.

7. الأمان والبيانات الشخصية

  • عامل رمز الوصول الخارجي ككلمة مرور. أعد إنشاءه من الملف الشخصي إذا تسرّب.
  • اضبط include_pii=false عندما لا تحتاج البريد أو الهاتف أو IP في التقارير.
  • يتبع الوصول للتصدير نفس صلاحيات مساحة العمل لعرض الاستبيان في البوابة.

AKWAD CXM - مركز المساعدة