DAX (Data Analysis Expressions) একটি এক্সপ্রেশন ভাষা যা Power BI, PowerPivot, এবং SQL Server Analysis Services (SSAS)-এ ব্যবহৃত হয় ডেটা বিশ্লেষণ এবং কাস্টম ক্যালকুলেশন তৈরি করতে। DAX এর কিছু মৌলিক ধারণার মধ্যে একটি হল Row Context। Row Context হল একটি কনসেপ্ট যা DAX এর কাজের ধরন এবং ডেটার প্রক্রিয়া বোঝাতে সাহায্য করে, বিশেষ করে যখন আপনি calculated columns বা iterators ব্যবহার করেন।
এই প্রবন্ধে, আমরা Row Context কী এবং এটি কিভাবে কাজ করে, তা বিস্তারিতভাবে আলোচনা করব।
১. Row Context কী?
Row Context হল DAX-এ একটি বিশেষ প্রক্রিয়া যা প্রতিটি row বা record এর জন্য একটি নির্দিষ্ট ক্যালকুলেশন তৈরি করতে ব্যবহৃত হয়। এটি তখন তৈরি হয় যখন আপনি calculated columns বা iterators ফাংশনগুলি ব্যবহার করেন। DAX স্বয়ংক্রিয়ভাবে প্রতিটি row এর জন্য ক্যালকুলেশন করার সময় Row Context তৈরি করে।
Row Context সাধারণত calculated columns বা row-based calculations এর ক্ষেত্রে ব্যবহৃত হয়। এর মাধ্যমে, DAX প্রতিটি সারির জন্য আলাদাভাবে গণনা করে এবং কলামের মান তৈরি করে।
২. Row Context এর উদাহরণ
Calculated Columns
Calculated Columns হল এমন কলাম যা row context অনুযায়ী প্রতিটি সারির জন্য একটি কাস্টম এক্সপ্রেশন বা ফর্মুলা তৈরি করে। যখন আপনি কোনো calculated column তৈরি করেন, তখন DAX প্রতিটি রো (বা সারি) এর জন্য নির্দিষ্ট ক্যালকুলেশন করবে।
Example: ধরা যাক, আপনার Sales টেবিলের SalesAmount এবং Discount কলাম রয়েছে, এবং আপনি একটি Calculated Column তৈরি করতে চান যা FinalPrice হিসাব করবে (অর্থাৎ, SalesAmount থেকে Discount বাদ দিয়ে):
FinalPrice = Sales[SalesAmount] - Sales[Discount]
এখানে, DAX প্রতিটি Sales টেবিলের সারির জন্য SalesAmount এবং Discount কলামের মানের পার্থক্য বের করবে। এটি একটি row context সৃষ্টি করবে যেখানে প্রতিটি সারির জন্য এই ক্যালকুলেশন পৃথকভাবে করা হবে।
Row Context in Iterators (SUMX, AVERAGEX)
Iterators ফাংশন যেমন SUMX, AVERAGEX ইত্যাদি Row Context তৈরি করতে সাহায্য করে। এগুলি টেবিলের প্রতিটি সারির জন্য কাস্টম এক্সপ্রেশন প্রয়োগ করে এবং তারপর ফলস্বরূপ মানগুলো aggregate করে দেয়।
Example: ধরা যাক, আপনি Sales টেবিলের SalesAmount এবং Quantity কলামের গুণফল (Total Sales) বের করতে চান এবং তারপর SUMX ব্যবহার করে তার মোট যোগফল বের করতে চান:
Total Sales = SUMX(Sales, Sales[SalesAmount] * Sales[Quantity])
এখানে:
- SUMX ফাংশনটি Sales টেবিলের প্রতিটি সারির জন্য SalesAmount এবং Quantity এর গুণফল বের করবে।
- এরপর, SUMX সেই গুণফলের যোগফল নির্ধারণ করবে।
এই প্রক্রিয়ায়, Row Context তৈরি হচ্ছে যেখানে প্রতিটি সারির জন্য SalesAmount এবং Quantity এর গুণফল হিসাব করা হচ্ছে।
৩. Row Context এবং Filter Context এর মধ্যে পার্থক্য
Row Context এবং Filter Context DAX-এ দুটি গুরুত্বপূর্ণ কনসেপ্ট, তবে এদের মধ্যে কিছু মৌলিক পার্থক্য রয়েছে:
| Feature | Row Context | Filter Context |
|---|---|---|
| Context Type | Row-based (calculations for each individual row) | Filter-based (affects which data is included in calculations) |
| How It Works | Affects how DAX processes each row in the table | Affects the data that is considered for calculations (applies to filters) |
| Where Used | Calculated columns, iterators (SUMX, AVERAGEX) | CALCULATE, FILTER, ALL, and similar functions |
| Example | FinalPrice = Sales[Amount] - Sales[Discount] | Total Sales = CALCULATE(SUM(Sales[Amount]), Sales[Region] = "East") |
৪. Row Context এবং CALCULATE এর ব্যবহার
CALCULATE ফাংশনটি DAX-এ একটি অত্যন্ত শক্তিশালী ফাংশন যা filter context পরিবর্তন করতে সাহায্য করে, তবে এটি row context তৈরি করার ক্ষেত্রেও গুরুত্বপূর্ণ ভূমিকা পালন করে। CALCULATE ফাংশনটি সাধারণত filters প্রয়োগ করার জন্য ব্যবহৃত হয়, কিন্তু এটি row context তৈরি করার সময় existing filter context পরিবর্তন করতে পারে।
Example: CALCULATE with Row Context
ধরা যাক, আপনি Sales টেবিলের SalesAmount এর যোগফল বের করতে চান, তবে শুধু সেই রেকর্ডগুলোই গণনা করতে চান যেখানে Quantity 10 এর বেশি:
High Sales = CALCULATE(SUM(Sales[SalesAmount]), Sales[Quantity] > 10)
এখানে:
- CALCULATE ফাংশনটি Sales[Amount] এর যোগফল বের করবে, কিন্তু শুধুমাত্র সেই সারিগুলির জন্য যেখানে Sales[Quantity] > 10 শর্তটি পূর্ণ হচ্ছে।
- এখানে Row Context তৈরি হচ্ছে কারণ DAX Sales টেবিলের প্রতিটি সারির জন্য Sales[Quantity] যাচাই করছে।
৫. Row Context এর সীমানা এবং EARLIER ফাংশন
যখন একটি calculated column তৈরি করা হয় এবং সেখানে একাধিক row context তৈরি হয়, তখন EARLIER ফাংশনটি ব্যবহার করা হয় আগের row context এর মান ফিরিয়ে আনতে।
Example: Using EARLIER in Row Context
ধরা যাক, আপনি চান Sales টেবিলের SalesAmount এর সাথে Discount এর পার্থক্য বের করতে, এবং EARLIER ফাংশনটি ব্যবহার করে আগের Discount মানটি ফেরত পাবেন।
Discount Difference = Sales[SalesAmount] - EARLIER(Sales[Discount], 1)
এখানে:
- EARLIER ফাংশনটি আগের Discount কলামের মানটি ফিরিয়ে দেবে এবং সেগুলির মধ্যে পার্থক্য বের করবে।
EARLIER ফাংশনটি বিশেষভাবে nested row context এর মধ্যে কাজ করে, যেখানে আপনি একাধিক row context তৈরি করতে পারেন এবং আগের row context এর মান বের করতে পারেন।
সারাংশ
Row Context হল DAX-এর একটি গুরুত্বপূর্ণ কনসেপ্ট যা প্রতিটি রো বা সারির জন্য কাস্টম এক্সপ্রেশন বা ফর্মুলা তৈরি করতে ব্যবহৃত হয়। এটি calculated columns এবং iterators ফাংশনগুলির মাধ্যমে কার্যকর হয়। Row Context সাধারণত row-by-row calculation করার সময় ব্যবহৃত হয় এবং এটি ডেটার উপর বিস্তারিত বিশ্লেষণ এবং ক্যালকুলেশন করতে সাহায্য করে। Row Context এবং Filter Context DAX-এর দুটি মৌলিক ধারণা, এবং এগুলি একে অপরের সাথে কাজ করে ডেটা বিশ্লেষণের গতি এবং কার্যকারিতা বৃদ্ধি করে।
Read more